From ad478c0c4bb0483c210c77d63b94a00e1f7759cd Mon Sep 17 00:00:00 2001 From: Andrew Morris Date: Thu, 23 Mar 2023 10:11:10 +1100 Subject: [PATCH] Catch exceptions using .catch_setting --- valuescript_vm/src/bytecode_stack_frame.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/valuescript_vm/src/bytecode_stack_frame.rs b/valuescript_vm/src/bytecode_stack_frame.rs index 05fbb0d..cd546c1 100644 --- a/valuescript_vm/src/bytecode_stack_frame.rs +++ b/valuescript_vm/src/bytecode_stack_frame.rs @@ -446,8 +446,19 @@ impl StackFrameTrait for BytecodeStackFrame { panic!("Not appropriate for BytecodeStackFrame") } - fn catch_exception(&mut self, _exception: Val) -> bool { - return false; // TODO + fn catch_exception(&mut self, exception: Val) -> bool { + if let Some(catch_setting) = &self.catch_setting { + if let Some(r) = catch_setting.register { + self.registers[r] = exception; + } + + self.decoder.pos = catch_setting.pos; + self.catch_setting = None; + + true + } else { + false + } } }