parent
							
								
									a9820677e9
								
							
						
					
					
						commit
						fb46ede3ca
					
				
							
								
								
									
										13
									
								
								src/state.rs
								
								
								
								
							
							
						
						
									
										13
									
								
								src/state.rs
								
								
								
								
							|  | @ -104,7 +104,7 @@ fn lw_string_format (l: &mut State, num_args: usize) -> usize { | ||||||
| 	assert_eq! (f_string, "%0.9f"); | 	assert_eq! (f_string, "%0.9f"); | ||||||
| 	let num = l.reg (1).as_float ().unwrap (); | 	let num = l.reg (1).as_float ().unwrap (); | ||||||
| 	
 | 	
 | ||||||
| 	let output = format! ("{}", num); | 	let output = format! ("{:0.9}", num); | ||||||
| 	
 | 	
 | ||||||
| 	*l.reg_mut (0) = Value::from (output); | 	*l.reg_mut (0) = Value::from (output); | ||||||
| 	1 | 	1 | ||||||
|  | @ -683,6 +683,8 @@ impl <'a> State <'a> { | ||||||
| 					for i in (offset)..(offset - 1 + b) { | 					for i in (offset)..(offset - 1 + b) { | ||||||
| 						self.registers [i] = self.registers [i + 1 + a].take (); | 						self.registers [i] = self.registers [i + 1 + a].take (); | ||||||
| 					} | 					} | ||||||
|  | 					
 | ||||||
|  | 					self.top = popped_frame.register_offset - 1 + b - 1; | ||||||
| 				} | 				} | ||||||
| 				else { | 				else { | ||||||
| 					// Return from the entire program
 | 					// Return from the entire program
 | ||||||
|  | @ -690,8 +692,9 @@ impl <'a> State <'a> { | ||||||
| 				} | 				} | ||||||
| 			}, | 			}, | ||||||
| 			Instruction::Return0 => { | 			Instruction::Return0 => { | ||||||
| 				self.stack.pop (); | 				let popped_frame = self.stack.pop ().unwrap (); | ||||||
| 				next_pc = self.stack.last ().unwrap ().program_counter; | 				next_pc = self.stack.last ().unwrap ().program_counter; | ||||||
|  | 				self.top = popped_frame.register_offset - 1 + 0; | ||||||
| 			}, | 			}, | ||||||
| 			Instruction::Return1 (a) => { | 			Instruction::Return1 (a) => { | ||||||
| 				let a = usize::try_from (*a).unwrap (); | 				let a = usize::try_from (*a).unwrap (); | ||||||
|  | @ -715,6 +718,8 @@ impl <'a> State <'a> { | ||||||
| 				// Shift output register down
 | 				// Shift output register down
 | ||||||
| 				let offset = popped_frame.register_offset; | 				let offset = popped_frame.register_offset; | ||||||
| 				self.registers [offset - 1] = self.registers [offset + a].take (); | 				self.registers [offset - 1] = self.registers [offset + a].take (); | ||||||
|  | 				
 | ||||||
|  | 				self.top = popped_frame.register_offset - 1 + 1; | ||||||
| 			}, | 			}, | ||||||
| 			Instruction::SetField (a, b, c, k_flag) => { | 			Instruction::SetField (a, b, c, k_flag) => { | ||||||
| 				let value = if *k_flag { | 				let value = if *k_flag { | ||||||
|  | @ -812,8 +817,8 @@ impl <'a> State <'a> { | ||||||
| 				// Skip the PC increment
 | 				// Skip the PC increment
 | ||||||
| 				return Ok (None); | 				return Ok (None); | ||||||
| 			}, | 			}, | ||||||
| 			Instruction::Test (a, _k) => { | 			Instruction::Test (a, k) => { | ||||||
| 				if self.reg (*a).is_truthy() { | 				if self.reg (*a).is_truthy() != *k { | ||||||
| 					next_pc += 1; | 					next_pc += 1; | ||||||
| 				} | 				} | ||||||
| 			}, | 			}, | ||||||
|  |  | ||||||
|  | @ -2,3 +2,6 @@ print () | ||||||
| print ("asdf") | print ("asdf") | ||||||
| print (math.sqrt (16)) | print (math.sqrt (16)) | ||||||
| print (math.sqrt (16.0)) | print (math.sqrt (16.0)) | ||||||
|  | 
 | ||||||
|  | local N = tonumber (arg and arg [1]) or 1000 | ||||||
|  | print (N) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 _
						_