def process_call(exp)
receiver_node_type = exp.first.nil? ? nil : exp.first.first
receiver = process exp.shift
receiver = "(#{receiver})" if
Ruby2Ruby::ASSIGN_NODES.include? receiver_node_type
name = exp.shift
args_exp = exp.shift rescue nil
if args_exp && args_exp.first == :array
args = "#{process(args_exp)[1..-2]}"
else
args = process args_exp
args = nil if args.empty?
end
case name
when :<=>, :==, :<, :>, :<=, :>=, :-, :+, :*, :/, :%, :<<, :>>, :** then
"(#{receiver} #{name} #{args})"
when :[] then
"#{receiver}[#{args}]"
when "-@""-@" then
"-#{receiver}"
when "+@""+@" then
"+#{receiver}"
else
unless receiver.nil? then
"#{receiver}.#{name}#{args ? "(#{args})" : args}"
else
"#{name}#{args ? "(#{args})" : args}"
end
end
end