Fuse N_WHITESPACE into N_VALUE
This commit is contained in:
@@ -65,7 +65,7 @@ enum Symbol : uint8_t {
|
|||||||
struct Parser3 {
|
struct Parser3 {
|
||||||
Parser3(const WeaselJsonCallbacks *callbacks, void *data)
|
Parser3(const WeaselJsonCallbacks *callbacks, void *data)
|
||||||
: callbacks(callbacks), data(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) {
|
[[nodiscard]] WeaselJsonStatus parse(char *buf, int len) {
|
||||||
@@ -137,7 +137,31 @@ struct Parser3 {
|
|||||||
uint32_t minCodepoint;
|
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) {
|
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) {
|
switch (*self->buf) {
|
||||||
case '{':
|
case '{':
|
||||||
self->pop();
|
self->pop();
|
||||||
@@ -223,8 +247,8 @@ inline WeaselJsonStatus n_object2(Parser3 *self) {
|
|||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
case '"':
|
case '"':
|
||||||
self->pop();
|
self->pop();
|
||||||
if (auto s = self->push({N_STRING, N_WHITESPACE, T_COLON, N_WHITESPACE,
|
if (auto s = self->push({N_STRING, N_WHITESPACE, T_COLON, N_VALUE,
|
||||||
N_VALUE, N_WHITESPACE, N_OBJECT3})) {
|
N_WHITESPACE, N_OBJECT3})) {
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
@@ -244,7 +268,7 @@ inline WeaselJsonStatus n_object3(Parser3 *self) {
|
|||||||
++self->buf;
|
++self->buf;
|
||||||
self->pop();
|
self->pop();
|
||||||
if (auto s = self->push({N_WHITESPACE, N_STRING, N_WHITESPACE, T_COLON,
|
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;
|
return s;
|
||||||
}
|
}
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
@@ -292,7 +316,7 @@ inline WeaselJsonStatus n_array3(Parser3 *self) {
|
|||||||
case ',':
|
case ',':
|
||||||
++self->buf;
|
++self->buf;
|
||||||
self->pop();
|
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;
|
return s;
|
||||||
}
|
}
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
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) {
|
inline WeaselJsonStatus n_true(Parser3 *self) {
|
||||||
if (*self->buf == 'e') {
|
if (*self->buf == 'e') {
|
||||||
++self->buf;
|
++self->buf;
|
||||||
|
|||||||
Reference in New Issue
Block a user