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