Method: RubyToAnsiC#process_iter
- Defined in:
- lib/ruby_to_ansi_c.rb
#process_iter(exp) ⇒ Object
Iterators for loops. After rewriter nearly all iter nodes should be able to be interpreted as a for loop. If not, then you are doing something not supported by C in the first place.
481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 |
# File 'lib/ruby_to_ansi_c.rb', line 481 def process_iter(exp) out = [] # Only support enums in C-land raise UnsupportedNodeError if exp[0][1].nil? # HACK ugly @env.scope do enum = exp[0][1][1] # HACK ugly t(:iter, t(:call, lhs <-- get lhs call = process exp.shift var = process(exp.shift).intern # semi-HACK-y body = process exp.shift index = "index_#{var}" body += ";" unless body =~ /[;}]\Z/ body.gsub!(/\n\n+/, "\n") out << "unsigned long #{index};" out << "for (#{index} = 0; #{enum}[#{index}] != NULL; ++#{index}) {" out << "#{self.class.c_type @env.lookup(var)} #{var} = #{enum}[#{index}];" out << body out << "}" end return out.join("\n") end |