optimize: avoid generating drop glue for StepResult

This commit is contained in:
2026-04-19 19:17:43 +08:00
parent e527d31450
commit 800249cb1e
6 changed files with 69 additions and 50 deletions
+10 -10
View File
@@ -63,9 +63,9 @@ impl<'gc> crate::Vm<'gc> {
let attrs = self.peek_stack(0).restrict().expect("forced");
let Some(attrset) = attrs.as_gc::<AttrSet>() else {
return StepResult::Done(Err(Error::eval_error(
return self.finish_err(Error::eval_error(
"value is not a set while a set was expected",
)));
));
};
match attrset.lookup(key) {
@@ -85,9 +85,9 @@ impl<'gc> crate::Vm<'gc> {
break;
} else {
let name = ctx.resolve_string(key);
return StepResult::Done(Err(Error::eval_error(format!(
return self.finish_err(Error::eval_error(format!(
"attribute '{name}' missing"
))));
)));
}
}
}
@@ -119,16 +119,16 @@ impl<'gc> crate::Vm<'gc> {
} else if let Some(ns) = key_val.as_gc::<NixString>() {
ctx.intern_string(ns.as_str())
} else {
return StepResult::Done(Err(Error::eval_error(
return self.finish_err(Error::eval_error(
"dynamic select key must be a string",
)));
));
};
let attrset_val = self.stack[self.stack.len() - 2].restrict().expect("forced");
let Some(attrset) = attrset_val.as_gc::<AttrSet>() else {
return StepResult::Done(Err(Error::eval_error(
return self.finish_err(Error::eval_error(
"value is not a set while a set was expected",
)));
));
};
match attrset.lookup(key_sid) {
@@ -138,9 +138,9 @@ impl<'gc> crate::Vm<'gc> {
}
None => {
let name = ctx.resolve_string(key_sid);
return StepResult::Done(Err(Error::eval_error(format!(
return self.finish_err(Error::eval_error(format!(
"attribute '{name}' missing"
))));
)));
}
}
StepResult::Continue