diff options
author | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-04-19 00:22:51 +0000 |
---|---|---|
committer | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-04-19 00:22:51 +0000 |
commit | a54e0bf8102a75fd6b85a7cfbb6b9b1a553befcf (patch) | |
tree | 6e2502497aefe03b070107d7b41bbe6be454b727 /gcc/cpphash.h | |
parent | d3b199e5d0150d54e10b768227d381837a9f02d8 (diff) | |
download | gcc-a54e0bf8102a75fd6b85a7cfbb6b9b1a553befcf.tar.gz |
* cppfiles.c (ENABLE_VALGRIND_CHECKING, VALGRIND_DISCARD,
MMAP_THRESHOLD, TEST_THRESHOLD, SHOULD_MMAP): Remove.
(struct include_file): Remove fefcnt, mapped members.
(open_file, stack_include_file, _cpp_pop_file_buffer): Disable caching.
(read_include_file): Don't use mmap, terminate buffers in '\r'.
(purge_cache): Don't use munmap.
* cpphash.h (CPP_BUF_COLUMN): Update.
(lexer_state): Remove lexing_comment.
(struct _cpp_line_note): New.
(struct cpp_buffer): New members cur_note, notes_used, notes_cap,
next_line and need_line. Remove col_adjust and saved_flags.
(_cpp_process_line_notes, _cpp_clean_line, _cpp_get_fresh_line,
_cpp_skip_block_comment, scan_out_logical_line): New.
(_cpp_init_mbchar): Remove.
* cppinit.c (init_library): Remove call to _cpp_init_mbchar.
(cpp_read_main_file): Set line to 1 earlier.
(post_options): -traditional-cpp doesn't want trigraphs.
* cpplex.c (MULTIBYTE_CHARS): Remove code predicated on this.
(add_line_note, _cpp_clean_line, _cpp_process_line_notes,
_cpp_get_fresh_line): New.
(handle_newline, skip_escaped_newlines, trigraph_p,
continue_after_nul, _cpp_init_mbchar): Remove.
(get_effective_char): Update.
(_cpp_skip_block_comment): Rename from skip_block_comment, simplify.
(skip_line_comment): Simplify.
(skip_whitespace, parse_identifier, parse_slow, parse_number,
parse_string): Update.
(cpp_lex_direct): Use clean lines and process line notes. Update.
(cpp_interpret_charconst): No MULTIBYTE_CHARS.
* cpplib.c (prepare_directive_trad): Call scan_out_logical_line
directly.
(_cpp_handle_directive): Don't set saved_flags.
(run_directive, destringize_and_run, cpp_define, cpp_define_builtin,
cpp_undef, handle_assertion, cpp_push_buffer): Update.
(_cpp_pop_buffer): Free notes.
* cppmacro.c (builtin_macro, paste_tokens): \n terminate buffer.
* cpppch.c (cpp_read_state): \n terminate buffer.
* cpptrad.c (skip_escaped_newlines, handle_newline): Remove.
(copy_comment): Use _cpp_skip_block_comment.
(skip_whitespace, lex_identifier, _cpp_read_logical_line_trad):
Simplify.
(_cpp_overlay_buffer, _cpp_remove_overlay, push_replacement_text,
save_replacement_text): Update.
(scan_out_logical_line): Update to use clean lines and process
line notes.
* fix-header.c (read_scan_file): Update.
testsuite:
* gcc.dg/cpp/_Pragma4.c: Remove stray space.
* gcc.dg/cpp/trad/escaped-eof.c: Correct line number.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@65808 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cpphash.h')
-rw-r--r-- | gcc/cpphash.h | 52 |
1 files changed, 33 insertions, 19 deletions
diff --git a/gcc/cpphash.h b/gcc/cpphash.h index bc0d099599b..4b5cd499cf0 100644 --- a/gcc/cpphash.h +++ b/gcc/cpphash.h @@ -45,7 +45,7 @@ typedef unsigned char uchar; #define CPP_OPTION(PFILE, OPTION) ((PFILE)->opts.OPTION) #define CPP_BUFFER(PFILE) ((PFILE)->buffer) -#define CPP_BUF_COLUMN(BUF, CUR) ((CUR) - (BUF)->line_base + (BUF)->col_adjust) +#define CPP_BUF_COLUMN(BUF, CUR) ((CUR) - (BUF)->line_base) #define CPP_BUF_COL(BUF) CPP_BUF_COLUMN(BUF, (BUF)->cur) /* Maximum nesting of cpp_buffers. We use a static limit, partly for @@ -212,9 +212,6 @@ struct lexer_state all directives apart from #define. */ unsigned char save_comments; - /* Nonzero if we're mid-comment. */ - unsigned char lexing_comment; - /* Nonzero if lexing __VA_ARGS__ is valid. */ unsigned char va_args_ok; @@ -240,17 +237,37 @@ struct spec_nodes cpp_hashnode *n__VA_ARGS__; /* C99 vararg macros */ }; +typedef struct _cpp_line_note _cpp_line_note; +struct _cpp_line_note +{ + /* Location in the clean line the note refers to. */ + const uchar *pos; + + /* Type of note. */ + enum { NOTE_ESC_NL = 0, + NOTE_ESC_SPACE_NL, + NOTE_TRIGRAPH, + NOTE_NEWLINE } type; +}; + /* Represents the contents of a file cpplib has read in. */ struct cpp_buffer { - const unsigned char *cur; /* current position */ - const unsigned char *backup_to; /* if peeked character is not wanted */ - const unsigned char *rlimit; /* end of valid data */ - const unsigned char *line_base; /* start of current line */ + const uchar *cur; /* Current location. */ + const uchar *line_base; /* Start of current physical line. */ + const uchar *next_line; /* Start of to-be-cleaned logical line. */ + + const uchar *buf; /* Entire character buffer. */ + const uchar *rlimit; /* Writable byte at end of file. */ + + _cpp_line_note *notes; /* Array of notes. */ + unsigned int cur_note; /* Next note to process. */ + unsigned int notes_used; /* Number of notes. */ + unsigned int notes_cap; /* Size of allocated array. */ struct cpp_buffer *prev; - const unsigned char *buf; /* Entire character buffer. */ + const unsigned char *backup_to; /* Soon to die. */ /* Pointer into the include table; non-NULL if this is a file buffer. Used for include_next and to record control macros. */ @@ -260,15 +277,8 @@ struct cpp_buffer Used to prohibit unmatched #endif (etc) in an include file. */ struct if_stack *if_stack; - /* Token column position adjustment owing to tabs in whitespace. */ - unsigned int col_adjust; - - /* Contains PREV_WHITE and/or AVOID_LPASTE. */ - unsigned char saved_flags; - - /* Because of the way the lexer works, -Wtrigraphs can sometimes - warn twice for the same trigraph. This helps prevent that. */ - const unsigned char *last_Wtrigraphs; + /* True if we need to get the next clean line. */ + bool need_line; /* True if we have already warned about C++ comments in this file. The warning happens only for C89 extended mode with -pedantic on, @@ -503,13 +513,16 @@ extern bool _cpp_parse_expr PARAMS ((cpp_reader *)); extern struct op *_cpp_expand_op_stack PARAMS ((cpp_reader *)); /* In cpplex.c */ +extern void _cpp_process_line_notes PARAMS ((cpp_reader *, int)); +extern void _cpp_clean_line PARAMS ((cpp_reader *)); +extern bool _cpp_get_fresh_line PARAMS ((cpp_reader *)); +extern bool _cpp_skip_block_comment PARAMS ((cpp_reader *)); extern cpp_token *_cpp_temp_token PARAMS ((cpp_reader *)); extern const cpp_token *_cpp_lex_token PARAMS ((cpp_reader *)); extern cpp_token *_cpp_lex_direct PARAMS ((cpp_reader *)); extern int _cpp_equiv_tokens PARAMS ((const cpp_token *, const cpp_token *)); extern void _cpp_init_tokenrun PARAMS ((tokenrun *, unsigned int)); -extern void _cpp_init_mbchar PARAMS ((void)); /* In cppinit.c. */ extern void _cpp_maybe_push_include_file PARAMS ((cpp_reader *)); @@ -529,6 +542,7 @@ extern void _cpp_do_file_change PARAMS ((cpp_reader *, enum lc_reason, extern void _cpp_pop_buffer PARAMS ((cpp_reader *)); /* In cpptrad.c. */ +extern bool scan_out_logical_line PARAMS ((cpp_reader *, cpp_macro *)); extern bool _cpp_read_logical_line_trad PARAMS ((cpp_reader *)); extern void _cpp_overlay_buffer PARAMS ((cpp_reader *pfile, const uchar *, size_t)); |