Fuse N_WHITESPACE into N_VALUE

This commit is contained in:
2025-05-22 11:21:58 -04:00
parent 0786d8db4c
commit 048caa830a

View File

@@ -65,7 +65,7 @@ enum Symbol : uint8_t {
struct Parser3 {
Parser3(const WeaselJsonCallbacks *callbacks, void *data)
: callbacks(callbacks), data(data) {
std::ignore = push({N_WHITESPACE, N_VALUE, N_WHITESPACE, T_EOF});
std::ignore = push({N_VALUE, N_WHITESPACE, T_EOF});
}
[[nodiscard]] WeaselJsonStatus parse(char *buf, int len) {
@@ -137,7 +137,31 @@ struct Parser3 {
uint32_t minCodepoint;
};
inline WeaselJsonStatus n_whitespace(Parser3 *self) {
if (self->len() == 0) {
self->pop();
MUSTTAIL return Parser3::keepGoing(self);
}
while (tables.whitespace[uint8_t(*self->buf)]) {
++self->buf;
if (self->buf == self->bufEnd) {
return WeaselJson_AGAIN;
}
}
self->pop();
MUSTTAIL return Parser3::keepGoing(self);
}
inline WeaselJsonStatus n_value(Parser3 *self) {
if (self->len() == 0) {
MUSTTAIL return Parser3::keepGoing(self);
}
while (tables.whitespace[uint8_t(*self->buf)]) {
++self->buf;
if (self->buf == self->bufEnd) {
return WeaselJson_AGAIN;
}
}
switch (*self->buf) {
case '{':
self->pop();
@@ -223,8 +247,8 @@ inline WeaselJsonStatus n_object2(Parser3 *self) {
MUSTTAIL return Parser3::keepGoing(self);
case '"':
self->pop();
if (auto s = self->push({N_STRING, N_WHITESPACE, T_COLON, N_WHITESPACE,
N_VALUE, N_WHITESPACE, N_OBJECT3})) {
if (auto s = self->push({N_STRING, N_WHITESPACE, T_COLON, N_VALUE,
N_WHITESPACE, N_OBJECT3})) {
return s;
}
MUSTTAIL return Parser3::keepGoing(self);
@@ -244,7 +268,7 @@ inline WeaselJsonStatus n_object3(Parser3 *self) {
++self->buf;
self->pop();
if (auto s = self->push({N_WHITESPACE, N_STRING, N_WHITESPACE, T_COLON,
N_WHITESPACE, N_VALUE, N_WHITESPACE, N_OBJECT3})) {
N_VALUE, N_WHITESPACE, N_OBJECT3})) {
return s;
}
MUSTTAIL return Parser3::keepGoing(self);
@@ -292,7 +316,7 @@ inline WeaselJsonStatus n_array3(Parser3 *self) {
case ',':
++self->buf;
self->pop();
if (auto s = self->push({N_WHITESPACE, N_VALUE, N_WHITESPACE, N_ARRAY3})) {
if (auto s = self->push({N_VALUE, N_WHITESPACE, N_ARRAY3})) {
return s;
}
MUSTTAIL return Parser3::keepGoing(self);
@@ -762,21 +786,6 @@ inline WeaselJsonStatus n_sign(Parser3 *self) {
}
}
inline WeaselJsonStatus n_whitespace(Parser3 *self) {
if (self->len() == 0) {
self->pop();
MUSTTAIL return Parser3::keepGoing(self);
}
while (tables.whitespace[uint8_t(*self->buf)]) {
++self->buf;
if (self->buf == self->bufEnd) {
return WeaselJson_AGAIN;
}
}
self->pop();
MUSTTAIL return Parser3::keepGoing(self);
}
inline WeaselJsonStatus n_true(Parser3 *self) {
if (*self->buf == 'e') {
++self->buf;