better support for OP_INCOBJECT

This commit is contained in:
CPunch 2020-11-20 14:50:43 -06:00
parent 46b99ab390
commit 85e7deae7b
2 changed files with 13 additions and 4 deletions

View File

@ -644,13 +644,22 @@ static void increment(CParseState *pstate, int val) {
CToken name = pstate->previous; CToken name = pstate->previous;
if (match(pstate, TOKEN_DOT)) { // object? if (match(pstate, TOKEN_DOT)) { // object?
namedVariable(pstate, name, false, false); // just get the object namedVariable(pstate, name, false, false); // just get the object
consume(pstate, TOKEN_IDENTIFIER, "Expected property name after '.'.");
uint16_t ident = identifierConstant(pstate, &pstate->previous);
while (match(pstate, TOKEN_DOT)) {
// grab the field from the object
writeu8(pstate, OP_LOADCONST); // pushes ident to stack
writeu16(pstate, ident);
writeu8(pstate, OP_GETOBJECT);
consume(pstate, TOKEN_IDENTIFIER, "Expected property name after '.'."); consume(pstate, TOKEN_IDENTIFIER, "Expected property name after '.'.");
uint16_t name = identifierConstant(pstate, &pstate->previous); ident = identifierConstant(pstate, &pstate->previous);
}
writeu8(pstate, OP_INCOBJECT); writeu8(pstate, OP_INCOBJECT);
writeu8(pstate, 128 + val); // setting signed values in an unsigned int writeu8(pstate, 128 + val); // setting signed values in an unsigned int
writeu16(pstate, name); writeu16(pstate, ident);
valuePopped(pstate, 1); // popped the object off the stack valuePopped(pstate, 1); // popped the object off the stack
} else { } else {
uint8_t op; uint8_t op;