def process_rescue(exp)
current = self.context[1]
case current
when :begin, :ensure, :block then
body = process exp.shift
resbody = exp.empty? ? nil : process(exp.shift)
els = exp.empty? ? nil : process(exp.shift)
code = []
code << indent(body)
code << resbody
if els then
code << "else"
code << indent(els)
else
unless [:block, :ensure].include? current then
code << "end\n"
else
r = [body, resbody.gsub(/rescue\n\s+/, 'rescue ')].join(' ')
code = [r] if (@indent+r).size < LINE_LENGTH and r !~ /\n/
end
end
code.join("\n").chomp
else
body = process exp.shift
assert_type exp.first, :resbody
resbody = exp.shift
resbody.shift
resbody.shift
resbody = resbody.shift
resbody = process resbody
code = "#{body} rescue #{resbody}"
case current
when :hash then
"(#{code})"
else
code
end
end
end