From d95e4f6f988b16bbd95a9c78c0355d190390f003 Mon Sep 17 00:00:00 2001 From: mryouse Date: Thu, 25 May 2023 20:27:36 +0000 Subject: make list creation simpler (and allow nesting) --- vm.d | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'vm.d') diff --git a/vm.d b/vm.d index 4cb03f5..468a0a5 100644 --- a/vm.d +++ b/vm.d @@ -322,7 +322,16 @@ class VM { //bStack[bTop + slot - 1] = peekA(0); this.popA(); break; - case OpCode.OP_CONSTANT: + 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); + } + this.pushA(makeObjValue(lst)); + break; + case OpCode.OP_CONSTANT: Value constant = this.current.func.chunk.constants[this.readByte()]; //Value constant = current.func.chunk.constants[b]; this.pushA(constant); @@ -359,6 +368,7 @@ class VM { return InterpretResult.RUNTIME_ERROR; // TODO error } break; + /* case OpCode.OP_FIRST: Value val = this.popA(); List lst = cast(List)val.as.obj; // TODO this needs better checking @@ -367,6 +377,7 @@ class VM { Value first = this.current.func.chunk.constants[to!ubyte(addr)]; this.pushA(first); break; + */ case OpCode.OP_ADD: Value b = this.popA(); /* -- cgit v1.2.3