diff --git a/src/cdebug.c b/src/cdebug.c index 55e6b7e..653fb92 100644 --- a/src/cdebug.c +++ b/src/cdebug.c @@ -109,7 +109,7 @@ int disasmInstr(CChunk *chunk, int offset, int indent) { case OP_CLOSE: return simpleInstruction("OP_CLOSE", offset); case OP_NEWOBJECT: - return shortOperandInstruction("OP_NEWOBJECT", chunk, offset); + return longOperandInstruction("OP_NEWOBJECT", chunk, offset); case OP_GETOBJECT: return simpleInstruction("OP_GETOBJECT", offset); case OP_SETOBJECT: diff --git a/src/coperators.h b/src/coperators.h index 1b814fa..df40737 100644 --- a/src/coperators.h +++ b/src/coperators.h @@ -13,23 +13,23 @@ typedef enum { // instructions typedef enum { - // STACK MANIPULATION - OP_LOADCONST, - OP_SETGLOBAL, - OP_GETGLOBAL, - OP_SETLOCAL, - OP_GETLOCAL, - OP_GETUPVAL, - OP_SETUPVAL, + // STACK/STATE MANIPULATION + OP_LOADCONST, // pushes const[uint8_t] to the stack + OP_SETGLOBAL, // pops and sets global[const[uint16_t]] + OP_GETGLOBAL, // pushes global[const[uint16_t]] + OP_SETLOCAL, // pops and sets base[uint8_t] + OP_GETLOCAL, // pushes base[uint8_t] + OP_GETUPVAL, // pushes closure->upvals[uint8_t] + OP_SETUPVAL, // pops and sets closure->upvals[uint8_t] OP_PEJMP, // pops, if false jumps uint16_t OP_EJMP, // if peek(0) is falsey jumps uint16_t OP_JMP, // always jumps uint16_t OP_JMPBACK, // jumps -uint16_t OP_POP, // - pops[uint8_t] from stack OP_CALL, // calls top[-uint8_t] - OP_CLOSURE, + OP_CLOSURE, OP_CLOSE, - OP_NEWOBJECT, + OP_NEWOBJECT, // OP_GETOBJECT, OP_SETOBJECT, OP_INVOKE, @@ -55,9 +55,8 @@ typedef enum { OP_FALSE, OP_NIL, - OP_RETURN, + OP_RETURN - OP_NONE // used as an error result } COPCODE; #endif \ No newline at end of file diff --git a/src/cparse.c b/src/cparse.c index d878d24..ec6f0ef 100644 --- a/src/cparse.c +++ b/src/cparse.c @@ -570,7 +570,7 @@ static void object(CParseState *pstate, bool canAssign) { } writeu8(pstate, OP_NEWOBJECT); - writeu8(pstate, entries); + writeu16(pstate, entries); valuePushed(pstate, 1); } @@ -753,7 +753,7 @@ static void _class(CParseState *pstate) { } writeu8(pstate, OP_NEWOBJECT); - writeu8(pstate, entries); + writeu16(pstate, entries); valuePushed(pstate, 1); defineVariable(pstate, var, false); } diff --git a/src/cvm.c b/src/cvm.c index fdfae8d..462a22f 100644 --- a/src/cvm.c +++ b/src/cvm.c @@ -384,7 +384,7 @@ bool cosmoV_execute(CState *state) { break; } case OP_NEWOBJECT: { - uint8_t pairs = READBYTE(); + uint16_t pairs = READUINT(); cosmoV_pushObject(state, pairs); break; }