Skip past false,true,null directly if buffered

This commit is contained in:
2025-05-22 12:23:09 -04:00
parent af07cdc8be
commit 76e03e635b

View File

@@ -223,23 +223,50 @@ inline WeaselJsonStatus n_value(Parser3 *self) {
case 't':
++self->buf;
self->pop();
if (self->len() >= 3) {
if (memcmp(self->buf, "rue", 3) == 0) {
self->callbacks->on_true_literal(self->data);
self->buf += 3;
} else {
return WeaselJson_REJECT;
}
} else {
if (auto s = self->push({T_R, T_U, N_TRUE})) {
return s;
}
}
break;
case 'f':
++self->buf;
self->pop();
if (self->len() >= 4) {
if (memcmp(self->buf, "alse", 4) == 0) {
self->callbacks->on_false_literal(self->data);
self->buf += 4;
} else {
return WeaselJson_REJECT;
}
} else {
if (auto s = self->push({T_A, T_L, T_S, N_FALSE})) {
return s;
}
}
break;
case 'n':
++self->buf;
self->pop();
if (self->len() >= 3) {
if (memcmp(self->buf, "ull", 3) == 0) {
self->callbacks->on_null_literal(self->data);
self->buf += 3;
} else {
return WeaselJson_REJECT;
}
} else {
if (auto s = self->push({T_U, T_L, N_NULL})) {
return s;
}
}
break;
default:
return WeaselJson_REJECT;