diff --git a/src/ast/compiler/bound_nodes.rs b/src/ast/compiler/bound_nodes.rs index 2c8eeb1..dbbb81c 100644 --- a/src/ast/compiler/bound_nodes.rs +++ b/src/ast/compiler/bound_nodes.rs @@ -239,11 +239,11 @@ impl Clone for BoundKind

{ match self { BoundKind::Nop => BoundKind::Nop, BoundKind::Constant(v) => BoundKind::Constant(v.clone()), - BoundKind::Get { addr, name } => BoundKind::Get { addr: addr.clone(), name: name.clone() }, - BoundKind::Set { addr, value } => BoundKind::Set { addr: addr.clone(), value: value.clone() }, - BoundKind::Define { name, addr, kind, value, captured_by } => BoundKind::Define { name: name.clone(), addr: addr.clone(), kind: *kind, value: value.clone(), captured_by: captured_by.clone() }, - BoundKind::FieldAccessor(k) => BoundKind::FieldAccessor(k.clone()), - BoundKind::GetField { rec, field } => BoundKind::GetField { rec: rec.clone(), field: field.clone() }, + BoundKind::Get { addr, name } => BoundKind::Get { addr: *addr, name: name.clone() }, + BoundKind::Set { addr, value } => BoundKind::Set { addr: *addr, value: value.clone() }, + BoundKind::Define { name, addr, kind, value, captured_by } => BoundKind::Define { name: name.clone(), addr: *addr, kind: *kind, value: value.clone(), captured_by: captured_by.clone() }, + BoundKind::FieldAccessor(k) => BoundKind::FieldAccessor(*k), + BoundKind::GetField { rec, field } => BoundKind::GetField { rec: rec.clone(), field: *field }, BoundKind::If { cond, then_br, else_br } => BoundKind::If { cond: cond.clone(), then_br: then_br.clone(), else_br: else_br.clone() }, BoundKind::Destructure { pattern, value } => BoundKind::Destructure { pattern: pattern.clone(), value: value.clone() }, BoundKind::Lambda { params, upvalues, body, positional_count } => BoundKind::Lambda { params: params.clone(), upvalues: upvalues.clone(), body: body.clone(), positional_count: *positional_count }, diff --git a/src/ast/vm.rs b/src/ast/vm.rs index 16e32d9..f7b112d 100644 --- a/src/ast/vm.rs +++ b/src/ast/vm.rs @@ -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::() { - 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!(