Browse Source

Improve IRI reading performance

This allows the compiler to construct a jump table, and avoids a branch.
zrythm_meson
David Robillard 2 years ago
parent
commit
ccdafafb81
  1. 23
      src/n3.c

23
src/n3.c

@ -690,7 +690,8 @@ read_IRIREF(SerdReader* reader, Ref* dest) @@ -690,7 +690,8 @@ read_IRIREF(SerdReader* reader, Ref* dest)
while (!st) {
const int c = eat_byte_safe(reader, peek_byte(reader));
switch (c) {
case '"': case '<': case '^': case '`': case '{': case '|': case '}':
case '"':
case '<':
*dest = pop_node(reader, *dest);
return r_err(reader, SERD_ERR_BAD_SYNTAX,
"invalid IRI character `%c'\n", c);
@ -711,17 +712,19 @@ read_IRIREF(SerdReader* reader, Ref* dest) @@ -711,17 +712,19 @@ read_IRIREF(SerdReader* reader, Ref* dest)
break;
}
break;
case '^':
case '`':
case '{':
case '|':
case '}':
*dest = pop_node(reader, *dest);
return r_err(reader, SERD_ERR_BAD_SYNTAX,
"invalid IRI character `%c'\n", c);
default:
if (c <= 0x20) {
if (is_print(c)) {
r_err(reader, SERD_ERR_BAD_SYNTAX,
"invalid IRI character `%c' (escape %%%02X)\n",
c, (unsigned)c);
} else {
r_err(reader, SERD_ERR_BAD_SYNTAX,
"invalid IRI character (escape %%%02X)\n",
(unsigned)c);
}
r_err(reader, SERD_ERR_BAD_SYNTAX,
"invalid IRI character (escape %%%02X)\n",
(unsigned)c);
if (reader->strict) {
*dest = pop_node(reader, *dest);
return SERD_ERR_BAD_SYNTAX;

Loading…
Cancel
Save