aboutsummaryrefslogtreecommitdiffstats
path: root/src/vm.rs
diff options
context:
space:
mode:
authorEdvard Thörnros <edvard.thornros@gmail.com>2021-01-31 22:28:48 +0100
committerEdvard Thörnros <edvard.thornros@gmail.com>2021-02-01 10:22:56 +0100
commitafc4a3fe1618239017e15cabc664dd70abc1d75b (patch)
tree6f086d71b24a230fe7f656a9780536808b56644b /src/vm.rs
parentcc4bacf33c98e9bd186a2a3da7335577df879a9d (diff)
downloadsylt-afc4a3fe1618239017e15cabc664dd70abc1d75b.tar.gz
add assignment ops
Diffstat (limited to 'src/vm.rs')
-rw-r--r--src/vm.rs16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/vm.rs b/src/vm.rs
index fd8eb73..6ff7b65 100644
--- a/src/vm.rs
+++ b/src/vm.rs
@@ -159,17 +159,23 @@ impl VM {
self.pop();
}
- Op::Yield => {
- self.frame_mut().ip += 1;
- return Ok(OpResult::Yield);
- }
-
Op::PopUpvalue => {
let value = self.pop();
let slot = self.stack.len();
self.drop_upvalue(slot, value);
}
+ Op::Copy => {
+ let v = self.pop();
+ self.push(v.clone());
+ self.push(v);
+ }
+
+ Op::Yield => {
+ self.frame_mut().ip += 1;
+ return Ok(OpResult::Yield);
+ }
+
Op::Constant(value) => {
let offset = self.frame().stack_offset;
let value = match value {