Annotate all reject code paths as unlikely
This commit is contained in:
@@ -225,7 +225,7 @@ inline WeaselJsonStatus n_value(Parser3 *self) {
|
|||||||
if (memcmp(self->buf, "rue", 3) == 0) {
|
if (memcmp(self->buf, "rue", 3) == 0) {
|
||||||
self->callbacks->on_true_literal(self->data);
|
self->callbacks->on_true_literal(self->data);
|
||||||
self->buf += 3;
|
self->buf += 3;
|
||||||
} else {
|
} else [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -241,7 +241,7 @@ inline WeaselJsonStatus n_value(Parser3 *self) {
|
|||||||
if (memcmp(self->buf, "alse", 4) == 0) {
|
if (memcmp(self->buf, "alse", 4) == 0) {
|
||||||
self->callbacks->on_false_literal(self->data);
|
self->callbacks->on_false_literal(self->data);
|
||||||
self->buf += 4;
|
self->buf += 4;
|
||||||
} else {
|
} else [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -257,7 +257,7 @@ inline WeaselJsonStatus n_value(Parser3 *self) {
|
|||||||
if (memcmp(self->buf, "ull", 3) == 0) {
|
if (memcmp(self->buf, "ull", 3) == 0) {
|
||||||
self->callbacks->on_null_literal(self->data);
|
self->callbacks->on_null_literal(self->data);
|
||||||
self->buf += 3;
|
self->buf += 3;
|
||||||
} else {
|
} else [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -267,7 +267,7 @@ inline WeaselJsonStatus n_value(Parser3 *self) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return WeaselJson_REJECT;
|
[[unlikely]] return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
}
|
}
|
||||||
@@ -296,7 +296,7 @@ inline WeaselJsonStatus n_object2(Parser3 *self) {
|
|||||||
}
|
}
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
default:
|
default:
|
||||||
return WeaselJson_REJECT;
|
[[unlikely]] return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -322,7 +322,7 @@ inline WeaselJsonStatus n_object3(Parser3 *self) {
|
|||||||
}
|
}
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
default:
|
default:
|
||||||
return WeaselJson_REJECT;
|
[[unlikely]] return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -371,7 +371,7 @@ inline WeaselJsonStatus n_array3(Parser3 *self) {
|
|||||||
}
|
}
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
default:
|
default:
|
||||||
return WeaselJson_REJECT;
|
[[unlikely]] return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -383,7 +383,7 @@ inline WeaselJsonStatus n_string(Parser3 *self) {
|
|||||||
return WeaselJson_AGAIN;
|
return WeaselJson_AGAIN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (*self->buf != '"') {
|
if (*self->buf != '"') [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
self->callbacks->on_begin_string(self->data);
|
self->callbacks->on_begin_string(self->data);
|
||||||
@@ -465,7 +465,7 @@ begin:
|
|||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
case Tables::CONTINUATION_BYTE:
|
case Tables::CONTINUATION_BYTE:
|
||||||
case Tables::INVALID:
|
case Tables::INVALID:
|
||||||
return WeaselJson_REJECT;
|
[[unlikely]] return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -494,13 +494,13 @@ inline WeaselJsonStatus n_string_following_escape(Parser3 *self) {
|
|||||||
}
|
}
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
default:
|
default:
|
||||||
return WeaselJson_REJECT;
|
[[unlikely]] return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline WeaselJsonStatus t_utf8_continuation_byte(Parser3 *self) {
|
inline WeaselJsonStatus t_utf8_continuation_byte(Parser3 *self) {
|
||||||
if (tables.stringByteMeaning[uint8_t(*self->buf)] !=
|
if (tables.stringByteMeaning[uint8_t(*self->buf)] !=
|
||||||
Tables::CONTINUATION_BYTE) {
|
Tables::CONTINUATION_BYTE) [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
self->utf8Codepoint <<= 6;
|
self->utf8Codepoint <<= 6;
|
||||||
@@ -512,14 +512,15 @@ inline WeaselJsonStatus t_utf8_continuation_byte(Parser3 *self) {
|
|||||||
|
|
||||||
inline WeaselJsonStatus t_utf8_last_continuation_byte(Parser3 *self) {
|
inline WeaselJsonStatus t_utf8_last_continuation_byte(Parser3 *self) {
|
||||||
if (tables.stringByteMeaning[uint8_t(*self->buf)] !=
|
if (tables.stringByteMeaning[uint8_t(*self->buf)] !=
|
||||||
Tables::CONTINUATION_BYTE) {
|
Tables::CONTINUATION_BYTE) [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
self->utf8Codepoint <<= 6;
|
self->utf8Codepoint <<= 6;
|
||||||
self->utf8Codepoint |= *self->buf & 0b00111111;
|
self->utf8Codepoint |= *self->buf & 0b00111111;
|
||||||
if (self->utf8Codepoint < self->minCodepoint ||
|
if (self->utf8Codepoint < self->minCodepoint ||
|
||||||
self->utf8Codepoint > 0x10ffff ||
|
self->utf8Codepoint > 0x10ffff ||
|
||||||
(0xd800 <= self->utf8Codepoint && self->utf8Codepoint <= 0xdfff)) {
|
(0xd800 <= self->utf8Codepoint && self->utf8Codepoint <= 0xdfff))
|
||||||
|
[[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
// TODO tell valgrind utf8Codepoint and minCodepoint are uninitialized
|
// TODO tell valgrind utf8Codepoint and minCodepoint are uninitialized
|
||||||
@@ -533,18 +534,20 @@ inline WeaselJsonStatus t_digit(Parser3 *self) {
|
|||||||
++self->buf;
|
++self->buf;
|
||||||
self->pop();
|
self->pop();
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
}
|
} else [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
inline WeaselJsonStatus t_onenine(Parser3 *self) {
|
inline WeaselJsonStatus t_onenine(Parser3 *self) {
|
||||||
if ('1' <= *self->buf && *self->buf <= '9') {
|
if ('1' <= *self->buf && *self->buf <= '9') {
|
||||||
++self->buf;
|
++self->buf;
|
||||||
self->pop();
|
self->pop();
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
}
|
} else [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
inline WeaselJsonStatus t_hex(Parser3 *self) {
|
inline WeaselJsonStatus t_hex(Parser3 *self) {
|
||||||
self->utf8Codepoint <<= 4;
|
self->utf8Codepoint <<= 4;
|
||||||
@@ -554,7 +557,7 @@ inline WeaselJsonStatus t_hex(Parser3 *self) {
|
|||||||
self->utf8Codepoint |= 10 + *self->buf - 'a';
|
self->utf8Codepoint |= 10 + *self->buf - 'a';
|
||||||
} else if ('A' <= *self->buf && *self->buf <= 'F') {
|
} else if ('A' <= *self->buf && *self->buf <= 'F') {
|
||||||
self->utf8Codepoint |= 10 + *self->buf - 'A';
|
self->utf8Codepoint |= 10 + *self->buf - 'A';
|
||||||
} else {
|
} else [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
++self->buf;
|
++self->buf;
|
||||||
@@ -570,7 +573,7 @@ inline WeaselJsonStatus t_hex2(Parser3 *self) {
|
|||||||
self->utf8Codepoint |= 10 + *self->buf - 'a';
|
self->utf8Codepoint |= 10 + *self->buf - 'a';
|
||||||
} else if ('A' <= *self->buf && *self->buf <= 'F') {
|
} else if ('A' <= *self->buf && *self->buf <= 'F') {
|
||||||
self->utf8Codepoint |= 10 + *self->buf - 'A';
|
self->utf8Codepoint |= 10 + *self->buf - 'A';
|
||||||
} else {
|
} else [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
++self->buf;
|
++self->buf;
|
||||||
@@ -637,12 +640,13 @@ inline WeaselJsonStatus t_hex3(Parser3 *self) {
|
|||||||
self->utf8Codepoint |= 10 + *self->buf - 'a';
|
self->utf8Codepoint |= 10 + *self->buf - 'a';
|
||||||
} else if ('A' <= *self->buf && *self->buf <= 'F') {
|
} else if ('A' <= *self->buf && *self->buf <= 'F') {
|
||||||
self->utf8Codepoint |= 10 + *self->buf - 'A';
|
self->utf8Codepoint |= 10 + *self->buf - 'A';
|
||||||
} else {
|
} else [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
++self->buf;
|
++self->buf;
|
||||||
|
|
||||||
if (!(0xdc00 <= self->utf8Codepoint && self->utf8Codepoint <= 0xdfff)) {
|
if (!(0xdc00 <= self->utf8Codepoint && self->utf8Codepoint <= 0xdfff))
|
||||||
|
[[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -654,7 +658,7 @@ inline WeaselJsonStatus t_hex3(Parser3 *self) {
|
|||||||
// there's not room, flush, write into a temp buffer, and flush again.
|
// there's not room, flush, write into a temp buffer, and flush again.
|
||||||
char tmp[4];
|
char tmp[4];
|
||||||
assert(self->utf8Codepoint >= 0x10000);
|
assert(self->utf8Codepoint >= 0x10000);
|
||||||
if (self->utf8Codepoint > 0x10FFFF) {
|
if (self->utf8Codepoint > 0x10FFFF) [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
bool useTmp = self->buf - self->writeBuf < 4;
|
bool useTmp = self->buf - self->writeBuf < 4;
|
||||||
@@ -710,7 +714,7 @@ inline WeaselJsonStatus n_integer(Parser3 *self) {
|
|||||||
}
|
}
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
default:
|
default:
|
||||||
return WeaselJson_REJECT;
|
[[unlikely]] return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -736,7 +740,7 @@ inline WeaselJsonStatus n_integer2(Parser3 *self) {
|
|||||||
}
|
}
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
default:
|
default:
|
||||||
return WeaselJson_REJECT;
|
[[unlikely]] return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -759,7 +763,7 @@ inline WeaselJsonStatus n_digits(Parser3 *self) {
|
|||||||
}
|
}
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
default:
|
default:
|
||||||
return WeaselJson_REJECT;
|
[[unlikely]] return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -852,9 +856,10 @@ inline WeaselJsonStatus n_true(Parser3 *self) {
|
|||||||
self->pop();
|
self->pop();
|
||||||
self->callbacks->on_true_literal(self->data);
|
self->callbacks->on_true_literal(self->data);
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
}
|
} else [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
inline WeaselJsonStatus n_false(Parser3 *self) {
|
inline WeaselJsonStatus n_false(Parser3 *self) {
|
||||||
if (*self->buf == 'e') {
|
if (*self->buf == 'e') {
|
||||||
@@ -862,9 +867,10 @@ inline WeaselJsonStatus n_false(Parser3 *self) {
|
|||||||
self->pop();
|
self->pop();
|
||||||
self->callbacks->on_false_literal(self->data);
|
self->callbacks->on_false_literal(self->data);
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
}
|
} else [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
inline WeaselJsonStatus n_null(Parser3 *self) {
|
inline WeaselJsonStatus n_null(Parser3 *self) {
|
||||||
if (*self->buf == 'l') {
|
if (*self->buf == 'l') {
|
||||||
@@ -872,9 +878,10 @@ inline WeaselJsonStatus n_null(Parser3 *self) {
|
|||||||
self->pop();
|
self->pop();
|
||||||
self->callbacks->on_null_literal(self->data);
|
self->callbacks->on_null_literal(self->data);
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
}
|
} else [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template <char kChar, bool kSkipWhitespace = false>
|
template <char kChar, bool kSkipWhitespace = false>
|
||||||
inline WeaselJsonStatus singleChar(Parser3 *self) {
|
inline WeaselJsonStatus singleChar(Parser3 *self) {
|
||||||
@@ -891,12 +898,13 @@ inline WeaselJsonStatus singleChar(Parser3 *self) {
|
|||||||
++self->buf;
|
++self->buf;
|
||||||
self->pop();
|
self->pop();
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
}
|
} else [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
inline WeaselJsonStatus t_eof(Parser3 *self) {
|
inline WeaselJsonStatus t_eof(Parser3 *self) {
|
||||||
if (self->len() > 0) {
|
if (self->len() > 0) [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
return self->complete ? WeaselJson_OK : WeaselJson_AGAIN;
|
return self->complete ? WeaselJson_OK : WeaselJson_AGAIN;
|
||||||
@@ -1053,7 +1061,7 @@ inline WeaselJsonStatus Parser3::keepGoing(Parser3 *self) {
|
|||||||
}
|
}
|
||||||
return WeaselJson_AGAIN;
|
return WeaselJson_AGAIN;
|
||||||
}
|
}
|
||||||
if (!symbolTables.acceptsEmptyString[self->top()]) {
|
if (!symbolTables.acceptsEmptyString[self->top()]) [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user