diff --git a/src/parser3.h b/src/parser3.h index 570e530..c73b90d 100644 --- a/src/parser3.h +++ b/src/parser3.h @@ -8,7 +8,6 @@ #include #include #include -#include #ifdef __x86_64__ #include @@ -836,23 +835,17 @@ inline PRESERVE_NONE WeaselJsonStatus n_digits2(Parser3 *self) { self->pop(); MUSTTAIL return Parser3::keepGoing(self); } - switch (*self->buf) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': + + // Advance self->buf to the first non-decimal character + while (self->buf != self->bufEnd && '0' <= *self->buf && *self->buf <= '9') { ++self->buf; - MUSTTAIL return Parser3::keepGoing(self); - default: - self->pop(); - MUSTTAIL return Parser3::keepGoing(self); } + if (self->buf == self->bufEnd) { + self->flushNumber(false); + return WeaselJson_AGAIN; + } + self->pop(); + MUSTTAIL return Parser3::keepGoing(self); } inline PRESERVE_NONE WeaselJsonStatus n_fraction(Parser3 *self) {