aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-01-12 23:35:18 +0100
committerGustav Sörnäs <gustav@sornas.net>2021-01-12 23:35:18 +0100
commitb9710f5de083e8205dbb51921f43d96b17fd43cf (patch)
tree03430ba4501e62018a6963348382e0ef1d12344f
parent4153e1dccda6eb0699ba6d10a98f1dcb117d082d (diff)
downloadsylt-b9710f5de083e8205dbb51921f43d96b17fd43cf.tar.gz
vm takes &Block
-rw-r--r--src/lib.rs2
-rw-r--r--src/vm.rs8
2 files changed, 5 insertions, 5 deletions
diff --git a/src/lib.rs b/src/lib.rs
index aef8c53..53fa0f3 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -19,7 +19,7 @@ pub fn run_string(s: &str) -> Result<(), Vec<Error>> {
pub fn run(tokens: TokenStream, path: &Path) -> Result<(), Vec<Error>> {
match compiler::compile("main", path, tokens) {
- Ok(block) => vm::run_block(block).or_else(|e| Err(vec![e])),
+ Ok(block) => vm::run_block(&block).or_else(|e| Err(vec![e])),
Err(errors) => Err(errors),
}
}
diff --git a/src/vm.rs b/src/vm.rs
index 4c09756..44a5829 100644
--- a/src/vm.rs
+++ b/src/vm.rs
@@ -130,14 +130,14 @@ impl Block {
}
#[derive(Debug)]
-pub struct VM {
+pub struct VM<'a> {
stack: Vec<Value>,
- block: Block,
+ block: &'a Block,
ip: usize,
}
-pub fn run_block(block: Block) -> Result<(), Error> {
+pub fn run_block<'a> (block: &'a Block) -> Result<(), Error> {
let mut vm = VM {
stack: Vec::new(),
@@ -148,7 +148,7 @@ pub fn run_block(block: Block) -> Result<(), Error> {
vm.run()
}
-impl VM {
+impl VM<'_> {
fn pop_twice(&mut self) -> (Value, Value) {
let len = self.stack.len();
let res = (self.stack[len-2].clone(), self.stack[len-1].clone());