Use parse_primitive (negative perf!)
This commit is contained in:
parent
6ef9395419
commit
03aaf189c1
|
@ -140,17 +140,10 @@ WARN_UNUSED really_inline error_code structural_parser::parse(T &builder) noexce
|
|||
}
|
||||
goto array_begin;
|
||||
}
|
||||
case '"': SIMDJSON_TRY( builder.parse_string(*this, value) ); goto document_end;
|
||||
case 't': SIMDJSON_TRY( builder.parse_root_true_atom(*this, value) ); goto document_end;
|
||||
case 'f': SIMDJSON_TRY( builder.parse_root_false_atom(*this, value) ); goto document_end;
|
||||
case 'n': SIMDJSON_TRY( builder.parse_root_null_atom(*this, value) ); goto document_end;
|
||||
case '-':
|
||||
case '0': case '1': case '2': case '3': case '4':
|
||||
case '5': case '6': case '7': case '8': case '9':
|
||||
SIMDJSON_TRY( builder.parse_root_number(*this, value) ); goto document_end;
|
||||
default:
|
||||
log_error("Document starts with a non-value character");
|
||||
return TAPE_ERROR;
|
||||
default: {
|
||||
SIMDJSON_TRY( builder.parse_root_primitive(*this, value) );
|
||||
goto document_end;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -182,17 +175,9 @@ object_field: {
|
|||
SIMDJSON_TRY( start_array(builder) );
|
||||
goto array_begin;
|
||||
}
|
||||
case '"': SIMDJSON_TRY( builder.parse_string(*this, value) ); break;
|
||||
case 't': SIMDJSON_TRY( builder.parse_true_atom(*this, value) ); break;
|
||||
case 'f': SIMDJSON_TRY( builder.parse_false_atom(*this, value) ); break;
|
||||
case 'n': SIMDJSON_TRY( builder.parse_null_atom(*this, value) ); break;
|
||||
case '-':
|
||||
case '0': case '1': case '2': case '3': case '4':
|
||||
case '5': case '6': case '7': case '8': case '9':
|
||||
SIMDJSON_TRY( builder.parse_number(*this, value) ); break;
|
||||
default:
|
||||
log_error("Non-value found when value was expected!");
|
||||
return TAPE_ERROR;
|
||||
default: {
|
||||
SIMDJSON_TRY( builder.parse_primitive(*this, value) );
|
||||
}
|
||||
}
|
||||
} // object_field:
|
||||
|
||||
|
@ -241,17 +226,9 @@ array_value: {
|
|||
SIMDJSON_TRY( start_array(builder) );
|
||||
goto array_begin;
|
||||
}
|
||||
case '"': SIMDJSON_TRY( builder.parse_string(*this, value) ); break;
|
||||
case 't': SIMDJSON_TRY( builder.parse_true_atom(*this, value) ); break;
|
||||
case 'f': SIMDJSON_TRY( builder.parse_false_atom(*this, value) ); break;
|
||||
case 'n': SIMDJSON_TRY( builder.parse_null_atom(*this, value) ); break;
|
||||
case '-':
|
||||
case '0': case '1': case '2': case '3': case '4':
|
||||
case '5': case '6': case '7': case '8': case '9':
|
||||
SIMDJSON_TRY( builder.parse_number(*this, value) ); break;
|
||||
default:
|
||||
log_error("Non-value found when value was expected!");
|
||||
return TAPE_ERROR;
|
||||
default: {
|
||||
SIMDJSON_TRY( builder.parse_primitive(*this, value) );
|
||||
}
|
||||
}
|
||||
} // array_value:
|
||||
|
||||
|
|
|
@ -16,6 +16,36 @@ struct tape_builder {
|
|||
private:
|
||||
friend struct structural_parser;
|
||||
|
||||
really_inline error_code parse_root_primitive(structural_parser &parser, const uint8_t *value) {
|
||||
switch (*value) {
|
||||
case '"': return parse_string(parser, value);
|
||||
case 't': return parse_root_true_atom(parser, value);
|
||||
case 'f': return parse_root_false_atom(parser, value);
|
||||
case 'n': return parse_root_null_atom(parser, value);
|
||||
case '-':
|
||||
case '0': case '1': case '2': case '3': case '4':
|
||||
case '5': case '6': case '7': case '8': case '9':
|
||||
return parse_root_number(parser, value);
|
||||
default:
|
||||
parser.log_error("Document starts with a non-value character");
|
||||
return TAPE_ERROR;
|
||||
}
|
||||
}
|
||||
really_inline error_code parse_primitive(structural_parser &parser, const uint8_t *value) {
|
||||
switch (*value) {
|
||||
case '"': return parse_string(parser, value);
|
||||
case 't': return parse_true_atom(parser, value);
|
||||
case 'f': return parse_false_atom(parser, value);
|
||||
case 'n': return parse_null_atom(parser, value);
|
||||
case '-':
|
||||
case '0': case '1': case '2': case '3': case '4':
|
||||
case '5': case '6': case '7': case '8': case '9':
|
||||
return parse_number(parser, value);
|
||||
default:
|
||||
parser.log_error("Non-value found when value was expected!");
|
||||
return TAPE_ERROR;
|
||||
}
|
||||
}
|
||||
really_inline void empty_object(structural_parser &parser) {
|
||||
parser.log_value("empty object");
|
||||
empty_container(parser, internal::tape_type::START_OBJECT, internal::tape_type::END_OBJECT);
|
||||
|
|
Loading…
Reference in New Issue