From 2be21c5453a402e3bc371871264ccafe99ea9c75 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Fri, 20 Jun 2025 14:33:37 -0400 Subject: [PATCH] Avoid pushing N_NUMBER on the stack if possible --- src/parser3.h | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/parser3.h b/src/parser3.h index 2902d3b..195892f 100644 --- a/src/parser3.h +++ b/src/parser3.h @@ -508,9 +508,18 @@ inline PRESERVE_NONE WeaselJsonStatus n_value(Parser3 *self, char *buf, self->dataBegin = buf; self->pop(); self->numDfa.reset(); - if (auto s = self->push({N_NUMBER})) { - return s; + buf = (char *)self->numDfa.scan(buf, bufEnd); + if (buf == bufEnd) { + self->flushNumber(false, buf); + if (auto s = self->push({N_NUMBER})) { + return s; + } + return WeaselJson_AGAIN; } + if (!self->numDfa.accept()) [[unlikely]] { + return WeaselJson_REJECT; + } + self->flushNumber(true, buf); MUSTTAIL return Parser3::keepGoing(self, buf, bufEnd); case 't': ++buf;