From c939bc3baac0db2b9d1df6c29689c3941b9ccf6a Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Thu, 22 May 2025 12:37:08 -0400 Subject: [PATCH] Remove most usages of T_END_NUMBER --- src/parser3.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/parser3.h b/src/parser3.h index 8fd714f..cbad62a 100644 --- a/src/parser3.h +++ b/src/parser3.h @@ -185,7 +185,7 @@ inline WeaselJsonStatus n_value(Parser3 *self) { break; case '0': self->pop(); - if (auto s = self->push({N_FRACTION, N_EXPONENT, T_END_NUMBER})) { + if (auto s = self->push({N_FRACTION, N_EXPONENT})) { return s; } self->callbacks->on_begin_number(self->data); @@ -205,8 +205,7 @@ inline WeaselJsonStatus n_value(Parser3 *self) { self->callbacks->on_begin_number(self->data); self->dataBegin = self->buf; ++self->buf; - if (auto s = - self->push({N_DIGITS2, N_FRACTION, N_EXPONENT, T_END_NUMBER})) { + if (auto s = self->push({N_DIGITS2, N_FRACTION, N_EXPONENT})) { return s; } MUSTTAIL return Parser3::keepGoing(self); @@ -215,8 +214,7 @@ inline WeaselJsonStatus n_value(Parser3 *self) { self->callbacks->on_begin_number(self->data); self->dataBegin = self->buf; ++self->buf; - if (auto s = - self->push({N_INTEGER2, N_FRACTION, N_EXPONENT, T_END_NUMBER})) { + if (auto s = self->push({N_INTEGER2, N_FRACTION, N_EXPONENT})) { return s; } MUSTTAIL return Parser3::keepGoing(self); @@ -808,6 +806,7 @@ inline WeaselJsonStatus n_fraction(Parser3 *self) { } } +// Responsible for ensuring that on_end_number gets called inline WeaselJsonStatus n_exponent(Parser3 *self) { if (self->len() == 0) { self->pop(); @@ -818,12 +817,14 @@ inline WeaselJsonStatus n_exponent(Parser3 *self) { case 'E': ++self->buf; self->pop(); - if (auto s = self->push({N_SIGN, N_DIGITS})) { + if (auto s = self->push({N_SIGN, N_DIGITS, T_END_NUMBER})) { return s; } MUSTTAIL return Parser3::keepGoing(self); default: self->pop(); + self->flushNumber(); + self->callbacks->on_end_number(self->data); MUSTTAIL return Parser3::keepGoing(self); } }