diff --git a/matrix/src/parse.rs b/matrix/src/parse.rs index c6c503b..f3814fb 100644 --- a/matrix/src/parse.rs +++ b/matrix/src/parse.rs @@ -223,7 +223,7 @@ impl Parser { self.force_token(T::RightBrack)?; expr }, - T::Ident(ident) => E::Ident(ident), + T::Ident(ident) => E::Literal(V::String(ident.to_string().into())), T::String(string) => E::Literal(V::String(string.to_string().into())), _ => return Err(Error::UnexpectedToken(tok).into()) }) diff --git a/matrix/src/vm.rs b/matrix/src/vm.rs index bb105d8..fec34b5 100644 --- a/matrix/src/vm.rs +++ b/matrix/src/vm.rs @@ -181,6 +181,8 @@ impl Vm { pub fn run(&mut self, fun: Rc) -> Result { let mut frame = self.init_frame(fun)?; self.interupt.store(0, Ordering::SeqCst); + self.stack = Stack::new(); + self.locals = Stack::new(); loop { use Instruction::*; @@ -303,6 +305,7 @@ impl Vm { }; let ret = self.pop(); self.stack.truncate(frame.bp); + self.locals.truncate(0); self.push(ret); frame = prev_frame; },