Class: Mirah::JVM::Compiler::JavaSource::SimpleWhileLoop
- Inherits:
-
Object
- Object
- Mirah::JVM::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.
22 23 24 25 |
# File 'lib/mirah/jvm/source_generator/loops.rb', line 22 def initialize(loop, compiler) @loop = loop @compiler = compiler end |
Instance Attribute Details
#compiler ⇒ Object (readonly)
Returns the value of attribute compiler.
21 22 23 |
# File 'lib/mirah/jvm/source_generator/loops.rb', line 21 def compiler @compiler end |
#loop ⇒ Object (readonly)
Returns the value of attribute loop.
21 22 23 |
# File 'lib/mirah/jvm/source_generator/loops.rb', line 21 def loop @loop end |
Instance Method Details
#break ⇒ Object
27 28 29 |
# File 'lib/mirah/jvm/source_generator/loops.rb', line 27 def break compiler.method.puts "break;" end |
#compile(expression) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/mirah/jvm/source_generator/loops.rb', line 39 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
57 58 59 |
# File 'lib/mirah/jvm/source_generator/loops.rb', line 57 def compile_body loop.body.compile(compiler, false) if loop.body end |
#next ⇒ Object
31 32 33 |
# File 'lib/mirah/jvm/source_generator/loops.rb', line 31 def next compiler.method.puts "continue;" end |
#prepare ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/mirah/jvm/source_generator/loops.rb', line 61 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
35 36 37 |
# File 'lib/mirah/jvm/source_generator/loops.rb', line 35 def redo raise "#{self.class.name} doesn't support redo" end |