diff --git a/compiler-lib/src/do_compile/nodes/parsed_module.rs b/compiler-lib/src/do_compile/nodes/parsed_module.rs index af65da58..394d1cbf 100644 --- a/compiler-lib/src/do_compile/nodes/parsed_module.rs +++ b/compiler-lib/src/do_compile/nodes/parsed_module.rs @@ -129,7 +129,7 @@ impl<'a> CompileNode<'a, (), Vec> for ParsedModule { params .writer .get_current_block() - .write_opcode(CompilerOpcode::Return); + .write_opcode(CompilerOpcode::ReturnUnit); let co = match params .writer diff --git a/vm-lib/src/runtime_value/function.rs b/vm-lib/src/runtime_value/function.rs index 13da6541..93b0b0ab 100644 --- a/vm-lib/src/runtime_value/function.rs +++ b/vm-lib/src/runtime_value/function.rs @@ -368,7 +368,7 @@ impl Function { } Ok(CallResult::Ok(ret)) } - _ => Ok(CallResult::OkNoValue), + _ => panic!("functions must return a value"), }, RunloopExit::Exception(e) => Ok(CallResult::Exception(e)), } diff --git a/vm-lib/src/runtime_value/mod.rs b/vm-lib/src/runtime_value/mod.rs index 7bb1d304..5ec18d33 100644 --- a/vm-lib/src/runtime_value/mod.rs +++ b/vm-lib/src/runtime_value/mod.rs @@ -133,7 +133,6 @@ impl RuntimeValue { cur_frame.stack.push(other_val.clone()); match rel_op_obj.eval(1, cur_frame, vm, true) { Ok(cr) => match cr { - CallResult::OkNoValue => OperatorEvalAttemptOutcome::NeedTryROperator, CallResult::Ok(rv) => { if let Some(bl) = rv.as_boolean() { OperatorEvalAttemptOutcome::Ok(bl.raw_value()) @@ -162,7 +161,6 @@ impl RuntimeValue { cur_frame.stack.push(other_val.clone()); match op_equals.eval(1, cur_frame, vm, true) { Ok(cr) => match cr { - CallResult::OkNoValue => OperatorEvalAttemptOutcome::NeedTryROperator, CallResult::Ok(rv) => OperatorEvalAttemptOutcome::Ok(rv), CallResult::Exception(e) => { if e.is_builtin_unimplemented(vm) { @@ -183,7 +181,6 @@ impl RuntimeValue { ) -> OperatorEvalAttemptOutcome { match op.eval(0, cur_frame, vm, true) { Ok(cr) => match cr { - CallResult::OkNoValue => OperatorEvalAttemptOutcome::NeedTryROperator, CallResult::Ok(rv) => OperatorEvalAttemptOutcome::Ok(rv), CallResult::Exception(e) => { if e.is_builtin_unimplemented(vm) { @@ -457,11 +454,7 @@ macro_rules! val_or_bound_func { }; } -pub enum CallResult { - OkNoValue, - Ok(T), - Exception(crate::error::exception::VmException), -} +pub type CallResult = crate::vm::RunloopExit; impl RuntimeValue { pub fn bind(&self, f: Function) -> RuntimeValue { diff --git a/vm-lib/src/vm.rs b/vm-lib/src/vm.rs index 4ebac6a1..c22a7c97 100644 --- a/vm-lib/src/vm.rs +++ b/vm-lib/src/vm.rs @@ -520,8 +520,7 @@ impl VirtualMachine { }; match main_f.eval(main_argc, &mut main_frame, self, &Default::default(), true)? { - crate::runtime_value::CallResult::OkNoValue - | crate::runtime_value::CallResult::Ok(_) => Ok(RunloopExit::Ok(())), + crate::runtime_value::CallResult::Ok(_) => Ok(RunloopExit::Ok(())), crate::runtime_value::CallResult::Exception(e) => Ok(RunloopExit::Exception(e)), } } @@ -975,8 +974,7 @@ impl VirtualMachine { } let cnt = pop_or_err!(next, frame, op_idx); match cnt.read_index(&indices, frame, self) { - Ok(crate::runtime_value::CallResult::OkNoValue) - | Ok(crate::runtime_value::CallResult::Ok(_)) => {} + Ok(crate::runtime_value::CallResult::Ok(_)) => {} Ok(crate::runtime_value::CallResult::Exception(e)) => { return Ok(OpcodeRunExit::Exception(e)); } @@ -998,8 +996,7 @@ impl VirtualMachine { } let cnt = pop_or_err!(next, frame, op_idx); match cnt.write_index(&indices, &val, frame, self) { - Ok(crate::runtime_value::CallResult::OkNoValue) - | Ok(crate::runtime_value::CallResult::Ok(_)) => {} + Ok(crate::runtime_value::CallResult::Ok(_)) => {} Ok(crate::runtime_value::CallResult::Exception(e)) => { return Ok(OpcodeRunExit::Exception(e)); } @@ -1182,8 +1179,7 @@ impl VirtualMachine { Opcode::Call(argc) => { let x = pop_or_err!(next, frame, op_idx); match x.eval(argc, frame, self, false) { - Ok(crate::runtime_value::CallResult::OkNoValue) - | Ok(crate::runtime_value::CallResult::Ok(_)) => {} + Ok(crate::runtime_value::CallResult::Ok(_)) => {} Ok(crate::runtime_value::CallResult::Exception(e)) => { return Ok(OpcodeRunExit::Exception(e)); }