Skip past false,true,null directly if buffered
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user