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); } }