-static void parse_character_constant(void)
-{
- const unsigned start_linenr = input.position.lineno;
-
- eat('\'');
-
- int tc;
- while (true) {
- switch (input.c) {
- case '\\':
- tc = parse_escape_sequence();
- obstack_1grow(&symbol_obstack, (char) tc);
- break;
-
- MATCH_NEWLINE(
- parse_error("newline while parsing character constant");
- break;
- )
-
- case EOF: {
- source_position_t source_position;
- source_position.input_name = pp_token.base.source_position.input_name;
- source_position.lineno = start_linenr;
- errorf(&source_position, "EOF while parsing character constant");
- goto end_of_char_constant;
- }
-
- case '\'':
- next_char();
- goto end_of_char_constant;
-
- default:
- obstack_1grow(&symbol_obstack, (char) input.c);
- next_char();
- break;
-
- }
- }
-
-end_of_char_constant:;
- obstack_1grow(&symbol_obstack, '\0');
- const size_t size = (size_t)obstack_object_size(&symbol_obstack);
- char *const string = obstack_finish(&symbol_obstack);
-
- pp_token.kind = TP_CHARACTER_CONSTANT;
- pp_token.string.string = make_string(string, size);
-
- if (size == 0) {
- parse_error("empty character constant");
- }
-}
-
-#define SYMBOL_CHARS_WITHOUT_E_P \
- case 'a': \