diff options
| author | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-03-01 18:50:29 +0100 |
|---|---|---|
| committer | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-03-01 18:50:29 +0100 |
| commit | 6a362119925cbcf7d14c7fa2a0d41c0745e86d92 (patch) | |
| tree | 10df9c5cd7a2fc84610affab11651d8e956cb996 /src | |
| parent | aa67c8b497c6f900147fdc2507a6279a18800e5b (diff) | |
| download | sylt-6a362119925cbcf7d14c7fa2a0d41c0745e86d92.tar.gz | |
fixed everything with a clone!
Diffstat (limited to 'src')
| -rw-r--r-- | src/compiler.rs | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/compiler.rs b/src/compiler.rs index 5d8b2bd..df88c7d 100644 --- a/src/compiler.rs +++ b/src/compiler.rs @@ -331,7 +331,7 @@ impl CompilerContext { } } -#[derive(Debug)] +#[derive(Debug, Clone)] enum Name { Slot(usize, usize), Unknown(usize, usize), @@ -1051,21 +1051,25 @@ impl<'a, 'b> Compiler { if let Some(_) = self.find_namespace(&name) { self.eat(); - let mut name = name; + // TODO(ed): This is a clone I would love to get rid of... + let mut namespace = self.find_namespace(&name).unwrap().clone(); loop { if self.eat() != Token::Dot { error!(self, "Expect '.' after namespace."); return; } if let Token::Identifier(field) = self.eat() { - match self.find_namespace(&name).unwrap().get(&field) { + match namespace.get(&field) { Some(Name::Slot(slot, _)) | Some(Name::Unknown(slot, _)) => { add_op(self, block, Op::Constant(*slot)); self.call_maybe(block); return; } Some(Name::Namespace(inner_name)) => { - name = self.to_namespace(&inner_name); + namespace = self.contextes + .get(inner_name) + .unwrap().namespace + .clone(); } _ => { error!(self, "Invalid namespace field."); |
