aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-01-12 22:04:12 +0100
committerGustav Sörnäs <gustav@sornas.net>2021-01-12 22:05:19 +0100
commitff2c4940e92c17ddc138df202a3dd731c00bfddb (patch)
tree6d22dcf0911746c8ac2258dc2493e12c97d9665c /src
parentc6ce019aef1e46da636bdb3023459a4025226fe4 (diff)
downloadsylt-ff2c4940e92c17ddc138df202a3dd731c00bfddb.tar.gz
optimize pop_twice
Fibonacci runtime 0.27 -> 0.19
Diffstat (limited to 'src')
-rw-r--r--src/vm.rs6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/vm.rs b/src/vm.rs
index 68ab3b8..bc3b1e8 100644
--- a/src/vm.rs
+++ b/src/vm.rs
@@ -128,8 +128,10 @@ pub fn run_block(block: Block) -> Result<(), Error> {
impl VM {
fn pop_twice(&mut self) -> (Value, Value) {
- let (a, b) = (self.stack.pop().unwrap(), self.stack.pop().unwrap());
- (b, a)
+ let len = self.stack.len();
+ let res = (self.stack[len-2].clone(), self.stack[len-1].clone());
+ self.stack.truncate(len - 2);
+ res
}
fn _peek_up(&self, amount: usize) -> Option<&Value> {