Don't check for empty stack as often

This commit is contained in:
2025-05-16 17:00:18 -04:00
parent adedfc6435
commit 6f0315e00c

View File

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