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