Sha256: eb770b7ee6c80bc3c19de98e4c306cb3f713ec7511cf019e8d3b59d4293c858a

Contents?: true

Size: 797 Bytes

Versions: 18

Compression:

Stored size: 797 Bytes

Contents

# frozen_string_literal: true

require 'opal/nodes/base'

module Opal
  module Nodes
    module Args
      # Compiles extraction of the block argument
      # def m(&block); end
      #       ^^^^^^
      #
      # This node doesn't exist in the original AST,
      # InlineArgs rewriter creates it to simplify compilation
      class ExtractBlockarg < Base
        handle :extract_blockarg
        children :name

        def compile
          scope.uses_block!
          scope.add_arg name
          scope.block_name = name

          scope_name  = scope.identity
          yielder     = scope.block_name

          add_temp "$iter = #{scope_name}.$$p"
          add_temp "#{yielder} = $iter || nil"

          line "if ($iter) #{scope_name}.$$p = null;"
        end
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
opal-1.3.2 lib/opal/nodes/args/extract_block_arg.rb
opal-1.3.1 lib/opal/nodes/args/extract_block_arg.rb
opal-1.3.0 lib/opal/nodes/args/extract_block_arg.rb
opal-1.3.0.rc1 lib/opal/nodes/args/extract_block_arg.rb
opal-1.3.0.alpha1 lib/opal/nodes/args/extract_block_arg.rb
opal-1.2.0 lib/opal/nodes/args/extract_block_arg.rb
opal-1.2.0.beta1 lib/opal/nodes/args/extract_block_arg.rb
opal-1.1.1 lib/opal/nodes/args/extract_block_arg.rb
opal-1.1.1.rc1 lib/opal/nodes/args/extract_block_arg.rb
opal-1.1.0 lib/opal/nodes/args/extract_block_arg.rb
opal-1.1.0.rc1 lib/opal/nodes/args/extract_block_arg.rb
opal-1.0.5 lib/opal/nodes/args/extract_block_arg.rb
opal-1.0.4 lib/opal/nodes/args/extract_block_arg.rb
opal-1.0.3 lib/opal/nodes/args/extract_block_arg.rb
opal-1.0.2 lib/opal/nodes/args/extract_block_arg.rb
opal-1.0.1 lib/opal/nodes/args/extract_block_arg.rb
opal-1.0.0 lib/opal/nodes/args/extract_block_arg.rb
opal-1.0.0.beta1 lib/opal/nodes/args/extract_block_arg.rb