From 7ae2ef5443a56c8068af2410781b54dcce63f294 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Mon, 23 Jun 2025 13:00:10 -0400 Subject: [PATCH] Stop inlining strings and numbers into n_value Too complex --- src/parser3.h | 41 ++++++----------------------------------- 1 file changed, 6 insertions(+), 35 deletions(-) diff --git a/src/parser3.h b/src/parser3.h index 93b5e0e..a84a457 100644 --- a/src/parser3.h +++ b/src/parser3.h @@ -884,30 +884,10 @@ inline PRESERVE_NONE WeaselJsonStatus n_value(Parser3 *self, char *buf, self->dataBegin = self->writeBuf = buf; self->pop(); self->strDfa.reset(); - if (auto s = scan_string(self, buf, bufEnd)) { - if (s == WeaselJson_AGAIN) { - if (auto s2 = self->push({N_STRING2})) { - return s2; - } - } - return s; - } - { - switch (*buf) { - case '"': - self->flushString(true); - ++buf; - MUSTTAIL return Parser3::keepGoing(self, buf, bufEnd); - case '\\': - ++buf; - if (auto s = self->push({N_STRING_FOLLOWING_ESCAPE})) { - return s; - } - MUSTTAIL return Parser3::keepGoing(self, buf, bufEnd); - default: - return WeaselJson_REJECT; - } + if (auto s2 = self->push({N_STRING2})) { + return s2; } + break; case '0': case '1': case '2': @@ -922,19 +902,10 @@ inline PRESERVE_NONE WeaselJsonStatus n_value(Parser3 *self, char *buf, self->dataBegin = buf; self->pop(); self->numDfa.reset(); - 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 (auto s2 = self->push({N_NUMBER})) { + return s2; } - if (!self->numDfa.accept()) [[unlikely]] { - return WeaselJson_REJECT; - } - self->flushNumber(true, buf); - MUSTTAIL return Parser3::keepGoing(self, buf, bufEnd); + break; case 't': ++buf; self->pop();