From 2a789486d675ba41b7db355d3f0f948925d8b438 Mon Sep 17 00:00:00 2001 From: Andrew Morris Date: Tue, 30 May 2023 10:43:12 +1000 Subject: [PATCH] Fix inc+dec for bigint --- valuescript_vm/src/bytecode_stack_frame.rs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/valuescript_vm/src/bytecode_stack_frame.rs b/valuescript_vm/src/bytecode_stack_frame.rs index f05815a..d790c68 100644 --- a/valuescript_vm/src/bytecode_stack_frame.rs +++ b/valuescript_vm/src/bytecode_stack_frame.rs @@ -128,14 +128,26 @@ impl StackFrameTrait for BytecodeStackFrame { OpInc => { let register_index = self.decoder.decode_register_index().unwrap(); let mut val = self.registers[register_index].clone(); - val = operations::op_plus(val, Val::Number(1_f64))?; // TODO: BigInt + + match &mut val { + Val::Number(n) => *n += 1.0, + Val::BigInt(bi) => *bi += 1, + _ => val = operations::op_plus(val, 1.0.to_val())?, + }; + self.registers[register_index] = val; } OpDec => { let register_index = self.decoder.decode_register_index().unwrap(); let mut val = self.registers[register_index].clone(); - val = operations::op_minus(val, Val::Number(1_f64))?; // TODO: BigInt + + match &mut val { + Val::Number(n) => *n -= 1.0, + Val::BigInt(bi) => *bi -= 1, + _ => val = operations::op_minus(val, 1.0.to_val())?, + }; + self.registers[register_index] = val; }