Add while loop
This commit is contained in:
parent
35b9c7651a
commit
75e031745b
|
@ -103,8 +103,8 @@ module Chalk
|
||||||
entry.is_a?(VarEntry)
|
entry.is_a?(VarEntry)
|
||||||
generate! tree.expr, table, entry.register, free
|
generate! tree.expr, table, entry.register, free
|
||||||
when TreeIf
|
when TreeIf
|
||||||
generate! tree.condition, table, target, free
|
generate! tree.condition, table, free, free + 1
|
||||||
sne target, 0
|
sne free, 0
|
||||||
jump_inst = jr 0
|
jump_inst = jr 0
|
||||||
|
|
||||||
old_size = @instructions.size
|
old_size = @instructions.size
|
||||||
|
@ -115,6 +115,18 @@ module Chalk
|
||||||
old_size = @instructions.size
|
old_size = @instructions.size
|
||||||
generate! tree.otherwise, table, free, free + 1 if tree.otherwise
|
generate! tree.otherwise, table, free, free + 1 if tree.otherwise
|
||||||
jump_after.offset = @instructions.size - old_size + 1
|
jump_after.offset = @instructions.size - old_size + 1
|
||||||
|
when TreeWhile
|
||||||
|
before_cond = @instructions.size
|
||||||
|
generate! tree.condition, table, free, free + 1
|
||||||
|
sne target, 0
|
||||||
|
cond_jump = jr 0
|
||||||
|
|
||||||
|
old_size = @instructions.size
|
||||||
|
generate! tree.block, table, free, free + 1
|
||||||
|
after_jump = jr 0
|
||||||
|
|
||||||
|
cond_jump.offset = @instructions.size - old_size + 1
|
||||||
|
after_jump.offset = before_cond - instructions.size + 1
|
||||||
when TreeReturn
|
when TreeReturn
|
||||||
generate! tree.rvalue, table, RETURN_REG, free
|
generate! tree.rvalue, table, RETURN_REG, free
|
||||||
ret
|
ret
|
||||||
|
|
Loading…
Reference in New Issue
Block a user