diff --git a/src/test.cpp b/src/test.cpp index 8945452..5422466 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -563,9 +563,6 @@ private: } static Status keepGoing(Parser2 *self) { - if (self->empty()) { - return S_OK; - } if (self->len() == 0) { return S_AGAIN; } @@ -578,6 +575,9 @@ private: return s; } self->pop(); + if (self->empty()) { + return S_OK; + } MUSTTAIL return keepGoing(self); } static Status stringFromEscape(Parser2 *self) { @@ -585,6 +585,9 @@ private: return s; } self->pop(); + if (self->empty()) { + return S_OK; + } MUSTTAIL return keepGoing(self); } static Status number(Parser2 *self) { @@ -592,6 +595,9 @@ private: return s; } self->pop(); + if (self->empty()) { + return S_OK; + } MUSTTAIL return keepGoing(self); } static Status value(Parser2 *self) { @@ -656,6 +662,9 @@ private: ++self->buf; self->pop(); self->callbacks->on_end_array(self->data); + if (self->empty()) { + return S_OK; + } MUSTTAIL return keepGoing(self); } else { self->pop(); @@ -671,6 +680,9 @@ private: ++self->buf; self->pop(); self->callbacks->on_end_object(self->data); + if (self->empty()) { + return S_OK; + } MUSTTAIL return keepGoing(self); } else if (*self->buf == '"') { self->callbacks->on_begin_string(self->data); @@ -698,6 +710,9 @@ private: ++self->buf; self->pop(); self->callbacks->on_end_array(self->data); + if (self->empty()) { + return S_OK; + } MUSTTAIL return keepGoing(self); } return S_REJECT; @@ -716,6 +731,9 @@ private: ++self->buf; self->pop(); self->callbacks->on_end_object(self->data); + if (self->empty()) { + return S_OK; + } MUSTTAIL return keepGoing(self); } return S_REJECT; @@ -724,6 +742,9 @@ private: if (*self->buf++ == 'e') { self->pop(); self->callbacks->on_true_literal(self->data); + if (self->empty()) { + return S_OK; + } MUSTTAIL return keepGoing(self); } return S_REJECT; @@ -732,6 +753,9 @@ private: if (*self->buf++ == 'e') { self->pop(); self->callbacks->on_false_literal(self->data); + if (self->empty()) { + return S_OK; + } MUSTTAIL return keepGoing(self); } return S_REJECT; @@ -740,6 +764,9 @@ private: if (*self->buf++ == 'l') { self->pop(); self->callbacks->on_null_literal(self->data); + if (self->empty()) { + return S_OK; + } MUSTTAIL return keepGoing(self); } return S_REJECT;