|
|
hydra>cat nested.rb
(0..10).each do |block_param|
block_var = block_param * 2
puts "block_var = #{block_var}, block_param = #{block_param}"
for i in 1..5
puts "i = #{i}, block_var = #{block_var}, block_param = #{block_param}"
end
end
###
hydra>./shotgun/rubinius describe nested.rb
Path: nested.rb
Size: 240 bytes
Sexp:
[:newline, 1, "(eval)",
[:iter,
[:call,
[:newline, 1, "(eval)", [:dot2, [:lit, 0], [:lit, 10]]], :each
],
[:lasgn, :block_param, 0],
[:block,
[:dasgn_curr, :i,
[:dasgn_curr, :block_var, [:dasgn_curr, :block_param]]
],
[:newline, 2, "(eval)",
[:lasgn, :block_var, 0,
[:call, [:lvar, :block_param, 0], :*,
[:array, [:lit, 2]]
]
]
],
[:newline, 3, "(eval)",
[:fcall, :puts,
[:array,
[:dstr, "block_var = ",
[:evstr, [:lvar, :block_var, 0]],
[:str, ", block_param = "],
[:evstr, [:lvar, :block_param, 0]]
]
]
]
],
[:newline, 4, "(eval)",
[:for, [:dot2, [:lit, 1], [:lit, 5]],
[:lasgn, :i, 0],
[:newline, 5, "(eval)",
[:fcall, :puts,
[:array,
[:dstr, "i = ", [:evstr, [:lvar, :i, 0]],
[:str, ", block_var = "],
[:evstr, [:lvar, :block_var, 0]],
[:str, ", block_param = "],
[:evstr, [:lvar, :block_param, 0]]
]
]
]
]
]
]
]
]
]
Normalized Sexp:
[:newline, 1, "(eval)",
[:iter,
[:call,
[:newline, 1, "(eval)", [:dot2, [:lit, 0], [:lit, 10]]], :each,
[:array], {}
],
[:lasgn, :block_param, [0, 0]],
[:block,
[:newline, 2, "(eval)",
[:lasgn, :block_var, [0, 1],
[:call, [:lvar, :block_param, [0, 0]], :*,
[:array, [:lit, 2]], {}
]
]
],
[:newline, 3, "(eval)",
[:call, [:self], :puts,
[:array,
[:dstr, "block_var = ",
[:evstr, [:lvar, :block_var, [0, 1]]],
[:str, ", block_param = "],
[:evstr, [:lvar, :block_param, [0, 0]]]
]
], {:function=>true}
]
],
[:newline, 4, "(eval)",
[:iter,
[:call, [:dot2, [:lit, 1], [:lit, 5]], :each,
[:array]
],
[:lasgn, :i, [0, 2]],
[:block,
[:newline, 5, "(eval)",
[:call, [:self], :puts,
[:array,
[:dstr, "i = ", [:evstr, [:lvar, :i, [0, 2]]],
[:str, ", block_var = "],
[:evstr, [:lvar, :block_var, [0, 1]]],
[:str, ", block_param = "],
[:evstr, [:lvar, :block_param, [0, 0]]]
]
], {:function=>true}
]
]
], 3
]
]
], 3
]
]
Assembly:
#line 1
push &ps_lbl1
push &iter_lbl2
create_block 2
goto iter_lbl3
unshift_tuple
set block_param:0:0
pop
redo_lbl4:
#line 2
push 2
push block_param:0:0
send * 1
set block_var:0:1
pop
#line 3
push block_param:0:0
send to_s
push_literal 0
string_dup
push block_var:0:1
send to_s
push_literal 1
string_dup
string_append
string_append
string_append
push self
set_call_flags 1
send puts 1
pop
#line 4
push &ps_lbl5
push &iter_lbl6
create_block 1
goto iter_lbl7
unshift_tuple
set i:0:0
pop
redo_lbl8:
#line 5
push block_param:1:0
send to_s
push_literal 2
string_dup
push block_var:1:1
send to_s
push_literal 3
string_dup
push i:0:0
send to_s
push_literal 4
string_dup
string_append
string_append
string_append
string_append
string_append
push self
set_call_flags 1
send puts 1
iter_lbl6: soft_return
iter_lbl7:
push 5
push 1
push Range
send new 2
&send each 0
ps_lbl5:
iter_lbl2: soft_return
iter_lbl3:
#line 1
push 10
push 0
push Range
send new 2
&send each 0
ps_lbl1:
ret
Sub methods:
|