Annotate all reject code paths as unlikely

This commit is contained in:
2025-05-22 14:51:55 -04:00
parent 3682bea38a
commit 23929289cb

View File

@@ -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,8 +534,9 @@ 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) {
@@ -542,8 +544,9 @@ inline WeaselJsonStatus t_onenine(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_hex(Parser3 *self) { inline WeaselJsonStatus t_hex(Parser3 *self) {
@@ -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,8 +856,9 @@ 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) {
@@ -862,8 +867,9 @@ 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) {
@@ -872,8 +878,9 @@ 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>
@@ -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;
} }
} }