Move all pops to top of table functions
This commit is contained in:
24
src/test.cpp
24
src/test.cpp
@@ -522,21 +522,26 @@ private:
|
||||
assert(self->currentToken == T_EOF);
|
||||
return true;
|
||||
}
|
||||
MUSTTAIL return table[*(self->stackPtr - 1)][self->currentToken](self);
|
||||
auto top = *(self->stackPtr - 1);
|
||||
MUSTTAIL return table[top][self->currentToken](self);
|
||||
}
|
||||
|
||||
PRESERVE_NONE static bool reject(Parser2 *) { return false; }
|
||||
PRESERVE_NONE static bool reject(Parser2 *self) {
|
||||
self->pop();
|
||||
return false;
|
||||
}
|
||||
PRESERVE_NONE static bool object(Parser2 *self) {
|
||||
self->pop();
|
||||
assert(self->currentToken == T_LBRACE);
|
||||
self->callbacks->on_begin_object(self->data);
|
||||
self->nextToken();
|
||||
self->pop();
|
||||
if (!self->push({T_STRING, T_COLON, N_VALUE, N_OBJECT_MAYBE_CONTINUE})) {
|
||||
return false;
|
||||
}
|
||||
MUSTTAIL return keepGoing(self);
|
||||
}
|
||||
PRESERVE_NONE static bool atom(Parser2 *self) {
|
||||
self->pop();
|
||||
if (*self->bufBefore == 't') {
|
||||
self->callbacks->on_true_literal(self->data);
|
||||
} else if (*self->bufBefore == 'f') {
|
||||
@@ -550,55 +555,54 @@ private:
|
||||
self->callbacks->on_end_number(self->data);
|
||||
}
|
||||
self->nextToken();
|
||||
self->pop();
|
||||
MUSTTAIL return keepGoing(self);
|
||||
}
|
||||
PRESERVE_NONE static bool string(Parser2 *self) {
|
||||
self->pop();
|
||||
assert(self->currentToken == T_STRING);
|
||||
self->nextToken();
|
||||
self->pop();
|
||||
MUSTTAIL return keepGoing(self);
|
||||
}
|
||||
PRESERVE_NONE static bool array(Parser2 *self) {
|
||||
self->pop();
|
||||
assert(self->currentToken == T_LBRACKET);
|
||||
self->callbacks->on_begin_array(self->data);
|
||||
self->nextToken();
|
||||
self->pop();
|
||||
if (!self->push({N_VALUE, N_ARRAY_MAYBE_CONTINUE})) {
|
||||
return false;
|
||||
}
|
||||
MUSTTAIL return keepGoing(self);
|
||||
}
|
||||
PRESERVE_NONE static bool continueArray(Parser2 *self) {
|
||||
self->pop();
|
||||
assert(self->currentToken == T_COMMA);
|
||||
self->nextToken();
|
||||
self->pop();
|
||||
if (!self->push({N_VALUE, N_ARRAY_MAYBE_CONTINUE})) {
|
||||
return false;
|
||||
}
|
||||
MUSTTAIL return keepGoing(self);
|
||||
}
|
||||
PRESERVE_NONE static bool continueObject(Parser2 *self) {
|
||||
self->pop();
|
||||
assert(self->currentToken == T_COMMA);
|
||||
self->nextToken();
|
||||
self->pop();
|
||||
if (!self->push({T_STRING, T_COLON, N_VALUE, N_OBJECT_MAYBE_CONTINUE})) {
|
||||
return false;
|
||||
}
|
||||
MUSTTAIL return keepGoing(self);
|
||||
}
|
||||
PRESERVE_NONE static bool finishArray(Parser2 *self) {
|
||||
self->pop();
|
||||
assert(self->currentToken == T_RBRACKET);
|
||||
self->callbacks->on_end_array(self->data);
|
||||
self->nextToken();
|
||||
self->pop();
|
||||
MUSTTAIL return keepGoing(self);
|
||||
}
|
||||
PRESERVE_NONE static bool finishObject(Parser2 *self) {
|
||||
self->pop();
|
||||
assert(self->currentToken == T_RBRACE);
|
||||
self->callbacks->on_end_object(self->data);
|
||||
self->nextToken();
|
||||
self->pop();
|
||||
MUSTTAIL return keepGoing(self);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user