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