Report abuse


			
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: