⭐ FizzBuzz with some caveats
							parent
							
								
									9811d265f6
								
							
						
					
					
						commit
						2f676adc19
					
				|  | @ -5,6 +5,8 @@ pub enum Instruction { | |||
| 	Call (u8, u8, u8), | ||||
| 	Closure (u8, u32), | ||||
| 	
 | ||||
| 	EqI (u8, i8, bool), | ||||
| 	
 | ||||
| 	// Equals Constant?
 | ||||
| 	EqK (u8, u8, bool), | ||||
| 	
 | ||||
|  | @ -47,6 +49,10 @@ pub enum Instruction { | |||
| 	// MetaMethod, Binary
 | ||||
| 	MmBin (u8, u8, u8), | ||||
| 	
 | ||||
| 	MmBinK (u8, u8, u8, bool), | ||||
| 	
 | ||||
| 	ModK (u8, u8, u8), | ||||
| 	
 | ||||
| 	Move (u8, u8), | ||||
| 	
 | ||||
| 	Mul (u8, u8, u8), | ||||
|  |  | |||
|  | @ -49,6 +49,7 @@ pub fn parse_inst (buf: [u8; 4]) -> Option <Inst> | |||
| 	
 | ||||
| 	let a = (buf [0] >> 7) | ((buf [1] & 0x7f) << 1); | ||||
| 	let b = buf [2]; | ||||
| 	let sb = i8::try_from (b).ok ()? - 127; | ||||
| 	let ax = a as u32 + ((b as u32) << 8); | ||||
| 	let c = buf [3]; | ||||
| 	let bx = 
 | ||||
|  | @ -76,11 +77,14 @@ pub fn parse_inst (buf: [u8; 4]) -> Option <Inst> | |||
| 		0x11 => Inst::SetI (a, b, c, k), | ||||
| 		0x12 => Inst::SetField (a, b, c, k), | ||||
| 		0x13 => Inst::NewTable (a), | ||||
| 		0x19 => Inst::ModK (a, b, c), | ||||
| 		0x22 => Inst::Add (a, b, c), | ||||
| 		0x24 => Inst::Mul (a, b, c), | ||||
| 		0x2e => Inst::MmBin (a, b, c), | ||||
| 		0x30 => Inst::MmBinK (a, b, c, k), | ||||
| 		0x33 => Inst::Not (a, b), | ||||
| 		0x3c => Inst::EqK (a, b, k), | ||||
| 		0x3d => Inst::EqI (a, sb, k), | ||||
| 		0x38 => Inst::Jmp (s_j), | ||||
| 		0x42 => Inst::Test (a, k), | ||||
| 		0x44 => Inst::Call (a, b, c), | ||||
|  |  | |||
							
								
								
									
										15
									
								
								src/state.rs
								
								
								
								
							
							
						
						
									
										15
									
								
								src/state.rs
								
								
								
								
							|  | @ -201,6 +201,12 @@ impl State { | |||
| 						upvalues: vec! [], | ||||
| 					}.into ()); | ||||
| 				}, | ||||
| 				Instruction::EqI (a, sb, k_flag) => { | ||||
| 					if (self.reg (*a).as_int ().unwrap () == *sb as i64) != *k_flag 
 | ||||
| 					{ | ||||
| 						next_pc += 1; | ||||
| 					} | ||||
| 				}, | ||||
| 				Instruction::EqK (a, b, k_flag) => { | ||||
| 					let b = usize::from (*b); | ||||
| 					
 | ||||
|  | @ -337,6 +343,15 @@ impl State { | |||
| 						panic! ("Not sure how to implememtn OP_MMBIN for these 2 values {a:?}, {b:?}"); | ||||
| 					} | ||||
| 				}, | ||||
| 				Instruction::MmBinK (_a, _b, _c, _k) => { | ||||
| 					// Ignore
 | ||||
| 				}, | ||||
| 				Instruction::ModK (a, b, c) => { | ||||
| 					let b = self.reg (*b).as_int().unwrap (); | ||||
| 					let c = k [usize::from (*c)].as_int ().unwrap (); | ||||
| 					
 | ||||
| 					*self.reg_mut (*a) = (b % c).into (); | ||||
| 				}, | ||||
| 				Instruction::Move (a, b) => { | ||||
| 					*self.reg_mut (*a) = self.reg (*b).clone (); | ||||
| 				}, | ||||
|  |  | |||
|  | @ -1,3 +1,11 @@ | |||
| for i = 1, 50 do | ||||
| 	print (i) | ||||
| 	if i % 3 == 0 and i % 5 == 0 then | ||||
| 		print ("FizzBuzz") | ||||
| 	elseif i % 3 == 0 then | ||||
| 		print ("Fizz") | ||||
| 	elseif i % 5 == 0 then | ||||
| 		print ("Buzz") | ||||
| 	else | ||||
| 		print (i) | ||||
| 	end | ||||
| end | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 _
						_