summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2024-02-23 16:38:26 -0500
committerFreya Murphy <freya@freyacat.org>2024-02-23 16:38:26 -0500
commitad8700371fad9ecbd4f6c594c08b2f8557f62516 (patch)
tree1b60a351e5123ca21149632f548602be32090fd9
parentmatrix math (diff)
downloadmatrix-ad8700371fad9ecbd4f6c594c08b2f8557f62516.tar.gz
matrix-ad8700371fad9ecbd4f6c594c08b2f8557f62516.tar.bz2
matrix-ad8700371fad9ecbd4f6c594c08b2f8557f62516.zip
fn call fix
Diffstat (limited to '')
-rw-r--r--matrix/src/parse.rs2
-rw-r--r--matrix/src/vm.rs3
2 files changed, 4 insertions, 1 deletions
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<Function>) -> Result<Value> {
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;
},