aboutsummaryrefslogtreecommitdiffstats
path: root/src/compiler.rs
diff options
context:
space:
mode:
authorEdvard Thörnros <edvard.thornros@gmail.com>2021-03-01 18:50:29 +0100
committerEdvard Thörnros <edvard.thornros@gmail.com>2021-03-01 18:50:29 +0100
commit6a362119925cbcf7d14c7fa2a0d41c0745e86d92 (patch)
tree10df9c5cd7a2fc84610affab11651d8e956cb996 /src/compiler.rs
parentaa67c8b497c6f900147fdc2507a6279a18800e5b (diff)
downloadsylt-6a362119925cbcf7d14c7fa2a0d41c0745e86d92.tar.gz
fixed everything with a clone!
Diffstat (limited to 'src/compiler.rs')
-rw-r--r--src/compiler.rs12
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.");