aboutsummaryrefslogtreecommitdiffstats
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
parentc6ce019aef1e46da636bdb3023459a4025226fe4 (diff)
downloadsylt-ff2c4940e92c17ddc138df202a3dd731c00bfddb.tar.gz
optimize pop_twice
Fibonacci runtime 0.27 -> 0.19
-rw-r--r--Cargo.toml4
-rw-r--r--src/vm.rs6
2 files changed, 8 insertions, 2 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 1268ed0..c6a109d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -9,3 +9,7 @@ edition = "2018"
[dependencies]
logos = "0.11.4"
owo-colors = { git="https://github.com/FredTheDino/owo-colors.git" }
+
+[profile.release]
+debug = true
+lto = "thin"
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> {