From a8aab0187eeffd613a5d90b05be0c4becc81589d Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Tue, 24 Jun 2025 15:10:01 -0400 Subject: [PATCH] Add some comments --- src/parser3.h | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/parser3.h b/src/parser3.h index 7bfc2d9..b5a14ec 100644 --- a/src/parser3.h +++ b/src/parser3.h @@ -17,6 +17,7 @@ namespace parser3 { +// Calling a continuation with buf == bufEnd means end of input typedef PRESERVE_NONE WeaselJsonStatus (*Continuation)(struct Parser3 *, char *buf, char *bufEnd); @@ -92,6 +93,9 @@ struct Parser3 { assert(!empty()); --stackPtr; } + + // Pushing symbols onto the stack roughly corresponds with "parse these + // nonterminals/terminals in order" [[nodiscard]] WeaselJsonStatus push(std::initializer_list symbols) { if (stackEnd - stackPtr < ptrdiff_t(symbols.size())) [[unlikely]] { return WeaselJson_OVERFLOW; @@ -101,6 +105,7 @@ struct Parser3 { } return WeaselJson_OK; } + [[nodiscard]] Symbol top() const { assert(!empty()); return *(stackPtr - 1); @@ -165,11 +170,12 @@ inline PRESERVE_NONE WeaselJsonStatus n_whitespace(Parser3 *self, char *buf, inline PRESERVE_NONE WeaselJsonStatus n_number(Parser3 *self, char *buf, char *bufEnd) { - bool complete = buf == bufEnd; - buf = (char *)self->numDfa.scan(buf, bufEnd); - if (buf == bufEnd && !complete) { - self->flushNumber(false, buf); - return WeaselJson_AGAIN; + if (buf != bufEnd) { + buf = (char *)self->numDfa.scan(buf, bufEnd); + if (buf == bufEnd) { + self->flushNumber(false, buf); + return WeaselJson_AGAIN; + } } if (!self->numDfa.accept()) [[unlikely]] { return WeaselJson_REJECT;