def rewrite_block_pass exp
case exp.size
when 2 then
_, block = exp
case block.first
when :lasgn then
block[-1] = "&#{block[-1]}""&#{block[-1]}"
exp = block
else
raise "huh?: #{block.inspect}"
end
when 3 then
_, block, recv = exp
case recv.first
when :super then
recv << s(:block_pass, block)
exp = recv
when :call then
recv.last << s(:block_pass, block)
exp = recv
when :masgn then
block[-1] = "&#{block[-1]}""&#{block[-1]}"
recv.last << block
exp = recv
else
raise "huh?: #{recv.inspect}"
end
end
exp
end