diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-01-30 16:19:57 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-01-30 16:19:57 +0100 |
| commit | 5943f552e512f940d4b76055d51215c23420f03a (patch) | |
| tree | 0e80936f8bda91fb03076b6548bbdace707f74f5 /src/eval/capture.rs | |
| parent | 67047047e82c564d7701c3505c85db6e34223763 (diff) | |
Capture variable by slot instead of value 🎣
Diffstat (limited to 'src/eval/capture.rs')
| -rw-r--r-- | src/eval/capture.rs | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/eval/capture.rs b/src/eval/capture.rs index b7052c70..054b64ab 100644 --- a/src/eval/capture.rs +++ b/src/eval/capture.rs @@ -1,3 +1,5 @@ +use std::rc::Rc; + use super::*; use crate::syntax::visit::*; @@ -25,7 +27,7 @@ impl<'a> Visitor<'a> for CapturesVisitor<'a> { } fn visit_def(&mut self, id: &mut Ident) { - self.internal.define(id.as_str(), Value::None); + self.internal.def_mut(id.as_str(), Value::None); } fn visit_expr(&mut self, expr: &'a mut Expr) { @@ -34,7 +36,7 @@ impl<'a> Visitor<'a> for CapturesVisitor<'a> { // captured, and if so, replace it with its value. if self.internal.get(ident).is_none() { if let Some(value) = self.external.get(ident) { - *expr = Expr::CapturedValue(value.clone()); + *expr = Expr::Captured(Rc::clone(&value)); } } } else { |
