def rewrite_rescue(exp)
ignored = exp.shift
body = exp.shift unless exp.first.first == :resbody
resbody = exp.shift
els = exp.shift unless exp.first.first == :resbody unless exp.empty?
rest = exp.empty? ? nil : exp
resbodies = []
unless rest then
while resbody do
resbodies << resbody
resbody = resbody.resbody(true)
end
resbodies.each do |resbody|
if resbody[2] && resbody[2][0] == :block && resbody[2].size == 2 then
resbody[2] = resbody[2][-1]
end
end
else
resbodies = [resbody] + rest
end
resbodies << els if els
s(:rescue, body, *resbodies).compact
end