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