From ea424bbc160ba84c4069a2889689be8685d35a1d Mon Sep 17 00:00:00 2001 From: mryouse Date: Sat, 27 May 2023 01:48:18 +0000 Subject: fix empty (list) --- compiler.d | 6 ++++++ vm.d | 8 +++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/compiler.d b/compiler.d index 5b06f4c..a436323 100644 --- a/compiler.d +++ b/compiler.d @@ -615,6 +615,12 @@ class Compiler { } void compileList(Form[] args) { + if (args.length == 0) { + this.func.chunk.writeOp(OpCode.OP_LIST, -1); + this.func.chunk.writeOp(to!ubyte(0), -1); + this.advance(); + return; + } int length = to!int(args.length); foreach (Form arg ; args) { resolve(arg, ValueType.ANY); // resolve everything onto the stack diff --git a/vm.d b/vm.d index d4fab80..68a148e 100644 --- a/vm.d +++ b/vm.d @@ -396,9 +396,11 @@ class VM { case OpCode.OP_LIST: int length = to!int(this.readByte()); List lst = new List(length); - for (int i = length - 1; i >= 0; i--) { - //lst.appendItem(this.popA()); - lst.addItemAtIndex(this.popA(), i); + if (length > 0) { + for (int i = length - 1; i >= 0; i--) { + //lst.appendItem(this.popA()); + lst.addItemAtIndex(this.popA(), i); + } } this.pushA(makeSeqValue(lst)); break; -- cgit v1.2.3