Skip past false,true,null directly if buffered
This commit is contained in:
@@ -223,22 +223,49 @@ inline WeaselJsonStatus n_value(Parser3 *self) {
|
|||||||
case 't':
|
case 't':
|
||||||
++self->buf;
|
++self->buf;
|
||||||
self->pop();
|
self->pop();
|
||||||
if (auto s = self->push({T_R, T_U, N_TRUE})) {
|
if (self->len() >= 3) {
|
||||||
return s;
|
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;
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
++self->buf;
|
++self->buf;
|
||||||
self->pop();
|
self->pop();
|
||||||
if (auto s = self->push({T_A, T_L, T_S, N_FALSE})) {
|
if (self->len() >= 4) {
|
||||||
return s;
|
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;
|
break;
|
||||||
case 'n':
|
case 'n':
|
||||||
++self->buf;
|
++self->buf;
|
||||||
self->pop();
|
self->pop();
|
||||||
if (auto s = self->push({T_U, T_L, N_NULL})) {
|
if (self->len() >= 3) {
|
||||||
return s;
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
Reference in New Issue
Block a user