From 313ffe6d6a9b38e745ed6ff0295eced115027f23 Mon Sep 17 00:00:00 2001 From: Maxim Kurnikov Date: Wed, 3 Jul 2019 16:13:16 +0300 Subject: [PATCH] Do not pollute stack when if-expression condition evaluated to False --- src/compile.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/compile.rs b/src/compile.rs index 844f952..877200f 100644 --- a/src/compile.rs +++ b/src/compile.rs @@ -1426,11 +1426,15 @@ impl Compiler { ast::Expression::IfExpression { test, body, orelse } => { let no_label = self.new_label(); let end_label = self.new_label(); - self.compile_test(test, None, Some(no_label), EvalContext::Expression)?; + self.compile_test(test, None, None, EvalContext::Expression)?; + self.emit(Instruction::JumpIfFalse { target: no_label }); + // True case self.compile_expression(body)?; self.emit(Instruction::Jump { target: end_label }); + // False case self.set_label(no_label); self.compile_expression(orelse)?; + // End self.set_label(end_label); } }