Return token from nextToken again

This commit is contained in:
2025-05-13 11:29:28 -04:00
parent 30c9ad8690
commit 64a3b8ac8c

View File

@@ -500,8 +500,8 @@ private:
typedef PRESERVE_NONE bool (*continuation)(Parser2 *); typedef PRESERVE_NONE bool (*continuation)(Parser2 *);
[[maybe_unused]] void printStack() { [[maybe_unused]] void debugPrint(Symbol token) {
printf("token: %s\n", symbolNames[currentToken]); printf("token: %s\n", symbolNames[token]);
for (int i = 0; i < stackPtr - stack; ++i) { for (int i = 0; i < stackPtr - stack; ++i) {
printf("%s ", symbolNames[stack[i]]); printf("%s ", symbolNames[stack[i]]);
} }
@@ -514,13 +514,13 @@ private:
} }
PRESERVE_NONE static bool keepGoing(Parser2 *self) { PRESERVE_NONE static bool keepGoing(Parser2 *self) {
// self->printStack();
if (self->empty()) { if (self->empty()) {
assert(self->currentToken == T_EOF); assert(self->currentToken == T_EOF);
return true; return true;
} }
self->nextToken(); auto token = self->nextToken();
MUSTTAIL return table[*(self->stackPtr - 1)][self->currentToken](self); // self->debugPrint(token);
MUSTTAIL return table[*(self->stackPtr - 1)][token](self);
} }
PRESERVE_NONE static bool reject(Parser2 *self) { PRESERVE_NONE static bool reject(Parser2 *self) {
@@ -781,71 +781,55 @@ private:
}, },
}; };
Symbol currentToken;
const char *bufBefore; const char *bufBefore;
void nextToken() { Symbol nextToken() {
maybeSkipWs(); maybeSkipWs();
bufBefore = buf; bufBefore = buf;
if (len == 0) { if (len == 0) {
currentToken = T_EOF; return T_EOF;
return;
} }
if (*buf == '{') { if (*buf == '{') {
parseLiteral("{"); parseLiteral("{");
currentToken = T_LBRACE; return T_LBRACE;
return;
} else if (*buf == '[') { } else if (*buf == '[') {
parseLiteral("["); parseLiteral("[");
currentToken = T_LBRACKET; return T_LBRACKET;
return;
} else if (*buf == '}') { } else if (*buf == '}') {
parseLiteral("}"); parseLiteral("}");
currentToken = T_RBRACE; return T_RBRACE;
return;
} else if (*buf == ']') { } else if (*buf == ']') {
parseLiteral("]"); parseLiteral("]");
currentToken = T_RBRACKET; return T_RBRACKET;
return;
} else if (*buf == ':') { } else if (*buf == ':') {
parseLiteral(":"); parseLiteral(":");
currentToken = T_COLON; return T_COLON;
return;
} else if (*buf == ',') { } else if (*buf == ',') {
parseLiteral(","); parseLiteral(",");
currentToken = T_COMMA; return T_COMMA;
return;
} else if (*buf == '"') { } else if (*buf == '"') {
if (!parse_string()) { if (!parse_string()) {
currentToken = T_INVALID; return T_INVALID;
return;
} }
currentToken = T_STRING; return T_STRING;
return;
} else if (*buf == 't') { } else if (*buf == 't') {
if (!parseLiteral("true")) { if (!parseLiteral("true")) {
currentToken = T_INVALID; return T_INVALID;
return;
} }
currentToken = T_ATOM; return T_ATOM;
return;
} else if (*buf == 'f') { } else if (*buf == 'f') {
if (!parseLiteral("false")) { if (!parseLiteral("false")) {
currentToken = T_INVALID; return T_INVALID;
return;
} }
} else if (*buf == 'n') { } else if (*buf == 'n') {
if (!parseLiteral("null")) { if (!parseLiteral("null")) {
currentToken = T_INVALID; return T_INVALID;
return;
} }
} else { } else {
if (!parse_number()) { if (!parse_number()) {
currentToken = T_INVALID; return T_INVALID;
return;
} }
} }
currentToken = T_ATOM; return T_ATOM;
return;
} }
char *buf; char *buf;