Method: RubyToAnsiC#process_call
- Defined in:
- lib/ruby_to_ansi_c.rb
#process_call(exp) ⇒ Object
Call, both unary and binary operators and regular function calls.
TODO: This needs a lot of work. We’ve cheated with the case statement below. We need a real function signature lookup like we have in R2CRewriter.
252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 |
# File 'lib/ruby_to_ansi_c.rb', line 252 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 # TODO: these need to be numerics # emacs gets confused by :/ below, need quotes to fix indentation 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}" # equal? == address equality 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 # nothing to do elsif args.nil? then args = receiver else args = "#{receiver}, #{args}" end return "#{name}(#{args})" end end |