Sha256: ec86a2100cc2839c7b20af404849641d4cfea4d82da8a58e2d4f29fe8447da8e

Contents?: true

Size: 1.16 KB

Versions: 23

Compression:

Stored size: 1.16 KB

Contents

require 'opal/nodes/base'

module Opal
  module Nodes
    class ForNode < Base
      handle :for

      children :value, :args_sexp, :body_sexp

      def compile
        with_temp do |loop_var|
          if args_sexp.type == :array
            assign = s(:masgn, args_sexp)
            assign << s(:to_ary, s(:js_tmp, loop_var))
          else
            assign = args_sexp << s(:js_tmp, loop_var)
          end

          if body_sexp
            if body_sexp.first == :block
              body_sexp.insert 1, assign
              assign = body_sexp
            else
              assign = s(:block, assign, body_sexp)
            end
          end

          assign.children.each do |sexp|
            case sexp[0]
            when :lasgn
              add_local sexp[1]
            when :masgn
              if sexp[1][0] == :array
                sexp[1][1].each do |sexp|
                  add_local sexp[1] if sexp[0] == :lasgn
                end
              end
            end
          end

          iter = s(:iter, s(:lasgn, loop_var), assign)
          sexp = s(:call, value, :each, s(:arglist), iter)
          push expr(sexp)
        end
      end
    end
  end
end

Version data entries

23 entries across 23 versions & 2 rubygems

Version Path
opal-0.10.6 lib/opal/nodes/for.rb
opal-0.10.6.beta lib/opal/nodes/for.rb
opal-0.10.5 lib/opal/nodes/for.rb
opal-0.10.4 lib/opal/nodes/for.rb
opal-0.10.3 lib/opal/nodes/for.rb
opal-0.10.2 lib/opal/nodes/for.rb
opal-0.10.1 lib/opal/nodes/for.rb
opal-0.10.0 lib/opal/nodes/for.rb
opal-0.10.0.rc2 lib/opal/nodes/for.rb
opal-0.9.4 lib/opal/nodes/for.rb
opal-0.9.3 lib/opal/nodes/for.rb
opal-0.10.0.rc1 lib/opal/nodes/for.rb
opal-0.10.0.beta5 lib/opal/nodes/for.rb
opal-0.10.0.beta4 lib/opal/nodes/for.rb
opal-0.10.0.beta3 lib/opal/nodes/for.rb
opal-0.10.0.beta2 lib/opal/nodes/for.rb
opal-0.10.0.beta1 lib/opal/nodes/for.rb
opal-0.9.2 lib/opal/nodes/for.rb
opal-0.9.0 lib/opal/nodes/for.rb
opal-0.9.0.rc1 lib/opal/nodes/for.rb