From 64a3b8ac8c503d1371e5500bfa69836ea8809ba8 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Tue, 13 May 2025 11:29:28 -0400 Subject: [PATCH] Return token from nextToken again --- src/test.cpp | 58 +++++++++++++++++++--------------------------------- 1 file changed, 21 insertions(+), 37 deletions(-) diff --git a/src/test.cpp b/src/test.cpp index 33ad8ed..d8189a0 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -500,8 +500,8 @@ private: typedef PRESERVE_NONE bool (*continuation)(Parser2 *); - [[maybe_unused]] void printStack() { - printf("token: %s\n", symbolNames[currentToken]); + [[maybe_unused]] void debugPrint(Symbol token) { + printf("token: %s\n", symbolNames[token]); for (int i = 0; i < stackPtr - stack; ++i) { printf("%s ", symbolNames[stack[i]]); } @@ -514,13 +514,13 @@ private: } PRESERVE_NONE static bool keepGoing(Parser2 *self) { - // self->printStack(); if (self->empty()) { assert(self->currentToken == T_EOF); return true; } - self->nextToken(); - MUSTTAIL return table[*(self->stackPtr - 1)][self->currentToken](self); + auto token = self->nextToken(); + // self->debugPrint(token); + MUSTTAIL return table[*(self->stackPtr - 1)][token](self); } PRESERVE_NONE static bool reject(Parser2 *self) { @@ -781,71 +781,55 @@ private: }, }; - Symbol currentToken; const char *bufBefore; - void nextToken() { + Symbol nextToken() { maybeSkipWs(); bufBefore = buf; if (len == 0) { - currentToken = T_EOF; - return; + return T_EOF; } if (*buf == '{') { parseLiteral("{"); - currentToken = T_LBRACE; - return; + return T_LBRACE; } else if (*buf == '[') { parseLiteral("["); - currentToken = T_LBRACKET; - return; + return T_LBRACKET; } else if (*buf == '}') { parseLiteral("}"); - currentToken = T_RBRACE; - return; + return T_RBRACE; } else if (*buf == ']') { parseLiteral("]"); - currentToken = T_RBRACKET; - return; + return T_RBRACKET; } else if (*buf == ':') { parseLiteral(":"); - currentToken = T_COLON; - return; + return T_COLON; } else if (*buf == ',') { parseLiteral(","); - currentToken = T_COMMA; - return; + return T_COMMA; } else if (*buf == '"') { if (!parse_string()) { - currentToken = T_INVALID; - return; + return T_INVALID; } - currentToken = T_STRING; - return; + return T_STRING; } else if (*buf == 't') { if (!parseLiteral("true")) { - currentToken = T_INVALID; - return; + return T_INVALID; } - currentToken = T_ATOM; - return; + return T_ATOM; } else if (*buf == 'f') { if (!parseLiteral("false")) { - currentToken = T_INVALID; - return; + return T_INVALID; } } else if (*buf == 'n') { if (!parseLiteral("null")) { - currentToken = T_INVALID; - return; + return T_INVALID; } } else { if (!parse_number()) { - currentToken = T_INVALID; - return; + return T_INVALID; } } - currentToken = T_ATOM; - return; + return T_ATOM; } char *buf;