rubyx/lib/virtual/compiler/while_expression.rb
Torsten Ruger d41676fdfd namespace cleanup
remove unnecessary Virtual namespace prefix
which was a large motivation for the move
2015-05-08 15:19:30 +03:00

28 lines
826 B
Ruby

module Virtual
module Compiler
# while- attr_reader :condition, :body
def self.compile_while expression, method
start = Label.new("while_start")
method.add_code start
is = expression.condition.compile(method )
branch = IsTrueBranch.new "while"
merge = Label.new(branch.name)
branch.other = merge #false jumps to end of while
method.add_code branch
last = is
expression.body.each do |part|
last = part.compile(method )
raise part.inspect if last.nil?
end
# unconditionally brnach to the start
merge.next = method.current.next
method.current.next = start
# here we add the end of while that the branch jumps to
#but don't link it in (not using add)
method.current = merge
last
end
end
end