Class: Mirah::Compiler::JavaSource::SimpleWhileLoop
- Inherits:
-
Object
- Object
- Mirah::Compiler::JavaSource::SimpleWhileLoop
- Defined in:
- lib/mirah/jvm/source_generator/loops.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#compiler ⇒ Object
readonly
Returns the value of attribute compiler.
-
#loop ⇒ Object
readonly
Returns the value of attribute loop.
Instance Method Summary collapse
- #break ⇒ Object
- #compile(expression) ⇒ Object
- #compile_body ⇒ Object
-
#initialize(loop, compiler) ⇒ SimpleWhileLoop
constructor
A new instance of SimpleWhileLoop.
- #next ⇒ Object
- #prepare ⇒ Object
- #redo ⇒ Object
Constructor Details
#initialize(loop, compiler) ⇒ SimpleWhileLoop
Returns a new instance of SimpleWhileLoop.
19 20 21 22 |
# File 'lib/mirah/jvm/source_generator/loops.rb', line 19 def initialize(loop, compiler) @loop = loop @compiler = compiler end |
Instance Attribute Details
#compiler ⇒ Object (readonly)
Returns the value of attribute compiler.
18 19 20 |
# File 'lib/mirah/jvm/source_generator/loops.rb', line 18 def compiler @compiler end |
#loop ⇒ Object (readonly)
Returns the value of attribute loop.
18 19 20 |
# File 'lib/mirah/jvm/source_generator/loops.rb', line 18 def loop @loop end |
Instance Method Details
#break ⇒ Object
24 25 26 |
# File 'lib/mirah/jvm/source_generator/loops.rb', line 24 def break compiler.method.puts "break;" end |
#compile(expression) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/mirah/jvm/source_generator/loops.rb', line 36 def compile(expression) prepare @loop.init.compile(compiler, false) if @loop.init? @start.call compiler.method.block do @loop.pre.compile(compiler, false) if @loop.pre? compile_body @loop.post.compile(compiler, false) if @loop.post? end if @end_check @end_check.call compiler.method.puts ';' end if expression compiler.method.puts "#{compiler.lvalue}null;" end end |
#compile_body ⇒ Object
54 55 56 |
# File 'lib/mirah/jvm/source_generator/loops.rb', line 54 def compile_body loop.body.compile(compiler, false) if loop.body end |
#next ⇒ Object
28 29 30 |
# File 'lib/mirah/jvm/source_generator/loops.rb', line 28 def next compiler.method.puts "continue;" end |
#prepare ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/mirah/jvm/source_generator/loops.rb', line 58 def prepare predicate = loop.condition.predicate.precompile(compiler) negative = loop.negative ? '!' : '' check = lambda do compiler.method.print "while (#{negative}" predicate.compile(compiler, true) compiler.method.print ')' end if loop.check_first @start = check else @start = lambda {compiler.method.print 'do'} @end_check = check end end |
#redo ⇒ Object
32 33 34 |
# File 'lib/mirah/jvm/source_generator/loops.rb', line 32 def redo raise "#{self.class.name} doesn't support redo" end |