optimize: avoid generating drop glue for StepResult
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user