def process_call(exp)
receiver = exp.shift
name = exp.shift
receiver_type = Type.unknown
unless receiver.nil? then
receiver_type = receiver.sexp_type
end
receiver = process receiver
case name
when :==, :<, :>, :<=, :>=, :-, :+, :*, "/""/", :% then
args = process exp.shift[1]
return "#{receiver} #{name} #{args}"
when :<=>
args = process exp.shift[1]
return "RB_COMPARE(#{receiver}, #{args})"
when :equal?
args = process exp.shift
return "#{receiver} == #{args}"
when :[]
args = process exp.shift
return "#{receiver}[#{args}]"
when :nil?
exp.clear
return receiver.to_s
else
args = process exp.shift
if receiver.nil? and args.nil? then
args = ""
elsif receiver.nil? then
elsif args.nil? then
args = receiver
else
args = "#{receiver}, #{args}"
end
return "#{name}(#{args})"
end
end