aboutsummaryrefslogtreecommitdiff
path: root/vm.d
diff options
context:
space:
mode:
Diffstat (limited to 'vm.d')
-rw-r--r--vm.d13
1 files changed, 12 insertions, 1 deletions
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();
/*