Remove most uses of current_char()
This commit is contained in:
parent
59d9bc9e48
commit
8a8792d47f
|
@ -191,61 +191,25 @@ struct structural_parser : structural_iterator {
|
||||||
return parse_number(current(), found_minus);
|
return parse_number(current(), found_minus);
|
||||||
}
|
}
|
||||||
|
|
||||||
WARN_UNUSED really_inline bool parse_atom() {
|
|
||||||
switch (current_char()) {
|
|
||||||
case 't':
|
|
||||||
log_value("true");
|
|
||||||
if (!atomparsing::is_valid_true_atom(current())) { return true; }
|
|
||||||
append_tape(0, internal::tape_type::TRUE_VALUE);
|
|
||||||
break;
|
|
||||||
case 'f':
|
|
||||||
log_value("false");
|
|
||||||
if (!atomparsing::is_valid_false_atom(current())) { return true; }
|
|
||||||
append_tape(0, internal::tape_type::FALSE_VALUE);
|
|
||||||
break;
|
|
||||||
case 'n':
|
|
||||||
log_value("null");
|
|
||||||
if (!atomparsing::is_valid_null_atom(current())) { return true; }
|
|
||||||
append_tape(0, internal::tape_type::NULL_VALUE);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
log_error("IMPOSSIBLE: unrecognized parse_atom structural character");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
WARN_UNUSED really_inline bool parse_single_atom() {
|
|
||||||
switch (current_char()) {
|
|
||||||
case 't':
|
|
||||||
log_value("true");
|
|
||||||
if (!atomparsing::is_valid_true_atom(current(), remaining_len())) { return true; }
|
|
||||||
append_tape(0, internal::tape_type::TRUE_VALUE);
|
|
||||||
break;
|
|
||||||
case 'f':
|
|
||||||
log_value("false");
|
|
||||||
if (!atomparsing::is_valid_false_atom(current(), remaining_len())) { return true; }
|
|
||||||
append_tape(0, internal::tape_type::FALSE_VALUE);
|
|
||||||
break;
|
|
||||||
case 'n':
|
|
||||||
log_value("null");
|
|
||||||
if (!atomparsing::is_valid_null_atom(current(), remaining_len())) { return true; }
|
|
||||||
append_tape(0, internal::tape_type::NULL_VALUE);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
log_error("IMPOSSIBLE: unrecognized parse_atom structural character");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
WARN_UNUSED really_inline ret_address_t parse_value(const unified_machine_addresses &addresses, ret_address_t continue_state) {
|
WARN_UNUSED really_inline ret_address_t parse_value(const unified_machine_addresses &addresses, ret_address_t continue_state) {
|
||||||
switch (current_char()) {
|
switch (advance_char()) {
|
||||||
case '"':
|
case '"':
|
||||||
FAIL_IF( parse_string() );
|
FAIL_IF( parse_string() );
|
||||||
return continue_state;
|
return continue_state;
|
||||||
case 't': case 'f': case 'n':
|
case 't':
|
||||||
FAIL_IF( parse_atom() );
|
log_value("true");
|
||||||
|
FAIL_IF( !atomparsing::is_valid_true_atom(current()) );
|
||||||
|
append_tape(0, internal::tape_type::TRUE_VALUE);
|
||||||
|
return continue_state;
|
||||||
|
case 'f':
|
||||||
|
log_value("false");
|
||||||
|
FAIL_IF( !atomparsing::is_valid_false_atom(current()) );
|
||||||
|
append_tape(0, internal::tape_type::FALSE_VALUE);
|
||||||
|
return continue_state;
|
||||||
|
case 'n':
|
||||||
|
log_value("null");
|
||||||
|
FAIL_IF( !atomparsing::is_valid_null_atom(current()) );
|
||||||
|
append_tape(0, internal::tape_type::NULL_VALUE);
|
||||||
return continue_state;
|
return continue_state;
|
||||||
case '0': case '1': case '2': case '3': case '4':
|
case '0': case '1': case '2': case '3': case '4':
|
||||||
case '5': case '6': case '7': case '8': case '9':
|
case '5': case '6': case '7': case '8': case '9':
|
||||||
|
@ -396,8 +360,20 @@ WARN_UNUSED static error_code parse_structurals(dom_parser_implementation &dom_p
|
||||||
case '"':
|
case '"':
|
||||||
FAIL_IF( parser.parse_string() );
|
FAIL_IF( parser.parse_string() );
|
||||||
goto finish;
|
goto finish;
|
||||||
case 't': case 'f': case 'n':
|
case 't':
|
||||||
FAIL_IF( parser.parse_single_atom() );
|
parser.log_value("true");
|
||||||
|
FAIL_IF( !atomparsing::is_valid_true_atom(parser.current(), parser.remaining_len()) );
|
||||||
|
parser.append_tape(0, internal::tape_type::TRUE_VALUE);
|
||||||
|
goto finish;
|
||||||
|
case 'f':
|
||||||
|
parser.log_value("false");
|
||||||
|
FAIL_IF( !atomparsing::is_valid_false_atom(parser.current(), parser.remaining_len()) );
|
||||||
|
parser.append_tape(0, internal::tape_type::FALSE_VALUE);
|
||||||
|
goto finish;
|
||||||
|
case 'n':
|
||||||
|
parser.log_value("null");
|
||||||
|
FAIL_IF( !atomparsing::is_valid_null_atom(parser.current(), parser.remaining_len()) );
|
||||||
|
parser.append_tape(0, internal::tape_type::NULL_VALUE);
|
||||||
goto finish;
|
goto finish;
|
||||||
case '0': case '1': case '2': case '3': case '4':
|
case '0': case '1': case '2': case '3': case '4':
|
||||||
case '5': case '6': case '7': case '8': case '9':
|
case '5': case '6': case '7': case '8': case '9':
|
||||||
|
@ -439,7 +415,6 @@ object_begin:
|
||||||
|
|
||||||
object_key_state:
|
object_key_state:
|
||||||
if (parser.advance_char() != ':' ) { parser.log_error("Missing colon after key in object"); goto error; }
|
if (parser.advance_char() != ':' ) { parser.log_error("Missing colon after key in object"); goto error; }
|
||||||
parser.advance_char();
|
|
||||||
GOTO( parser.parse_value(addresses, addresses.object_continue) );
|
GOTO( parser.parse_value(addresses, addresses.object_continue) );
|
||||||
|
|
||||||
object_continue:
|
object_continue:
|
||||||
|
@ -464,7 +439,8 @@ scope_end:
|
||||||
// Array parser states
|
// Array parser states
|
||||||
//
|
//
|
||||||
array_begin:
|
array_begin:
|
||||||
if (parser.advance_char() == ']') {
|
if (parser.peek_char() == ']') {
|
||||||
|
parser.advance_char();
|
||||||
parser.end_array();
|
parser.end_array();
|
||||||
goto scope_end;
|
goto scope_end;
|
||||||
}
|
}
|
||||||
|
@ -479,7 +455,6 @@ array_continue:
|
||||||
switch (parser.advance_char()) {
|
switch (parser.advance_char()) {
|
||||||
case ',':
|
case ',':
|
||||||
parser.increment_count();
|
parser.increment_count();
|
||||||
parser.advance_char();
|
|
||||||
goto main_array_switch;
|
goto main_array_switch;
|
||||||
case ']':
|
case ']':
|
||||||
parser.end_array();
|
parser.end_array();
|
||||||
|
|
Loading…
Reference in New Issue