Skip to content

Commit 8a8792d

Browse files
committed
Remove most uses of current_char()
1 parent 59d9bc9 commit 8a8792d

1 file changed

Lines changed: 31 additions & 56 deletions

File tree

src/generic/stage2/structural_parser.h

Lines changed: 31 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -191,61 +191,25 @@ struct structural_parser : structural_iterator {
191191
return parse_number(current(), found_minus);
192192
}
193193

194-
WARN_UNUSED really_inline bool parse_atom() {
195-
switch (current_char()) {
196-
case 't':
197-
log_value("true");
198-
if (!atomparsing::is_valid_true_atom(current())) { return true; }
199-
append_tape(0, internal::tape_type::TRUE_VALUE);
200-
break;
201-
case 'f':
202-
log_value("false");
203-
if (!atomparsing::is_valid_false_atom(current())) { return true; }
204-
append_tape(0, internal::tape_type::FALSE_VALUE);
205-
break;
206-
case 'n':
207-
log_value("null");
208-
if (!atomparsing::is_valid_null_atom(current())) { return true; }
209-
append_tape(0, internal::tape_type::NULL_VALUE);
210-
break;
211-
default:
212-
log_error("IMPOSSIBLE: unrecognized parse_atom structural character");
213-
return true;
214-
}
215-
return false;
216-
}
217-
218-
WARN_UNUSED really_inline bool parse_single_atom() {
219-
switch (current_char()) {
220-
case 't':
221-
log_value("true");
222-
if (!atomparsing::is_valid_true_atom(current(), remaining_len())) { return true; }
223-
append_tape(0, internal::tape_type::TRUE_VALUE);
224-
break;
225-
case 'f':
226-
log_value("false");
227-
if (!atomparsing::is_valid_false_atom(current(), remaining_len())) { return true; }
228-
append_tape(0, internal::tape_type::FALSE_VALUE);
229-
break;
230-
case 'n':
231-
log_value("null");
232-
if (!atomparsing::is_valid_null_atom(current(), remaining_len())) { return true; }
233-
append_tape(0, internal::tape_type::NULL_VALUE);
234-
break;
235-
default:
236-
log_error("IMPOSSIBLE: unrecognized parse_atom structural character");
237-
return true;
238-
}
239-
return false;
240-
}
241-
242194
WARN_UNUSED really_inline ret_address_t parse_value(const unified_machine_addresses &addresses, ret_address_t continue_state) {
243-
switch (current_char()) {
195+
switch (advance_char()) {
244196
case '"':
245197
FAIL_IF( parse_string() );
246198
return continue_state;
247-
case 't': case 'f': case 'n':
248-
FAIL_IF( parse_atom() );
199+
case 't':
200+
log_value("true");
201+
FAIL_IF( !atomparsing::is_valid_true_atom(current()) );
202+
append_tape(0, internal::tape_type::TRUE_VALUE);
203+
return continue_state;
204+
case 'f':
205+
log_value("false");
206+
FAIL_IF( !atomparsing::is_valid_false_atom(current()) );
207+
append_tape(0, internal::tape_type::FALSE_VALUE);
208+
return continue_state;
209+
case 'n':
210+
log_value("null");
211+
FAIL_IF( !atomparsing::is_valid_null_atom(current()) );
212+
append_tape(0, internal::tape_type::NULL_VALUE);
249213
return continue_state;
250214
case '0': case '1': case '2': case '3': case '4':
251215
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
396360
case '"':
397361
FAIL_IF( parser.parse_string() );
398362
goto finish;
399-
case 't': case 'f': case 'n':
400-
FAIL_IF( parser.parse_single_atom() );
363+
case 't':
364+
parser.log_value("true");
365+
FAIL_IF( !atomparsing::is_valid_true_atom(parser.current(), parser.remaining_len()) );
366+
parser.append_tape(0, internal::tape_type::TRUE_VALUE);
367+
goto finish;
368+
case 'f':
369+
parser.log_value("false");
370+
FAIL_IF( !atomparsing::is_valid_false_atom(parser.current(), parser.remaining_len()) );
371+
parser.append_tape(0, internal::tape_type::FALSE_VALUE);
372+
goto finish;
373+
case 'n':
374+
parser.log_value("null");
375+
FAIL_IF( !atomparsing::is_valid_null_atom(parser.current(), parser.remaining_len()) );
376+
parser.append_tape(0, internal::tape_type::NULL_VALUE);
401377
goto finish;
402378
case '0': case '1': case '2': case '3': case '4':
403379
case '5': case '6': case '7': case '8': case '9':
@@ -439,7 +415,6 @@ WARN_UNUSED static error_code parse_structurals(dom_parser_implementation &dom_p
439415

440416
object_key_state:
441417
if (parser.advance_char() != ':' ) { parser.log_error("Missing colon after key in object"); goto error; }
442-
parser.advance_char();
443418
GOTO( parser.parse_value(addresses, addresses.object_continue) );
444419

445420
object_continue:
@@ -464,7 +439,8 @@ WARN_UNUSED static error_code parse_structurals(dom_parser_implementation &dom_p
464439
// Array parser states
465440
//
466441
array_begin:
467-
if (parser.advance_char() == ']') {
442+
if (parser.peek_char() == ']') {
443+
parser.advance_char();
468444
parser.end_array();
469445
goto scope_end;
470446
}
@@ -479,7 +455,6 @@ WARN_UNUSED static error_code parse_structurals(dom_parser_implementation &dom_p
479455
switch (parser.advance_char()) {
480456
case ',':
481457
parser.increment_count();
482-
parser.advance_char();
483458
goto main_array_switch;
484459
case ']':
485460
parser.end_array();

0 commit comments

Comments
 (0)