Prefer InternalError over panicking

This commit is contained in:
Andrew Morris
2023-06-29 09:00:27 +10:00
parent 14f7ee2cb6
commit a8dbbe63a7
3 changed files with 12 additions and 9 deletions

View File

@@ -2,6 +2,7 @@ use std::mem::take;
use valuescript_common::InstructionByte;
use crate::builtins::internal_error_builtin::ToInternalError;
use crate::builtins::type_error_builtin::ToTypeError;
use crate::bytecode_decoder::BytecodeDecoder;
use crate::bytecode_decoder::BytecodeType;
@@ -272,7 +273,7 @@ impl StackFrameTrait for BytecodeStackFrame {
return Ok(FrameStepOk::Push(new_frame));
}
LoadFunctionResult::NativeFunction(_native_fn) => {
panic!("Not implemented");
return Err("TODO: apply native functions".to_internal_error());
}
}
}
@@ -287,7 +288,7 @@ impl StackFrameTrait for BytecodeStackFrame {
if params_array.is_none() {
// Not sure this needs to be an exception in future since compiled
// code should never violate this
panic!("bind params should always be array")
return Err("bind params should always be array".to_internal_error());
}
let bound_fn = fn_val.bind((*params_array.unwrap()).elements.clone());
@@ -295,7 +296,7 @@ impl StackFrameTrait for BytecodeStackFrame {
if bound_fn.is_none() {
// Not sure this needs to be an exception in future since compiled
// code should never violate this
panic!("fn parameter of bind should always be bindable");
return Err("fn parameter of bind should always be bindable".to_internal_error());
}
if register_index.is_some() {
@@ -485,7 +486,7 @@ impl StackFrameTrait for BytecodeStackFrame {
}
Import | ImportStar => {
panic!("TODO: Dynamic imports")
return Err("TODO: Dynamic imports".to_internal_error());
}
SetCatch => {
@@ -508,7 +509,7 @@ impl StackFrameTrait for BytecodeStackFrame {
Next => {
let iter_i = match self.decoder.decode_register_index() {
Some(i) => i,
None => panic!("The ignore register is not iterable"),
None => return Err("The ignore register is not iterable".to_internal_error()),
};
let res_i = self.decoder.decode_register_index();
@@ -540,7 +541,7 @@ impl StackFrameTrait for BytecodeStackFrame {
UnpackIterRes => {
let iter_res_i = match self.decoder.decode_register_index() {
Some(i) => i,
None => panic!("Can't unpack the ignore register"),
None => return Err("Can't unpack the ignore register".to_internal_error()),
};
let iter_res = take(&mut self.registers[iter_res_i]);

View File

@@ -1,7 +1,7 @@
use std::{mem::take, rc::Rc};
use crate::{
builtins::type_error_builtin::ToTypeError,
builtins::{internal_error_builtin::ToInternalError, type_error_builtin::ToTypeError},
native_function::ThisWrapper,
operations::op_sub,
stack_frame::{CallResult, FrameStepOk, FrameStepResult, StackFrame, StackFrameTrait},
@@ -112,7 +112,9 @@ impl StackFrameTrait for CatStackFrame {
match &mut self.state {
CatFrameState::ReadNext => self.read_next(),
CatFrameState::MakingIterator => panic!("Unexpected step during MakingIterator"),
CatFrameState::MakingIterator => {
Err("Unexpected step during MakingIterator".to_internal_error())
}
CatFrameState::Iterating(iter) => match iter.sub(&"next".to_val())?.load_function() {
LoadFunctionResult::NotAFunction => Err(".next was not a function".to_type_error()),
LoadFunctionResult::NativeFunction(fn_) => {

View File

@@ -26,7 +26,7 @@ impl VirtualMachine {
let mut frame = match main_fn.load_function() {
LoadFunctionResult::StackFrame(f) => f,
_ => panic!("bytecode does start with function"),
_ => return Err("bytecode does start with function".to_internal_error()),
};
for p in params {