X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=lexer.c;h=faecfe36fd75f32a12ceca0c883bdb597f1e97b1;hb=68c5da90234d8956dac083c5f9fd1cae96a7317c;hp=9643ec5953fcc5b62b2d830f64463032e21fe98e;hpb=5c804a26fbf22e58afedba1551d31f63d81d4d84;p=cparser diff --git a/lexer.c b/lexer.c index 9643ec5..faecfe3 100644 --- a/lexer.c +++ b/lexer.c @@ -64,7 +64,7 @@ static strset_t stringset; */ static void parse_error(const char *msg) { - errorf(lexer_token.source_position, "%s", msg); + errorf(&lexer_token.source_position, "%s", msg); } /** @@ -74,7 +74,7 @@ static void parse_error(const char *msg) */ static NORETURN internal_error(const char *msg) { - internal_errorf(lexer_token.source_position, "%s", msg); + internal_errorf(&lexer_token.source_position, "%s", msg); } static inline void next_real_char(void) @@ -343,7 +343,7 @@ static void parse_integer_suffix(bool is_oct_hex) if(v >= TARGET_LONG_MIN && v <= TARGET_LONG_MAX) { lexer_token.datatype = type_long; return; - } else if(is_oct_hex && v >= 0 && v <= TARGET_ULONG_MAX) { + } else if(is_oct_hex && v >= 0 && (unsigned long long)v <= (unsigned long long)TARGET_ULONG_MAX) { lexer_token.datatype = type_unsigned_long; return; } @@ -872,7 +872,7 @@ static void parse_string_literal(void) source_position_t source_position; source_position.input_name = lexer_token.source_position.input_name; source_position.linenr = start_linenr; - errorf(source_position, "string has no end"); + errorf(&source_position, "string has no end"); lexer_token.type = T_ERROR; return; } @@ -941,7 +941,7 @@ static void parse_wide_character_constant(void) case EOF: { source_position_t source_position = lexer_token.source_position; source_position.linenr = start_linenr; - errorf(source_position, "EOF while parsing character constant"); + errorf(&source_position, "EOF while parsing character constant"); lexer_token.type = T_ERROR; return; } @@ -957,6 +957,9 @@ static void parse_wide_character_constant(void) end_of_wide_char_constant:; size_t size = (size_t) obstack_object_size(&symbol_obstack); + assert(size % sizeof(wchar_rep_t) == 0); + size /= sizeof(wchar_rep_t); + const wchar_rep_t *string = obstack_finish(&symbol_obstack); lexer_token.type = T_WIDE_CHARACTER_CONSTANT; @@ -987,7 +990,7 @@ static void parse_wide_string_literal(void) source_position_t source_position; source_position.input_name = lexer_token.source_position.input_name; source_position.linenr = start_linenr; - errorf(source_position, "string has no end"); + errorf(&source_position, "string has no end"); lexer_token.type = T_ERROR; return; } @@ -1060,7 +1063,7 @@ static void parse_character_constant(void) source_position_t source_position; source_position.input_name = lexer_token.source_position.input_name; source_position.linenr = start_linenr; - errorf(source_position, "EOF while parsing character constant"); + errorf(&source_position, "EOF while parsing character constant"); lexer_token.type = T_ERROR; return; } @@ -1112,7 +1115,7 @@ static void skip_multiline_comment(void) source_position_t source_position; source_position.input_name = lexer_token.source_position.input_name; source_position.linenr = start_linenr; - errorf(source_position, "at end of file while looking for comment end"); + errorf(&source_position, "at end of file while looking for comment end"); return; } @@ -1281,7 +1284,7 @@ static void parse_pragma(void) { if (value != STDC_VALUE_UNKNOWN) { unknown_pragma = false; } else { - errorf(pp_token.source_position, "bad STDC pragma argument"); + errorf(&pp_token.source_position, "bad STDC pragma argument"); } } } @@ -1290,7 +1293,7 @@ static void parse_pragma(void) { } eat_until_newline(); if (unknown_pragma && warning.unknown_pragmas) { - warningf(pp_token.source_position, "encountered unknown #pragma"); + warningf(&pp_token.source_position, "encountered unknown #pragma"); } } @@ -1373,7 +1376,7 @@ static void parse_preprocessor_directive(void) #define ELSE_CODE(code) \ default: \ - code; \ + code \ } \ } /* end of while(1) */ \ break; @@ -1566,7 +1569,7 @@ void lexer_next_preprocessing_token(void) default: next_char(); - errorf(lexer_token.source_position, "unknown character '%c' found\n", c); + errorf(&lexer_token.source_position, "unknown character '%c' found\n", c); lexer_token.type = T_ERROR; return; }