From 998a7b17a5cf9201fd9f94478fe624bb75688eb3 Mon Sep 17 00:00:00 2001 From: Taylor Sutton Date: Sat, 2 Apr 2022 20:07:18 +0000 Subject: [PATCH] fix(vm): off-by-one in code block stringification. (#1999) Acked-by: Taylor Sutton This Pull Request fixes/closes #1998 The call to retrieve operands modifies pc, setting it to the index of the *next* instruction. So, we save its initial value and use that for printing. --- boa_engine/src/vm/code_block.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/boa_engine/src/vm/code_block.rs b/boa_engine/src/vm/code_block.rs index 93279870ca..d7bf07dcdd 100644 --- a/boa_engine/src/vm/code_block.rs +++ b/boa_engine/src/vm/code_block.rs @@ -351,9 +351,10 @@ impl ToInternedString for CodeBlock { while pc < self.code.len() { let opcode: Opcode = self.code[pc].try_into().expect("invalid opcode"); let opcode = opcode.as_str(); + let previous_pc = pc; let operands = self.instruction_operands(&mut pc, interner); f.push_str(&format!( - "{pc:06} {count:04} {opcode:<27}{operands}\n", + "{previous_pc:06} {count:04} {opcode:<27}{operands}\n", )); count += 1; }