From 618ba9aaaa4469755a9eb86d5adbba29c202b651 Mon Sep 17 00:00:00 2001 From: Benoit Giannangeli Date: Wed, 20 Nov 2024 09:35:56 +0100 Subject: [PATCH] fix: OP_DEFINE_GLOBAL doesn't always add global at the end of the list --- src/vm.zig | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/vm.zig b/src/vm.zig index 02e4445a..d3750f0a 100644 --- a/src/vm.zig +++ b/src/vm.zig @@ -1031,11 +1031,15 @@ pub const VM = struct { } fn OP_DEFINE_GLOBAL(self: *Self, _: *CallFrame, _: u32, _: OpCode, arg: u24) void { - self.globals.ensureTotalCapacity(arg + 1) catch { + const new_len = @max(arg + 1, self.globals.items.len); + + self.globals.ensureTotalCapacity(new_len) catch { self.panic("Out of memory"); unreachable; }; - self.globals.items.len = arg + 1; + + // We don't always define a new global at the end of the list + self.globals.items.len = new_len; self.globals.items[arg] = self.peek(0); self.globals_count = @max(self.globals_count, arg);