From abfc141f7c670312a8f66468001ca091ad453bcf Mon Sep 17 00:00:00 2001 From: jac3km4 Date: Tue, 2 Feb 2021 23:43:44 +0000 Subject: [PATCH] Fix switch codegen issues --- compiler/src/assembler.rs | 2 +- core/src/bytecode.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/compiler/src/assembler.rs b/compiler/src/assembler.rs index b68bd0de..e8037714 100644 --- a/compiler/src/assembler.rs +++ b/compiler/src/assembler.rs @@ -215,7 +215,7 @@ impl Assembler { for case in cases { let matcher = Assembler::from_expr(&case.0, None, pool, &mut scope.clone())?; let body = Assembler::from_seq(&case.1, pool, &mut scope.clone())?; - self.emit(Instr::SwitchLabel(matcher.offset(), matcher.offset() + body.offset())); + self.emit(Instr::SwitchLabel(matcher.offset() + body.offset(), matcher.offset())); self.append(matcher); self.append(body); } diff --git a/core/src/bytecode.rs b/core/src/bytecode.rs index f3066b4e..624db6c9 100644 --- a/core/src/bytecode.rs +++ b/core/src/bytecode.rs @@ -248,7 +248,7 @@ impl Decode for Instr { 25 => Ok(Instr::Param(input.decode()?)), 26 => Ok(Instr::ObjectField(input.decode()?)), 27 => Ok(Instr::ExternalVar), - 28 => Ok(Instr::Switch(input.decode()?, Offset::new(input.decode::()? + 9))), + 28 => Ok(Instr::Switch(input.decode()?, Offset::new(input.decode::()? + 11))), 29 => Ok(Instr::SwitchLabel( Offset::new(input.decode::()? + 3), Offset::new(input.decode::()? + 5), @@ -458,7 +458,7 @@ impl Encode for Instr { Instr::Switch(idx, offset) => { output.encode(&28u8)?; output.encode(idx)?; - output.encode(&Offset::new(offset.value - 9))?; + output.encode(&Offset::new(offset.value - 11))?; } Instr::SwitchLabel(start, exit) => { output.encode(&29u8)?;