def process_call exp
target = exp.target
method = exp.method
if method == :safe_concat and (target == SAFE_BUFFER or target == OUTPUT_BUFFER)
arg = normalize_output(exp.first_arg)
if is_escaped? arg
add_escaped_output arg.first_arg
elsif string? arg
ignore
elsif render? arg
add_output make_render_in_view arg
elsif string_interp? arg
process_inside_interp arg
elsif node_type? arg, :ignore
ignore
elsif internal_variable? arg
ignore
elsif arg == ATTR_MERGE
ignore
else
add_output arg
end
elsif is_escaped? exp
add_escaped_output arg
elsif target == nil and method == :render
exp.arglist = process exp.arglist
make_render_in_view exp
else
exp.arglist = process exp.arglist
exp
end
end