Optimize Clone for BoundKind and VM GetField

This commit reduces unnecessary cloning for fields like `addr`, `kind`,
and `field` within `BoundKind` and `VM::GetField`. This improves
performance by avoiding redundant memory allocations.
This commit is contained in:
Michael Schimmel
2026-03-13 19:55:48 +01:00
parent 0dfcfac7b3
commit 1a7bb5d3e6
2 changed files with 9 additions and 10 deletions
+4 -5
View File
@@ -352,7 +352,7 @@ impl VM {
}
BoundKind::Get { addr, .. } => self.get_value(*addr),
BoundKind::FieldAccessor(k) => Ok(Value::FieldAccessor(k.clone())),
BoundKind::FieldAccessor(k) => Ok(Value::FieldAccessor(*k)),
BoundKind::GetField { rec, field } => {
let rec_val = self.eval_internal(obs, rec)?;
@@ -372,16 +372,15 @@ impl VM {
{
if let Some(field_series) = record_series.field(*field) {
let view =
crate::ast::rtl::series::SeriesView::new(field_series, field.clone());
return Ok(Value::Object(std::rc::Rc::new(view)));
} else {
crate::ast::rtl::series::SeriesView::new(field_series, *field);
return Ok(Value::Object(std::rc::Rc::new(view))); } else {
return Err(format!(
"RecordSeries does not have field :{}",
field.name()
));
}
} else if let Some(sn) = obj.as_any().downcast_ref::<crate::ast::rtl::streams::StreamNode>() {
let mapped = crate::ast::rtl::streams::build_map_stream(sn.inner.clone(), field.clone());
let mapped = crate::ast::rtl::streams::build_map_stream(sn.inner.clone(), *field);
return Ok(Value::Object(Rc::new(mapped)));
}
Err(format!(