def process_call exp
target = exp.target
if sexp? target
target = process target
end
method = exp.method
if node_type? target, :lvar and target.value == :_erbout
if method == :concat or method == :<<
@inside_concat = true
exp.arglist = process(exp.arglist)
@inside_concat = false
if exp.second_arg
raise "Did not expect more than a single argument to _erbout.concat"
end
arg = normalize_output(exp.first_arg)
if arg.node_type == :str
ignore
else
add_output arg
end
elsif method == :force_encoding
ignore
else
abort "Unrecognized action on _erbout: #{method}"
end
elsif target == nil and method == :render
exp.arglist = process(exp.arglist)
make_render_in_view exp
else
exp.target = target
exp.arglist = process(exp.arglist)
exp
end
end