* cppfiles.c (TEST_THRESHOLD): New macro.
(SHOULD_MMAP): Ditto.
(read_include_file): Use SHOULD_MMAP macro to decide when mmap should be used.
From-SVN: r48840
* cppfiles.c (_cpp_pop_file_buffer): Change return type to bool
and return true if _cpp_push_next_buffer pushed a new include
file.
* cpplib.c (_cpp_pop_buffer): Only call obstack_free if
_cpp_pop_file_buffer did not push a new file.
* cpphash.h (_cpp_pop_file_buffer): Update declaration.
From-SVN: r48507
* cppfiles.c (open_file): If we've opened a directory by
mistake, close it.
(find_include_file): Avoid turning / into // or // into ///.
From-SVN: r47722
* cppfiles.c (stack_include_file): line-map.c now handles include
depth.
(handle_missing_handler): Similarly.
(_cpp_execute_include): Similarly.
(_cpp_pop_file_buffer): Similarly.
* cpphash.h (struct cpp_reader): Remove system_include_depth,
buffer_stack_depth and include_depth.
* cpplib.c (do_include_common): line-map.c now handles include depth.
(cpp_push_buffer): Similarly.
(_cpp_pop_buffer): Similarly.
* cppmacro.c (builtin_macro): Update.
* line-map.c (init_line_maps): Set depth.
(add_line_map): Increment "used" earlier. Update and use the
include depth.
(trace_include): Use the include depth.
* line-map.h (struct line_maps): New member depth.
From-SVN: r45085
* cppfiles.c (stack_include_file): Don't handle -H here.
* cppinit.c (cpp_start_read): Set include tracing after
cpp_post_options and after stacking the main file.
* line-map.c (trace_include): New.
(init_line_maps, add_line_map): Update.
* line-map.h (struct line_maps): New member trace_includes.
From-SVN: r45084
* cppfiles.c (stack_include_file): Harmonize system headerness tests.
* cppfiles.c (stack_include_file): Only stack a file if there
is something to do. Return a boolean indicating whether a
buffer was stacked or not.
(_cpp_execute_include): Similarly.
(_cpp_read_file): Similarly.
* cpphash.h (_cpp_read_file, _cpp_execute_include): Update prototypes.
From-SVN: r45083
* c-lex.c (map): Make const.
(cb_file_change): Update for callback passing a line map.
Don't assume we have a previous map. Remove sanity check
about popping too many files.
* cpperror.c (print_location): Make map const.
* cppfiles.c (stack_include_file): Update; line maps now hold sysp.
(cpp_make_system_header): Similarly.
(search_from): Similarly.
(_cpp_execute_include): Don't remember where we came from.
* cpphash.h (struct cpp_buffer): Remove return_to_line, sysp.
(struct cpp_reader): Make map const.
(CPP_IN_SYSTEM_HEADER, _cpp_do_file_change): Update.
* cpplib.c (do_line): Update; line maps now hold sysp.
(cpp_push_buffer): Similarly.
(_cpp_do_file_change): Similarly; callback with map instead.
(cpp_get_line_maps): Constify return value.
(_cpp_pop_buffer): Update.
* cpplib.h (struct cpp_file_change): Remove.
(struct cpp_callbacks): Update.
(cpp_get_line_maps): Constify return value.
* cppmacro.c (_cpp_create_definition): Update.
* cppmain.c (struct printer): Constify map.
(maybe_print_line): Similarly.
(print_line): Similarly. Deduce flags 1 and 2 here.
(cb_file_change): Update.
* line-map.c (free_line_maps): Warn regardless.
(add_line_map): Return pointer to const. When passed NULL to_file
with LC_LEAVE, use the obvious values for the return point so the
caller doesn't have to figure them out.
(lookup_line): Return pointer to const.
(print_containing_files): Take pointer to const.
* line-map.h (struct line_map): New members reason, sysp.
(add_line_map): Return pointer to const.
(lookup_line): Similarly.
(print_containing_files): Take pointer to const.
From-SVN: r44789
PR preprocessor/3081
* c-lex.c (map): New.
(cb_file_change): Update map and use it.
(cb_def_pragma, cb_define, cb_undef): Use map and line.
(c_lex): Update to use map.
* cpperror.c (print_location): Move to using logical line numbers.
* cppfiles.c (stack_include_file): Update for new _cpp_do_file_change.
(cpp_make_system_header): Similarly.
(_cpp_execute_include): Stop line numbering hacks. Store the
line we will return to.
* cpphash.h (CPP_BUF_LINE): Remove.
(struct cpp_buffer): Remove lineno and pseudo_newlines.
Add map and return_to_line.
(_cpp_do_file_change): Update.
* cppinit.c (cpp_start_read): Update line kludge.
* cpplex.c (handle_newline): Don't update lineno and pseudo_newlines.
(trigraph_ok): Use logical line numbers for diagnostics.
(skip_block_comment): Likewise.
(skip_whitespace): Likewise.
(skip_line_comment): Use pfile->line instead.
(_cpp_lex_token): Update to use logical line numbering exclusively.
Handle BOL locally. Accept new lines in directives, but keep
pfile->line decremented. Diagnostics use logical lines. Update
directive handling.
* cpplib.c (SEEN_EOL): New.
(skip_rest_of_line, check_eol): Use it.
(end_directive): Increase line number when accepting the newline
at the end of a directive.
(run_directive): Simplify.
(do_line): Bad LC_LEAVEs become LC_RENAMEs. Update.
(_cpp_do_file_change): Update to take buffer line number as an
argument, and store the current map in the cpp_reader. Remove
line number kludges.
(_cpp_do__Pragma): Restore output position after a _Pragma.
(cpp_push_buffer): Don't set output line or lineno.
(_cpp_pop_buffer): Transfer more info from a faked buffer.
Remove line kludge. Set output_line.
* cppmacro.c (builtin_macro): Update handling of __LINE__.
(parse_arg): Use logical lines.
(save_lookahead_token): Save EOFs too now.
* cppmain.c (struct printer): Fix comments.
(printer_init): Simplify, let caller do errors.
(scan_translation_unit, check_multiline_token, dump_macro): Update.
(maybe_print_line): Simplify.
(print_line): Don't print a linemarker if -P.
(cb_define, cb_undef, cb_def_pragma, cb_ident, cb_include): Update.
(cb_file_change): Simplify.
* line-map.h (LAST_SOURCE_LINE): Fix.
(CURRENT_LINE_MAP): New.
* gcc.dg/cpp/19951025-1.c: Revert.
* gcc.dg/cpp/directiv.c: We no longer process directives that
interrupt macro arguments.
From-SVN: r44650
* Makefile.in (CPPLIB_H): New, so that dependencies on cpplib.h
are also on line-map.h.
* cppfiles.c (stack_include_file): Update.
* cpphash.h (struct cpp_buffer): New member return_at_eof.
(_cpp_pop_buffer): New.
* cppinit.c (cpp_destroy, cpp_finish): Update.
(do_includes): Mark each buffer to return at EOF.
* cpplex.c (_cpp_lex_token): Pop buffers at EOF. Continue or
return as requested.
* cpplib.c (run_directive, do_line, cpp_push_buffer): Update.
(cpp_pop_buffer): Rename _cpp_pop_buffer. Stop skipping.
* cpplib.h (cpp_pop_buffer): Remove.
(cpp_scan_buffer_nooutput): Rename cpp_scan_nooutput.
* cppmacro.c (cpp_scan_buffer_nooutput): Similarly. No need to pop
buffers.
* cppmain.c (scan_buffer): Rename scan_translation_unit. No need
to pop buffers.
(do_preprocessing): Update.
* fix-header.c (read_scan_file): Update. No need to pop buffers.
* c-parse.in (_yylex): Similarly.
* scan-decls.c (scan_decls): Similarly.
* line-map.h: Update comments.
* cp/spew.c (read_token): No need to pop buffers.
* objc/Make-lang.in (objc-act.o): Update dependencies.
From-SVN: r44634
* line-map.c: New.
* line-map.h: New.
* Makefile.in (line-map.o): New.
(LIBCPP_OBJS, LIBCPP_DEPS): Update.
* c-lex.c (cb_file_change): Update for new cpp_file_change structure.
* cpperror.c (print_containing_files): Similarly.
(print_location): Update. Don't output a space before _Pragma.
* cppfiles.c (stack_include_file): Set to line 1 immediately.
(stack_include_filee, cpp_make_system_header): Update.
(_cpp_execute_include): Get logical line number right for calling
as-yet-unterminated #include.
* cpphash.h (struct cpp_reader): Add line_maps.
(_cpp_do_file_change): Update.
* cppinit.c (cpp_create_reader): Initialize line maps.
(cpp_destroy): Destroy line maps.
(cpp_start_read): Get logical line number right.
* cpplex.c (parse_string): Only warn once for multi-line strings.
Use boolean variable for null warning.
* cpplib.c (_cpp_handle_directive): End the directive if it isn't
already.
(do_include_common): End the directive early.
(do_line): Don't warn about out-of-range lines in preprocessed
source. Update. Remove unused variables.
(_cpp_do_file_change): Update for new line mapping.
(pragma_cb): New typedef.
(cpp_register_pragma): Stop looking ahead before calling the
handler. Clean up.
(do_pragma_system_header): End directive early.
(cpp_get_line_maps): New.
(cpp_pop_buffer): Fudge logical line. Update.
* cpplib.h: Include line-map.h
(enum cpp_fc_reason): Remove.
(struct cpp_file_change): Update.
(cpp_get_line_maps): New.
* cppmain.c (struct_printer): New member map.
(cb_file_change): Update for new mappings.
* fix-header.c (cb_file_change): Similarly.
testsuite:
* gcc.dg/cpp/19951025-1.c: Update.
From-SVN: r44584
* cppexp.c (parse_defined): Always record the macro name.
(lex): Don't worry about identifiers, or special-case
CPP_NOT here.
(_cpp_parse_expr): Figure out at the end of the routine
whether we saw a valid !defined() expression.
* cppfiles.c (stack_include_file): Update for mi_valid.
(_cpp_pop_file_buffer): Similarly.
* cpplex.c (_cpp_lex_token): Similarly.
* cpphash.h (enum mi_state, enum mi_ind, mi_state,
mi_if_not_defined, mi_lexed): Remove.
(mi_valid): New.
* cpplib.c (do_if): Simplify.
(do_endif, push_conditional, _cpp_handle_directive): Update
for renaming of mi_state to mi_valid.
* cpp.texi: Add index entries for digraphs, and add comment
that C++ refers to them as alternative tokens.
From-SVN: r44459
* cppfiles.c (struct include_file): New member err_no.
(find_or_create_entry): Set it.
(open_file): Don't set fds to -2. Instead, use err_no to
remember previous errors, if any.
From-SVN: r41865
* cppfiles.c (open_file): Fail directories silently, but
with an errno of NOENT set.
(read_include_file): Move the common exit code to the sole
caller. Return an int indicating success or failure. Let
open_file handle directories.
(stack_include_file): If read_include_file fails,
push a "null" buffer.
From-SVN: r41138
* cpp.texi: Update documentation for -include and -imacros.
* cppfiles.c (struct include_file): Remove "defined" memeber.
(find_or_create_entry): Make a copy of the file name, and
simplify it.
(open_file): Update to ensure we use the simplified filename.
(stack_include_file): Don't set search_from.
(cpp_included): Don't simplify the path name here.
(find_include_file): New prototype. Call search_from to
get the start of the "" include chain. Don't simplify the
filenames here.
(_cpp_execute_include): New prototype. Move diagnostics to
do_include_common. Update.
(_cpp_pop_file_buffer): Don't set defined.
(search_from): New prototype. Use the preprocessor's cwd
for files included from the command line.
(read_name_map): Don't simplify the pathname here.
* cpphash.h (enum include_type): New.
(struct buffer): Delete search from. New search_cached.
(_cpp_execute_include): Update prototype.
* cppinit.c (do_includes): Use _cpp_execute_include.
* cpplib.c (do_include_common): New function.
(do_include, do_include_next, do_import): Use it.
From-SVN: r40486
* cppfiles.c (stack_include_file): Only increase the include
count if we actually process the file properly, as opposed
to treating it as length zero. Only call read_include_file
if not DO_NOT_REREAD. Handle the -H include file output
here.
(read_include_file): Remove now redundant DO_NOT_REREAD check.
(cpp_included, find_include_file): Simplify pathnames after
remapping them. If remapping, don't use the remapped file
name's buffer as our scratch buffer.
(cpp_pop_file_buffer): Replace the multiple include macro
only if it isn't yet set.
(read_name_map): Simplify remapped names when reading in.
(remap_filename): Move code to code path that uses it.
(_cpp_simplify_pathname): Return the input pointer.
* cpphash.h (_cpp_simplify_pathname): Update prototype.
From-SVN: r40467
* cppfiles.c (NO_INCLUDE_PATH): New macro.
(find_include_file): Decide here which part of the include
chain to start the search. Complain about an empty include
chain in all cases apart from an abolsute file name.
(_cpp_execute_include): Don't choose the search chain here.
Don't call handle_missing_include in the case of an empty
include chain.
(_cpp_compare_file_date): Don't choose the search chain here.
* cpplib.c (do_include_next): Move the in-main-file diagnostic
here from _cpp_execute_include. Behave like #include if
we're in the main file.
From-SVN: r40445
* cppfiles.c: Update comments.
(destroy_include_file_node): Rename destroy_node.
(find_or_create_entry): New function.
(open_file, _cpp_fake_include): Use it.
(handle_missing_header): New function, broken out of
_cpp_execute include. Don't segfault if there is no
system or quoted path.
(_cpp_execute_include): Use handle_missing_header.
From-SVN: r40423
* cppfiles.c (struct include_file): Update.
(stack_include_file): Use search_from.
(cpp_included, find_include_file): Update.
(cpp_execute_include): Update. ptr->name may not be
null terminated. Use the new search_from member variable
of cpp_buffer.
(_cpp_compare_file_date): Similarly.
(search_from): New function, similiar to actual_directory.
(actual_directory): Delete.
(remap_filename): Update. loc->name may not be null terminated.
(struct file_name_list): Rename search_path. Update.
* cpphash.h (struct cpp_buffer): Delete actual_dir. New members
search_from and dir.
(struct cpp_reader): Remove actual_dirs.
* cppinit.c (struct cpp_pending): Update for renamed objects.
(append_include_chain, remove_dup_dir, remove_dup_dirs,
merge_include_chains, cpp_destroy, cpp_start_read): Similarly.
* cpplib.h (struct cpp_options): Similarly.
From-SVN: r40178
* cppfiles.c: Update comments.
(_cpp_read_file): Don't check for NULL filenames any more.
* cppinit.c (cpp_start_read): Don't do canonicalization of
in_fname and out_fname. Use the passed file name exclusively.
(_cpp_handle_options): Don't treat "-" as a command line option,
but as a normal filename.
(_cpp_post_options): Canonicalize in_fname and out_fname.
* cppmain.c (printer_init): Don't check out_fname for NULL.
* c-lex.c (orig_filename): Rename cpp_filename for clarity.
(init_c_lex): Update, and use "" to represent stdin to CPP.
(yyparse): Update.
From-SVN: r39938
* cppfiles.c (stack_include_file): Generate dependencies
here, and manage include_count here too.
(PRINT_THIS_DEP): Delete.
(_cpp_execute_include): Do not generate dependencies here,
apart from the case of a missing header. Do not manage
include_count.
(_cpp_read_file): Leave dependency generation to
stack_include_file.
From-SVN: r39899
* tradcpp.c (deps_file, print_deps_missing_files): New variables.
(main): Handle -MG, -MD, -MMD. Bail out if -MG is given without -M
or -MM.
(do_include): Handle missing headers like cpp0.
* cppfiles.c (_cpp_execute_include): Don't prefix absolute header
paths with first include pathname. Don't strcat to uninitialized
string.
From-SVN: r38683
* c-lex.c: Move main_input_filename handling to FC_ENTER. Clean up.
* cpperror.c (print_containing_files): Get right line number.
(print_location): Output column of 1 if 0.
* cppfiles.c (stack_include_file): cpp_push_buffer handles
the callback.
* cpphash.h (_cpp_do_file_change): No longer external.
* cpplib.c (do_file_change): Now local to cpplib.c.
(do_line): Fake a buffer stack for preprocessed files.
(cpp_push_buffer): Create a file_change callback. Handle faked
buffers.
(cpp_pop_buffer): Similarly.
* cpplib.h: BUF_FAKE: New buffer type.
* cppmain.c: Update to handle correct file renaming where a
#line is the first line of the main file, and produce only
the renamed file, not the original file, as output.
From-SVN: r38319