feat: error handling (partial)

This commit is contained in:
2025-05-11 08:15:19 +08:00
parent 949352333e
commit 12aa654935
3 changed files with 63 additions and 45 deletions

View File

@@ -161,21 +161,21 @@ impl VM {
stack.tos_mut()?.push_attr(sym, val);
}
OpCode::Select { sym } => {
stack.tos_mut()?.force(self)?.select(Symbol::new(sym));
stack.tos_mut()?.force(self)?.select(Symbol::new(sym))?;
}
OpCode::SelectOrDefault { sym } => {
let default = stack.pop();
stack
.tos_mut()?
.force(self)?
.select_with_default(Symbol::new(sym), default);
.select_with_default(Symbol::new(sym), default)?;
}
OpCode::SelectDynamic => {
let mut val = stack.pop();
val.force(self)?;
val.coerce_to_string();
let sym = val.unwrap_const().unwrap_string().into();
stack.tos_mut()?.force(self)?.select(sym);
stack.tos_mut()?.force(self)?.select(sym)?;
}
OpCode::SelectDynamicOrDefault => {
let default = stack.pop();
@@ -186,7 +186,7 @@ impl VM {
stack
.tos_mut()?
.force(self)?
.select_with_default(sym, default);
.select_with_default(sym, default)?;
}
OpCode::HasAttr { sym } => {
stack.tos_mut()?.force(self)?.has_attr(Symbol::new(sym));