diff --git a/src/parser3.h b/src/parser3.h index de8c640..4f7e9d8 100644 --- a/src/parser3.h +++ b/src/parser3.h @@ -446,13 +446,25 @@ inline PRESERVE_NONE WeaselJsonStatus n_object3(Parser3 *self, char *buf, assert(!self->inKey); self->inKey = true; self->pop(); - if (auto s = self->push({N_STRING, T_COLON, N_VALUE, N_OBJECT3})) { + if (auto s = skipWhitespace(buf, bufEnd)) { + if (auto s2 = self->push({N_STRING, T_COLON, N_VALUE, N_OBJECT3})) { + return s2; + } + return s; + } + if (*buf != '"') [[unlikely]] { + return WeaselJson_REJECT; + } + ++buf; + self->dataBegin = self->writeBuf = buf; + self->strDfa.reset(); + if (auto s = self->push({N_STRING2, T_COLON, N_VALUE, N_OBJECT3})) { return s; } if (buf == bufEnd) { return WeaselJson_AGAIN; } - MUSTTAIL return n_string(self, buf, bufEnd); + MUSTTAIL return n_string2(self, buf, bufEnd); default: [[unlikely]] return WeaselJson_REJECT; }