From 0cf0d7500d96e0ba4ec696144c4c9343edba56f5 Mon Sep 17 00:00:00 2001 From: Adam Reichold Date: Fri, 11 Oct 2019 16:33:37 +0200 Subject: [PATCH] Extend value stack for all locals at once. --- src/runner.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/runner.rs b/src/runner.rs index 2f10954..41e11b4 100644 --- a/src/runner.rs +++ b/src/runner.rs @@ -1290,9 +1290,7 @@ impl FunctionContext { let num_locals = locals.iter().map(|l| l.count() as usize).sum(); - for _ in 0..num_locals { - value_stack.push(Default::default())?; - } + value_stack.extend(num_locals)?; self.is_initialized = true; Ok(()) @@ -1438,6 +1436,18 @@ impl ValueStack { Ok(()) } + fn extend(&mut self, len: usize) -> Result<(), TrapKind> { + let cells = self + .buf + .get_mut(self.sp..self.sp + len) + .ok_or_else(|| TrapKind::StackOverflow)?; + for cell in cells { + *cell = Default::default(); + } + self.sp += len; + Ok(()) + } + #[inline] fn len(&self) -> usize { self.sp