Commit Graph

269 Commits

Author SHA1 Message Date
Neil Booth
eb1f4d9d28 c-lex.c: s/change_file/file_change.
* c-lex.c: s/change_file/file_change.
        * cpplib.h: Similarly.
        * cppmain.c: Similarly.
        * fix-header.c: Similarly.
        * cppfiles.c (stack_include_file): Pass the buffer location and
        size to cpp_push_buffer.  Generate the file_change callback,
        so that sysp is already set.
        * cpphash.h: Add _cpp_do_file_change.
        * cpplib.c (do_line): Set buffer->sysp directly. Generate the
        file_change callback after setting sysp.
        (_cpp_do_file_change): Handle FC_ENTER and the FC_RENAME exception
        here.
        (cpp_push_buffer): Don't generate a callback.  Clear sysp.
        (cpp_pop_buffer): Clean up logic.

From-SVN: r38357
2000-12-18 19:00:26 +00:00
Neil Booth
49fe13f6d8 cpplib.h (struct cpp_reader): Remove references to string_pool and temp_string_pool.
* cpplib.h (struct cpp_reader): Remove references to string_pool
        and temp_string_pool.
        * cppinit.c (cpp_create_reader, cpp_cleanup): Similarly; using
        ident_pool in place.
        * cpplex.c (parse_number, unescaped_terminator_p, parse_string,
        save_comment, cpp_token_as_text): Similarly.
        * cpplib.c (do_define, glue_header_name, parse_assertion): Similarly.
        * cppmacro.c (make_number_token, builtin_macro, lock_pools,
        unlock_pools, stringify_arg, paste_tokens): Similarly.

From-SVN: r38336
2000-12-17 22:40:32 +00:00
Neil Booth
ad2a084dbd c-lex.c: Move main_input_filename handling to FC_ENTER.
* 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
2000-12-17 00:13:54 +00:00
Neil Booth
0bda476066 cpperror.c (print_location): New function.
* cpperror.c (print_location): New function.
        (print_containing_files): Simplify.
        (_cpp_begin_message): Simplify and use print_location.
        * cppfiles.c (stack_include_file): Update.
        (_cpp_pop_file_buffer): Update.
        * cpphash.h (struct cpp_buffer): New members
        include_stack_listed and type.
        * cpplib.c (_cpp_handle_directive): Buffer->inc is not null.
        (run_directive): Take buffer type.  cpp_push_buffer cannot fail.
        (_cpp_do__Pragma, cpp_define, _cpp_define_builtin, cpp_undef,
        handle_assertion): Update.
        (cpp_push_buffer): Take a buffer type and file name.
        (cpp_pop_buffer): Update.  Clear include_stack_listed.
        * cpplib.h (input_stack_listing_current): Remove.
        (enum cpp_buffer_type): New.
        (cpp_push_buffer): New prototype.
        * cppmacro.c (builtin_macro): Simplify; buffer cannot be null.
        * fix-header.c (read_scan_file): Update.

From-SVN: r38186
2000-12-11 07:45:16 +00:00
Neil Booth
28e0f04034 cppfiles.c (NEVER_REREAD, [...]): Move from cpphash.h.
* cppfiles.c (NEVER_REREAD, DO_NOT_REREAD): Move from cpphash.h.
        * cpphash.h (NEVER_REREAD, DO_NOT_REREAD, ABSOLUTE_PATH): Delete.
        * cpplex.c (parse_identifier): Improve diagnostic.
        (_cpp_lex_token): Return unconditionally at the end of a directive.
        * cpplib.c (read_flag): Verify legality of each flag.
        (end_directive): Resotre pfile->skipping before skip_rest_of_line.
        (do_line): Use the new read_flag.
        * cppmacro.c (struct cpp_macro, parse_arg, replace_args,
        check_macro_redefinition, parse_params): Rename var_args to
        variadic.

From-SVN: r38150
2000-12-09 12:06:37 +00:00
Neil Booth
642ce43464 cppfiles.c (struct include_file): Move from cpphash.h.
* cppfiles.c (struct include_file): Move from cpphash.h.
        (_cpp_never_reread): New function.
        (open_file, read_include_file): Use it.
        (stack_include_file): Set the buffer's sysp according to the
        path in which the file was found.
        (find_include_file): Don't set sysp.
        (cpp_make_system_header, actual_directory): Update.
        (_cpp_execute_include): Do #include_next lookup handling here,
        not in cpplib.c.  Use _cpp_never_reread.
        * cpphash.h (struct_include_file): Remove.
        (struct cpp_buffer): New member sysp.
        (CPP_IN_SYSTEM_HEADER, _cpp_execute_include): Update.
        (_cpp_never_reread): New.
        * cpplib.c (read_line_number): Rename read_flag.  Rework slightly.
        (end_directive): Clear line_extension flag.
        (_cpp_handle_directive): Set line_extension flag for #number.
        (do_include_next): Handle path lookup in _cpp_execute_include.
        (do_line): Cleanup to use read_flag.  Don't allow flags in #line.
        (_cpp_do_file_change): Update.
        (do_pragma_once): Use cpp_never_reread.  Clean up.
        * cpplib.h (struct lexer_state): New member line_extension.

From-SVN: r38120
2000-12-07 23:17:56 +00:00
Neil Booth
9ba2e1ef80 c-common.c (parse_in): Make a cpp_reader *.
* c-common.c (parse_in): Make a cpp_reader *.
        * cppfiles.c (_cpp_fake_include): Remove.
        * cpphash.h: Similarly.
        * cpplib.c (do_line): Don't call _cpp_fake_include.  A valid
        #line always creates a callback; FC_RENAME if there are no
        #line flags.
        * fix-header.c (read_scan_file): cpp_push_buffer cannot fail.
        The first EOF must be our get_char buffer.

From-SVN: r38101
2000-12-07 07:14:42 +00:00
Neil Booth
3cf3593fad cppfiles.c (stack_include_file): Push zero-length buffers in case of failure.
* cppfiles.c (stack_include_file): Push zero-length buffers
        in case of failure.  Return void, as we don't fail any more.
        (read_include_file): Check for files we shouldn't re-read.
        Don't return an error code; errors are implied by marking the
        file NEVER_REREAD.
        (_cpp_execute_include): Move the recursion and in-macro checks
        here.  Update for stack_include_file not failing.
        * cpplib.c (cpp_push_buffer): Always succeed, since
        _cpp_execute_include performs the recursion check.  Tidy up.
        * cpplib.h (cpp_push_buffer): Update prototype.

From-SVN: r38057
2000-12-05 23:42:43 +00:00
Neil Booth
614c7d3716 cppfiles.c (cpp_make_system_header): Take 2 booleans, and operate on current buffer.
* cppfiles.c (cpp_make_system_header): Take 2 booleans,
        and operate on current buffer.
        (cpp_read_file): Rename _cpp_read_file.
        * cpplib.c (do_line, do_pragma_system_header): Update calls to
        cpp_make_system_header.
        * fix-header.c: Similarly.
        * cpphash.h (_cpp_read_file): Move from...
        * cpplib.h: ... here.
        * cppinit.c (do_includes, cpp_start_read): Update appropriately.

From-SVN: r37989
2000-12-04 07:32:04 +00:00
Geoffrey Keating
b43db0b3c0 cpplib.c (do_ifdef): Add check_eol() call.
* cpplib.c (do_ifdef): Add check_eol() call.
	(do_ifndef): Likewise.

	* gcc.dg/20001201-1.c: New testcase.

From-SVN: r37960
2000-12-02 22:28:44 +00:00
Neil Booth
8d9e9a083d cppinit.c (initialize): Forgotten prototype.
* cppinit.c (initialize): Forgotten prototype.
        * cpplex.c (_cpp_lex_token): Loop until not skipping.
        Always clear PREV_WHITE upon meeting a new line.
        * cpplib.c (end_directive): Set pfile->skipping after
        skip_rest_of_line.
        * cpplib.h (cpp_reader): Remove macro_pos.
        * cppmacro.c (cpp_get_line): Don't do anything special inside
        macros.
        (parse_arg): Add PREV_WHITE if a token appears after new lines.
        (funlike_invocation_p): Save and restore the output position
        over a successful check for a '('.
        (enter_macro_context): Delete uses of macro_pos.
        (cpp_get_token): Don't use pfile->skipping.

From-SVN: r37927
2000-12-01 22:01:10 +00:00
Neil Booth
27e2564ac8 c-lex.c (cb_enter_file, [...]): Combine into the new function cb_change_file.
* c-lex.c (cb_enter_file, cb_leave_file, cb_rename_file):
        Combine into the new function cb_change_file.
        (init_c_lex): Update.
        * cppfiles.c (stack_include_file): Use _cpp_do_file_change.
        (cpp_syshdr_flags): Delete.
        * cpphash.h (_cpp_do_file_change): New prototype.
        Move struct cpp_buffer here from...
        * cpplib.h (struct cpp_buffer): ... here.
        (enum cpp_fc_reason, struct cpp_file_loc,
        struct_cpp_file_change, change_file): New.
        (enter_file, leave_file, rename_file, cpp_syshdr_flags): Delete.
        * cpplib.c (do_line): Update for new cb_change_file callback.
        (_cpp_do_file_change): New function.
        (_cpp_pop_buffer): Update to use it.
        * cppmain.c (move_printer): Delete.
        (main): Set up single callback cb_change_file.
        (cb_enter_file, cb_leave_file, cb_rename_file): Delete.
        (cb_change_file): New.
        * fix-header.c (cur_file, cb_change_file): New.
        (recognized_function, read_scan_file): Update.
        * scan-decls.c (scan_decls): Update.
        * scan.h (recognized_function): Update prototype.

From-SVN: r37784
2000-11-27 08:00:04 +00:00
Neil Booth
bdb05a7b49 cpplib.h (struct cpp_reader): Remove lang_asm.
* cpplib.h (struct cpp_reader): Remove lang_asm.
        (struct cpp_options): Remove c89. New members lang,
        extended_numbers.
        * cppexp.c (parse_number): Use them.
        * cpphash.h (VALID_SIGN): Use them.
        * cppinit.c (set_lang, cpp_start_read): Update.
        * cpplex.c (parse_string, _cpp_lex_token): Update.
        * cpplib.c (_cpp_handle_directive): Update.
        * cppmacro.c (parse_args): Update.
        * cppmain.c (scan_buffer): Update.

From-SVN: r37761
2000-11-26 17:31:13 +00:00
Kaveh R. Ghazi
dd3b81b421 mcore.c (mcore_expand_prolog): Call xmalloc/xrealloc, not malloc/realloc.
* mcore.c (mcore_expand_prolog): Call xmalloc/xrealloc, not
	malloc/realloc.

	* cpplib.c (glue_header_name): Likewise.

	* fixincl.c (run_compiles, start_fixer): Likewise.

	* fixlib.c (load_file_data): Likewise.

	* mkdeps.c (munge): Likewise.

f:
	* malloc.c (malloc_init): Call xmalloc, not malloc.

From-SVN: r37511
2000-11-17 04:16:55 +00:00
Neil Booth
fe6c2db99a cpplib.c (start_directive, [...]): New functions.
* cpplib.c (start_directive, end_directive): New functions.
        (_cpp_handle_directive, run_directive): Use them.
        (_cpp_handle_directive): Don't -Wtraditional on indented
        null directives.
        (_cpp_push_buffer): Don't re-clear was_skipping.
        * cpplib.h (struct cpp_reader): New member la_saved.
        * cppmacro.c (cpp_get_token): Don't interpret _Pragma in
        directives.

From-SVN: r37487
2000-11-15 19:25:22 +00:00
Neil Booth
7f2f1a6633 cppexp.c (parse_defined): Call cpp_get_token not _cpp_get_token.
* cppexp.c (parse_defined): Call cpp_get_token not
	_cpp_get_token.
	(lex): Similarly.
	* cpplex.c (cpp_output_line): Similarly.
	* cpplib.c (glue_header_name, do_line, do_ident,
	parse_answer, parse_assertion): Similarly.
	(_cpp_handle_diretive): Don't save to lookaheads
	when processing directives.
	* cppmacro.c (parse_arg, expand_arg): Call cpp_get_token not
	_cpp_get_token.
	(funlike_invocation_p): Don't save to lookaheads
	when pre-expanding arguments.
	(_cpp_get_token): Delete.
	(cpp_get_token): Merge contents of _cpp_get_token.

From-SVN: r37462
2000-11-14 18:32:06 +00:00
Neil Booth
29b10746ab cpplex.c (_cpp_lex_token): CPP_COMMENT and true CPP_EOF cases return without MI check.
* cpplex.c (_cpp_lex_token): CPP_COMMENT and true CPP_EOF
        cases return without MI check.
        * cpplib.c (do_diagnostic): Take boolean of whether to
        print the directive name.
        (do_error, do_warning): Update.
        (do_pragma_dependency): Use it.
        * cpplib.h (VARARGS_FIRST): Delete.
        (struct cpp_token): Delete integer.
        * cppmacro.c (enter_macro_context): Move disabled check
        to _cpp_get_token.
        (_cpp_get_token): Simplify into a single loop.

From-SVN: r37434
2000-11-13 18:40:37 +00:00
Neil Booth
b528a07e0e cppexp.c: Don't worry about pfile->skipping.
* cppexp.c: Don't worry about pfile->skipping.
        * cpplib.c (struct if_stack): Make was_skipping unsigned char.
        (cpp_handle_directive): Save pfile->skipping in struct cpp_buffer
        for handled directives.
        (skip_rest_of_line): Use _cpp_lex_token after popping contexts
        and releasing lookaheads.
        (do_ifdef, do_ifndef, do_if): Use buffer->was_skipping.
        (do_else, do_elif, push_conditional): Update logic.
        (do_endif): Set buffer->was_skipping rather than pfile->skipping.
        (unwind_if_stack): Inline into cpp_pop_buffer.
        (cpp_push_buffer): Clear ifs->was_skipping for cpp_handle_directive.
        * cpplex.c (_cpp_lex_token): Clear skipping on EOF.  Handle
        multiple-include optimisation.
        * cpplib.h (struct cpp_buffer): New member was_skipping.
        * cppmacro.c (_cpp_get_token): Loop whilst pfile->skipping.  This
        works because skipping == 0 in directives.
        (_cpp_release_lookahead): Renamed from release_lookahead.
        (cpp_get_token): No need to check skipping as _cpp_get_token does
        this for us.  No need to handle MI optimisation.

From-SVN: r37404
2000-11-12 11:46:21 +00:00
Neil Booth
4c2b647d42 Remove CPP_PLACEMARKERs
* cppexp.c (lex): Don't handle CPP_PLACEMARKER.
	* cpplex.c (_cpp_lex_token): Rename skip_newlines to next_bol
	* cpplib.c (skip_rest_of_line, check_eol, cpp_push_buffer):
	           Similarly.
	* cpplib.h: Remove CPP_PLACEMARKER.
	(struct lexer_state): Rename skip_newlines to next_bol.
	* cppmacro.c (stringify_arg): Don't handle CPP_PLACEMARKER.
	Simplify prev_white handling as a result.
	(paste_all_tokens): Don't worry about CPP_PLACEMARKERs.
	(parse_arg): Empty arguments are now empty, not CPP_PLACEMARKERs.
	(parse_args): Similarly.  Update argument count tests.
	(enter_macro_context): Return 2 to indicate an empty macro.
	(replace_args): Don't bother pre-expanding an empty argument.
	Handle placemarkers and ## extension during pre-expansion.
	(cpp_get_token): Handle empty macro expansions.  Don't worry
	about CPP_PLACEMARKERs.
	(_cpp_create_definition): Empty macros are now empty.
	(cpp_macro_defintion): Don't special case empty macros.
	* scan-decls.c: Don't bother with CPP_PLACEMARKERs.
	* c-lex.c: Similarly.

From-SVN: r37385
2000-11-11 13:19:01 +00:00
Neil Booth
a949941cf7 cpphash.c: Move cpp_defined here from cpplib.c.
* cpphash.c: Move cpp_defined here from cpplib.c.
        * cpplib.c: Update comments, move cpp_defined to cpphash.c.
        * cpplex.c (_cpp_lex_token): Don't leave the lexer at EOL.
        * cppmacro.c (cpp_get_token): Update comments, no need now
        to catch the CPP_EOF meaning EOL case.

From-SVN: r37345
2000-11-09 21:18:15 +00:00
Neil Booth
9232b7d9c6 cpplib.c (do_line): Only warn pedantically if not reading preprocessed input.
* cpplib.c (do_line): Only warn pedantically if not reading
        preprocessed input.

From-SVN: r37249
2000-11-04 10:34:34 +00:00
Neil Booth
a0a9606d4b cpplib.c (run_directive): Use correct line number for output of _Pragma.
* cpplib.c (run_directive): Use correct line number for output
        of _Pragma.  Remember any in-progress directive.

        * gcc.dg/cpp/vararg2.c, gcc.dg/cpp/_Pragm1.c: New tests.

From-SVN: r37194
2000-11-01 20:21:13 +00:00
Neil Booth
86368122e6 cpp.texi: Update for new command line assertion syntax.
* cpp.texi: Update for new command line assertion syntax.
	* cpplib.c (cpp_define): Simplify a bit.
	(cpp_assert, cpp_unassert): Use handle_assertion.
	(handle_assertion): New function; accept new command line
	syntax with '='.
	* testsuite/gcc.dg/cpp/assert3.c: New tests.

From-SVN: r37171
2000-10-31 23:34:59 +00:00
Neil Booth
a5c3cccda4 cppfiles.c (stack_include_file): Check for stacked contexts here.
* cppfiles.c (stack_include_file): Check for stacked contexts
	here.
	* cpphash.h (_cpp_do__Pragma): New prototype.
	* cppinit.c (cpp_reader_init): Add _Pragma keyword to hash table.

	* cpplex.c (skip_escaped_newlines): Only process trigraphs and
	escaped newlines if !(buffer->from_stage3).
	(_cpp_lex_token): Warn about missing newlines iff
	!buffer->from_stage3.

	* cpplib.c (get__Pragma_string, destringize,
	_cpp_do__Pragma): New functions.
	(run_directive): Set output_line for _Pragma to avoid line
	markers in output.  Set from_stage3 and prevent macro expansion
	for _Pragma and command-line options.  Check buffer exhaustion.
	(cpp_push_buffer): Don't check for stacked macro contexts, as
	this is perfectly legitimate for _Pragma.  Move the check to
	stack_include_file instead. Set from_stage3 iff buffer is
	preprocessed input.

	* cpplib.h (struct cpp_buffer): Make warned_cplusplus_comments
	unsigned. New boolean from_stage3.
	(struct spec_nodes): Add n__Pragma.

	* cppmacro.c (enter_macro_context): Flip sense of return value.
	(_cpp_get_token): Handle _Pragma operator.

From-SVN: r37147
2000-10-30 22:29:00 +00:00
Neil Booth
1641a8238a * cpplib.c (skip_rest_of_line): Use _cpp_get_token.
From-SVN: r37135
2000-10-29 22:45:13 +00:00
Richard Henderson
7b03adc677 * cpplib.c (run_directive): Fix prototype.
From-SVN: r37108
2000-10-28 14:40:43 -07:00
Neil Booth
93c80368d9 New macro expander.
2000-10-28  Neil Booth  <neilb@earthling.net>

	New macro expander.

	* cpplib.c (struct answer): New.
	(struct if_stack): Use cpp_lexer_pos rather than line and col.
	Rename cmacro mi_cmacro.
	(struct directive, KANDR, STDC89, EXTENSION, COND, IF_COND, INCL,
	IN_I): New directive and flags.
	(skip_rest_of_line, check_eol, run_directive, glue_header_name,
	parse_answer, parse_assertion, find_answer): New functions.
	(parse_ifdef, detect_if_not_defined, validate_else): Remove.
	(lex_macro_node): New function to replace parse_ifdef and
	get_define_node.

	(_cpp_handle_directive): New function, combines _cpp_check_directive
	and _cpp_check_linemarker.

	(do_define, do_undef, parse_include, do_include, do_import,
	do_include_next, read_line_number, do_line, do_ident, do_pragma,
	do_pragma_once, do_pragma_poison, do_pragma_dependency):
	Update for new token getting interface.

	(do_ifdef, do_ifndef, do_if, do_else, do_endif, push_conditional)
	: Update for new multiple-include optimisation technique.
	(do_elif): Don't forget to invalidate controlling macros.

	(unwind_if_stack, cpp_defined, cpp_push_buffer, cpp_pop_buffer): Update.
	(parse_assertion, parse_answer, find_answer, _cpp_test_assertion):
	Functions to handle assertions with the new token interface.
	(do_assert, do_unassert): Use them.

	(cpp_define, _cpp_define_builtin, cpp_undef, cpp_assert, cpp_unassert):
	Use run_directive.

	(_cpp_init_stacks): Register directive names.  Don't register special
	nodes.

	* cpperror.c (print_containing_files, _cpp_begin_message): Update to
	new position recording regime.
	(cpp_ice, cpp_fatal, cpp_error, cpp_error_with_line, cpp_warning,
	cpp_warning_with_line, cpp_pedwarn, cpp_pedwarn_with_line,
	cpp_pedwarn_with_file_and_line): Update for _cpp_begin_message changes.
	(cpp_type2name): Move to cpplex.c.

	* cppexp.c (parse_charconst): spec_nodes is no longer a pointer.
	(parse_defined): Update to handle new multiple include optimisation
	method.  Remove poisoned identifier warning.
	(parse_assertion, TYPE_NAME): Delete.
	(lex): Update for multiple include optimisation, removal of
	CPP_DEFINED, to use _cpp_test_assertion for assertions and
	cpp_token_as_text.
	(_cpp_parse_expr): Update for MI optimisation, and to use op_as_text.
	(op_as_text): New function, to wrap cpp_token_as_text.

	* cppfiles.c (stack_include_file, _cpp_pop_file_buffer):
	Update for MI optimisation.
	(_cpp_execute_include): Take a token rather than 3 arguments.  Fix
	segfault on diagnostic.
	(_cpp_compare_file_date): Take a token rather than 3 args.
	(cpp_read_file): Work correctly for zero-length files.

	* cpphash.c (_cpp_init_macros, _cpp_cleanup_macros): Rename
	_cpp_init_hashtable and _cpp_cleanup_hashtable.
	(cpp_lookup): Place identifiers at front of identifier pool
	for _cpp_lookup_with_hash.
	(_cpp_lookup_with_hash): Require identifiers to be at the front of
	the identifier pool.  Commit the memory if not already in the
	hash table.

	* cppinit.c (cpp_reader_init): Move cpp_init_completed test to top.
	Initialise various members of cpp_reader, memory pools, and the
	special nodes.
	(cpp_printer_init): Delete.
	(cpp_cleanup): Update.
	(struct builtin, builtin_array, initialize_builtins): Update for new
	hashnode definition and builtin handling.
	(cpp_start_read, cpp_finish): Don't take or initialise a
	printer.  Update.

	* cpplib.h (cpp_printer, cpp_toklist, CPP_DEFINED, BOL,
	PASTED, VAR_ARGS, BEG_OF_FILE, IN_DIRECTIVE, KNOWN_DIRECTIVE,
	T_VOID, T_SPECLINE, T_DATE, T_FILE, T_BASE_FILE, T_INCLUDE_LEVEL,
	T_TIME, T_STDC, T_OPERATOR, T_POISON, T_MACRO, T_ASSERTION): Delete.
	(struct cpp_pool, struct cpp_macro, struct cpp_lexer_pos,
	struct cpp_lookahead, CPP_DHASH, enum mi_state, enum mi_ind,
	NO_EXPAND, VARARGS_FIRST, struct cpp_token_with_pos,
	struct toklist, struct cpp_context, struct specnodes,
	TOKEN_LOOKAHEAD, TOKEN_BUFFSIZE, NODE_OPERATOR, NODE_POISONED,
	NODE_BUILTIN, NODE_DIAGNOSTIC, NT_VOID, NT_MACRO, NT_ASSERTION,
	enum builtin_type, cpp_can_paste): New.
	(struct cpp_token): Delete line and col members.
	(struct cpp_buffer): New member output_lineno.
	(struct lexer_state): Delete indented, in_lex_line, seen_dot.
	Add va_args_ok, poisoned_ok, prevent_expansion, parsing_args.
	(struct cpp_reader): New members lexer_pos, macro_pos, directive_pos,
	ident_pool, temp_string_pool, macro_pool, argument_pool, string_pool,
	base_context, context, directive, mi_state, mi_if_not_defined,
	mi_lexed, mi_cmacro, mi_ind_cmacro, la_read, la_write, la_unused,
	mlstring_pos, macro_buffer, macro_buffer_len.
	Delete members mls_line, mls_column, token_list, potential_control_macro,
	temp_tokens, temp_cap, temp_alloced, temp_used, first_directive_token,
	context_cap, cur_context, no_expand_level, paste_level, contexts, args,
	save_parameter_spellings, need_newline, .
	Change type of date, time and spec_nodes members.
	Change prototypes for include and ident callbacks.
	(struct cpp_hashnode): Change type of name.  Remove union members
	expansion and code.  Add members macro, operator and builtin.

	(cpp_token_len, cpp_token_as_text, cpp_spell_token, cpp_start_read,
	cpp_finish, cpp_avoid_paste, cpp_get_token, cpp_get_line,
	cpp_get_output_line, cpp_macro_definition, cpp_start_lookahead,
	cpp_stop_lookahead): New prototypes.
	(cpp_printer_init, cpp_dump_definition): Delete prototypes.

	(U_CHAR, U, ustrcmp, ustrncmp, ustrlen, uxstrdup, ustrchr, ufputs):
	Move from cpphash.h.

	* cpphash.h (U_CHAR, U, ustrcmp, ustrncmp, ustrlen, uxstrdup, ustrchr,
	ufputs): Move to cpplib.h.
	(enum spell_type, struct token_spelling, _cpp_token_spellings, TOKEN_SPELL,
	TOKEN_NAME, struct answer, FREE_ANSWER, KANDR, STDC89, EXTENSION,
	COND, EXPAND, INCL, COMMENTS, IN_I, struct directive, directive_handler,
	struct spec_nodes, _cpp_digraph_spellings, _cpp_free_temp_tokens,
	_cpp_init_input_buffer, _cpp_grow_token_buffer, _cpp_init_toklist,
	_cpp_clear_toklist, _cpp_expand_token_space, _cpp_expand_name_space,
	_cpp_equiv_tokens, _cpp_equiv_toklists, _cpp_process_directive,
	_cpp_run_directive, _cpp_get_line, _cpp_get_raw_token, _cpp_glue_header_name,
	_cpp_can_paste, _cpp_check_directive, _cpp_check_linemarker,
	_cpp_parse_assertion, _cpp_find_answer): Delete.
	(VALID_SIGN, ALIGN, POOL_FRONT, POOL_LIMIT, POOL_BASE, POOL_SIZE,
	POOL_USED, POOL_COMMIT, struct cpp_chunk, _cpp_lex_token, _cpp_init_pool,
	_cpp_free_pool, _cpp_pool_reserve, _cpp_pool_alloc, _cpp_next_chunk,
	_cpp_lock_pool, _cpp_unlock_pool, _cpp_test_assertion,
	_cpp_handle_directive, DSC): New.
	(struct include_file): New member defined.

	(DO_NOT_REREAD, _cpp_begin_message, _cpp_execute_include,
	_cpp_compare_file_date): Update.
	(_cpp_pop_context, _cpp_get_token, _cpp_free_lookaheads, _cpp_push_token): New.
	(_cpp_init_macros, _cpp_cleanup_macros): Rename to _cpp_init_hashtable,
	_cpp_cleanup_hashtable.

	* Makefile.in: Remove cppoutput.c.

	* cppoutput.c: Delete

	* fixheader.c (read_scan_file): Update for new cpp_get_token
	prototype.
	(recognized_function): New argument LINE.

	* scan-decls.c (skip_to_closing_brace, scan_decls): Update for
	new cpp_get_token prototype.

	* scan.h (recognized_function): Update prototype.

	* po/POTFILES.in: Remove cppoutput.c.

From-SVN: r37098
2000-10-28 17:59:06 +00:00
Neil Booth
d809068018 cpperror.c (_cpp_begin_message): Do the test for suppression of warnings and pedantic warnings before the "is a...
* cpperror.c (_cpp_begin_message):  Do the test for suppression
        of warnings and pedantic warnings before the "is a warning an
        error" tests.
	* cppinit.c (cpp_handle_option): Remove surplus \n.
	* cpplex.c (ON_REST_ARG): Delete.
	(skip_block_comment): Initialise prevc.
	(parse_args): Improve error messages.
	(maybe_paste_with_next): Use CONTEXT_VARARGS rather
	than ON_REST_ARG.
	* cpplib.c (cpp_push_buffer): Fix grammar in message.
	* cppmain.c (main): Set callbacks for #ident and #pragma
	only if no_output option is false.
	(do_pragma_implementation): Only call the #pragma handler
	if it is set in the cpp_reader structure.

From-SVN: r36655
2000-09-28 05:55:22 +00:00
Branko Cibej
317639a81c flags.h: Declare warning flag warn_system_headers.
2000-09-25  Branko Cibej  <branko.cibej@hermes.si>

        * flags.h:  Declare warning flag warn_system_headers.
        * toplev.c:  Define it.
        (W_options): Add option -Wsystem-headers.
        * diagnostic.c (count_error): Test warn_system_headers.
        * invoke.texi:  Add description for -Wsystem-headers.
	* cpplib.h (cpp_options): New member warn_system_headers.
	* cpphash.h (CPP_PEDANTIC, CPP_WTRADITIONAL): Don't test
	CPP_IN_SYSTEM_HEADER.
	* cpplib.c (do_import, do_pragma_once): Likewise.
	* cpperror.c (_cpp_begin_message): Test warn_system_headers
	and CPP_IN_SYSTEM_HEADER.
	* cppinit.c (handle_option): Recognize -Wsystem_headers.
	(print_help): Describe -Wsystem_headers.
	* cpplex.c (lex_line): Reorganize condition so that warnings
	about C++ comments in system headers can be enabled. Remove
	label do_line_comment.

From-SVN: r36636
2000-09-25 22:54:04 +00:00
Neil Booth
838f313bbd cpplex.c: Update TODO comment.
* cpplex.c: Update TODO comment.
	* cpplib.c (do_error, do_warning): Merge common code of
	do_error and do_warning	into do_diagnostic.  Use it.
	(do_diagnostic): New function.
	* cpplib.h: Fix comment typo.

From-SVN: r36587
2000-09-24 10:42:09 +00:00
Neil Booth
cbcff6df5c cpphash.h (CPP_RESERVE, [...]): Delete.
* cpphash.h (CPP_RESERVE, CPP_PUTS_Q, CPP_PUTS, CPP_PUTC_Q,
	CPP_PUTC, DUMMY_TOKEN, NO_DUMMY_TOKEN): Delete.
	* cpplex.c (_cpp_expand_token_space, _cpp_init_toklist,
	_cpp_free_toklist): No need to worry about extra dummy token
	at the start of token lists any more.
	(trigraph_ok): Only warn outside comments.
	(skip_block_comment): Set and clear lexing_comment.
	(skip_line_comment): Take a cpp_reader not cpp_buffer.
	Set and clear lexing_comment.
	(parse_number): Handle leading '.' indicated by pfile->seen_dot.
	(check_long_token): Delete.
	(lex_percent, lex_dot): New subroutines of lex_token to
	handle lexing of '.' and '%' without lookback.
	(lex_token): Use lex_dot and lex_percent.
	(lex_line): Don't check for LIST_OFFSET.
	(_cpp_init_input_buffer): Update for new _cpp_init_toklist.
	* cpplib.c (_cpp_parse_assertion): Similarly.
	(cpp_push_buffer): Initialize extra_char.
	* cpplib.h (LIST_OFFSET): Delete.
	(struct cpp_buffer): New member extra_char.
	(struct lexer_state): New members lexing_comment and seen_dot.

From-SVN: r36582
2000-09-23 21:41:41 +00:00
Neil Booth
0d9f234d93 cpphash.h (HASHSTEP): Take character rather than pointer to character.
* cpphash.h (HASHSTEP): Take character rather than pointer
	to character.
	(_cpp_check_directive, _cpp_check_linemarker): Update prototypes.

	* cpphash.c (cpp_loookup): Update for new HASHSTEP.

	* cpplex.c (auto_expand_name_space, trigraph_replace,
	backslash_start, handle_newline, parse_name, INIT_TOKEN_STR,
	IMMED_TOKEN, PREV_TOKEN_TYPE, PUSH_TOKEN, REVISE_TOKEN,
	BACKUP_TOKEN, BACKUP_TRIGRAPH, MIGHT_BE_DIRECTIVE,
	KNOWN_DIRECTIVE): Delete.

	(handle_newline, check_long_token, skip_escaped_newlines,
	unterminated): New functions.
	(ACCEPT_CHAR, SAVE_STATE, RESTORE_STATE): New macros.

	(parse_identifier): Was parse_name, new implementation.
	(skip_line_comment, skip_block_comment, skip_whitespace,
	parse_number, parse_string, trigraph_ok, save_comment,
	adjust_column, _cpp_get_line): New implementations.

	(lex_token): New function.  Lexes a token at a time, looking
	forwards.  Contains most of the guts of the old lex_line.
	(lex_line): New implementation, using lex_token to obtain
	individual tokens.
	(cpp_scan_buffer): Use the token's line, not the list's line.

	* cpplib.c (_cpp_check_directive, _cpp_check_linemarker):
	 New implementations.
	(do_assert): Don't bother setting the answer's list's line.
	(cpp_push_buffer): Initialise new pfile and read_ahead members
	of struct cpp_buffer.

	* cpplib.h (cppchar_t): New typedef.
	(struct cpp_buffer): read_ahead, pfile and col_adjust are
	new members.
	(struct lexer_state): New structure that determines the state
	and behaviour of the lexer.
	(IN_DIRECTIVE, KNOWN_DIRECTIVE): New macros.
	(struct cpp_reader): New member "state". Rename
	multiline_string_line and multiline_string_column. Delete
	col_adjust, in_lex_line members.
	(CPP_BUF_COLUMN): Update.

	* gcc.dg/cpp/cmdlne-C.c: Remove bogus warning test.

From-SVN: r36509
2000-09-18 18:43:05 +00:00
Zack Weinberg
2c8f0515bb cpperror.c (print_file_and_line): If line is (unsigned int)-1, print just the filename.
* cpperror.c (print_file_and_line): If line is (unsigned int)-1,
	print just the filename.
	* cpplex.c (_cpp_run_directive): Add additional argument, the
	name to give the synthetic buffer.  This defaults to
	translated "<command line>".
	* cpplib.c (cpp_define, cpp_undef, cpp_assert, cpp_unassert):
	Adjust to match.
	(_cpp_define_builtin): New function.
	* cppinit.c (initialize_builtins): Use _cpp_define_builtin.
	* cpphash.h: Update prototypes.

	* tradcpp.c (main): Process -D and -U simultaneously, in the
	order they appeared on the command line.

From-SVN: r36043
2000-08-29 18:37:37 +00:00
Zack Weinberg
bbdac7d000 cpphash.h (IN_I): New flag for directive table.
* cpphash.h (IN_I): New flag for directive table.
	* cpplib.c (DIRECTIVE_TABLE): Mark #define, #undef, #ident, and
	#pragma with IN_I.
	(_cpp_check_directive): If -fpreprocessed, execute directives
	marked with IN_I.  Issue no warnings in this case.
	* cpplex.c (_cpp_get_token): Expand no macros if -fpreprocessed.

From-SVN: r35918
2000-08-23 18:29:53 +00:00
Zack Weinberg
6e19bb3853 cpplib.c (cpp_register_pragma_space): Just return if the namespace is already registered.
* cpplib.c (cpp_register_pragma_space): Just return if the
	namespace is already registered.

From-SVN: r35798
2000-08-18 22:42:14 +00:00
Neil Booth
61d0346df8 cpphash.h: Use HAVE_DESIGNATED_INITIALIZERS.
* cpphash.h: Use HAVE_DESIGNATED_INITIALIZERS.
	(_cpp_trigraph_map): Declaration moved from cpplex.c

	* cppinit.c: Define _cpp_trigraph_map.  Use UCHAR_MAX + 1
	instead	of 256.  Use consistent test for designated initializers.
	(cpp_init): Initialize trigraph_map.
	(initialize_standard_includes, parse_option):  Use memcmp
	instead of strncmp.

	* cpplex.c (init_trigraph_map): Remove.
	(trigraph_ok, trigraph_replace, lex_line): Refer to
	_cpp_trigraph_map.

	* cpplib.c (str_match, WARNING, ERROR, ICE): Delete.
	(do_unassert): Remove unused "next" local.

	* system.h (HAVE_DESIGNATED_INITIALIZERS): New prototype.

From-SVN: r35789
2000-08-18 17:35:58 +00:00
Neil Booth
709e9e509c cppinit.c (cpp_cleanup): Free include dir chains.
* cppinit.c (cpp_cleanup): Free include dir chains.
	* cpplib.c (do_undef): Let _cpp_free_definition make the node void.
	(do_unassert): Free the assert with _cpp_free_definition.
	* cppmacro.c (_cpp_free_definition): Free memory allocated for
	assertions.  Make the node a T_VOID node.

From-SVN: r35765
2000-08-17 18:01:43 +00:00
Zack Weinberg
9ec7291f1f configure.in (--enable-c-cpplib): Uncomment.
* configure.in (--enable-c-cpplib): Uncomment.  Use AC_DEFINE
	instead of extra_c_flags.
	(--enable-c-mbchar): Use AC_DEFINE instead of extra_c_flags.
	* configure: Regenerate.
	* config.in: Regenerate.

	* cpperror.c (cpp_type2name): New function.
	* cpplex.c (lex_line): If we issued an error for an invalid
	preprocessing directive, discard that logical line.
	* cpplib.c (do_line): Call a hook function if the current file
	is renamed by #line.
	(do_ident): Pass the contents of the string, not the entire
	token, to the callback function.
	* cpplib.h (CPP_LAST_PUNCTUATOR): New #define.
	(cb.rename_file): New hook function.
	(cb.ident): Adjust prototype.
	(cpp_type2name): Prototype.
	* cppmacro.c (dump_macro_args): Correct precedence lossage.

	* cppmain.c (cb_ident): Update for changed interface.
	(cb_rename_file): New function.
	(main): Set rename callback.

From-SVN: r35593
2000-08-09 19:41:12 +00:00
Zack Weinberg
ba89d661ac cpplex.c (parse_name): Might have to glue a CPP_OTHER token before the name.
* cpplex.c (parse_name): Might have to glue a CPP_OTHER token
	before the name.
	(lex_line): Glue @ onto the beginning of identifiers and
	string constants, in Objective-C mode.
	(output_token, spell_token): Handle CPP_OSTRING.
	(can_paste, maybe_paste_with_next): Handle pasting @ onto the
	beginning of a NAME or a STRING, in objc mode.

	* cpplib.c (get_define_node): Do not permit identifiers that
	begin with @ to be #defined.
	* cppmacro.c (CAN_PASTE_AFTER): Add CPP_OTHER.
	* cpplib.h (TTYPE_TABLE): Add CPP_OSTRING.

	* c-lang.c, objc/objc-act.c (build_objc_string): Delete.
	* c-tree.h (build_objc_string): Delete prototype.
	* objc/objc-tree.def: Delete OBJC_STRING_CST.
	* c-lex.c (yylex): Use build_string for all three kinds of strings.

	* gcc.dg/cpp/20000625-2.c: Don't expect a warning on line 4.

From-SVN: r35470
2000-08-04 01:30:06 +00:00
Zack Weinberg
5ef865d570 cppexp.c, [...]: Do not use 'legal' or 'illegal' in error messages and comments.
* cppexp.c, cppinit.c, cpplex.c, cpplib.c, cppmacro.c,
	cppspec.c: Do not use 'legal' or 'illegal' in error messages
	and comments.

	* cppmain.c (cb_define, cb_undef): Don't generate any output
	if not done_initializing.
	* cpplex.c (maybe_paste_with_next): When the token after a ##
	is an omitted rest argument, only delete the token before it
	if that token is a comma.  Do not warn about bogus token
	pastes for , ## rest_arg.

	* cpp.texi: Update.
	* cpp.1: Regenerate.

	* gcc.dg/cpp/macsyntx.c: Fix error regexp.

From-SVN: r35421
2000-08-02 07:08:49 +00:00
Zack Weinberg
58fea6afd9 cpperror.c (v_message): Split into _cpp_begin_message and v_message macro.
* cpperror.c (v_message): Split into _cpp_begin_message and
	v_message macro.  All callers updated.
	(_cpp_begin_message): Do inhibit_errors/inhibit_warnings
	checks here.

	* cppfiles.c (cpp_syshdr_flags): New function.
	(read_include_file): Don't call cpp_output_tokens.  Call
	enter_file hook.
	* cppinit.c (dump_macros_helper): Moved to cppmain.c.
	(cpp_reader_init): Don't initialize token_buffer.  Call
	_cpp_init_internal_pragmas.
	(cpp_cleanup): Don't clear token_buffer.
	(cpp_start_read): Don't worry about output from -D processing.
	Don't call cpp_output_tokens.
	(cpp_finish): Don't dump macros here.  Don't call
	cpp_output_tokens.
	* cppmacro.c (_cpp_dump_definition): Rename
	cpp_dump_definition.  Write directly to a FILE *.
	(dump_funlike_macro): Delete.
	(dump_macro_args): New.

	* cpplex.c (TOKEN_LEN): Convert to inline function.
	(_cpp_grow_token_buffer, safe_fwrite, cpp_output_tokens,
	cpp_scan_line, _cpp_dump_list): Delete.
	(cpp_printf, cpp_output_list): New.
	(output_line_command): Don't worry about entering or leaving files.
	(cpp_scan_buffer): Just output each token as we hit it.
	(process_directive): Don't call cpp_output_tokens.
	(_cpp_glue_header_name): Don't use token_buffer.
	(output_token, dump_param_spelling): Write directly to a FILE *.

	* cpplib.c (pass_thru_directive, dump_macro_name,
	pragma_dispatch, do_pragma_gcc): Delete.
	(do_define, do_undef, parse_include, do_line, do_ident, do_pragma,
	do_pragma_poison, cpp_pop_buffer): Call the appropriate hook
	functions.
	(do_error, do_warning, pragma_dependency): Call
	_cpp_begin_message, then cpp_output_list.
	(cpp_register_pragma, cpp_register_pragma_space,
	_cpp_init_internal_pragmas): New.
	(do_pragma): Walk the pragmas table here.
	(do_pragma_once, do_pragma_poison, do_pragma_system_header,
	do_pragma_dependency): Return void.
	(do_pragma_implementation): Moved to cppmain.c.

	* cpplib.h: Update prototypes.
	 (struct cpp_reader): Remove printer, token_buffer,
	token_buffer_size, and limit.  Add struct cb, and pragmas.
	(struct cpp_printer): Remove last_id and written.
	(CPP_WRITTEN, CPP_PWRITTEN, CPP_SET_WRITTEN,
	CPP_ADJUST_WRITTEN): Delete.
	* cpphash.h: Update prototypes.
	(ufputs): New wrapper.

	* cppmain.c (cb_define, cb_undef, cb_include, cb_ident,
	cb_enter_file, cb_leave_file, cb_def_pragma): New functions.
	(main): Set up callbacks.  Register #pragma implementation.
	Dump macros from here.

From-SVN: r35415
2000-08-02 01:13:45 +00:00
Zack Weinberg
bc013f005f cpplib.c (_cpp_check_directive): Issue -Wtraditional warnings for indented directives even if we are skipping.
* cpplib.c (_cpp_check_directive): Issue -Wtraditional
	warnings for indented directives even if we are skipping.

From-SVN: r35256
2000-07-25 21:02:10 +00:00
Zack Weinberg
92936ecf1a cpplib.h (TTYPE_TABLE): Move CPP_MIN and CPP_MAX into block of operators allowed in #if...
* cpplib.h (TTYPE_TABLE): Move CPP_MIN and CPP_MAX into block
	of operators allowed in #if and having an _EQ variant.  Add
	CPP_MIN_EQ, CPP_MAX_EQ, and CPP_DEFINED.
	(cpp_token flags): Add NAMED_OP.
	(enum node_type): Add T_OPERATOR.
	(struct cpp_hashnode): Add code slot to value union.
	* cpphash.h (spec_nodes): Remove n_defined.

	* cpplex.c (lex_line): Convert T_OPERATOR nodes to their proper types.
	(spell_token, can_paste, maybe_paste_with_next): Handle named operators.
	(is_macro_disabled): Tweak error messages.

	* cpplib.c (get_define_node): Disallow all named operators as
	macro names.  Tweak error messages.
	(_cpp_init_stacks): Don't set up spec_nodes->n_defined.

	* cppinit.c (builtin_array): Add entries for the named operators.
	* cppexp.c (lex): Check for CPP_DEFINED token.
	(priority table): Add entries for CPP_MIN and CPP_MAX.
	(_cpp_parse_expr): Handle CPP_MIN and CPP_MAX.

testsuite:
	* gcc.dg/cpp/directiv.c, gcc.dg/cpp/macsyntx.c,
	gcc.dg/cpp/undef1.c: Tweak error regexps.

From-SVN: r35137
2000-07-19 20:18:08 +00:00
Zack Weinberg
96be699833 cpplib.h (TTYPE_TABLE): Rearrange to use only two per-entry macros, not five.
* cpplib.h (TTYPE_TABLE): Rearrange to use only two per-entry
          macros, not five.

	* cpphash.h (TOKEN_NAME): New macro.
	(_cpp_spell_operator): Deleted.
	(token_spellings): Now _cpp_token_spellings.

	* cppexp.c: Use TOKEN_NAME or TYPE_NAME, not _cpp_spell_operator.
	* cpplex.c: Use OP and TK macros when expanding the
	TTYPE_TABLE.  Eliminate token_names.  For non-OPERATOR tokens,
	store the stringification of the enumeration name (CPP_CHAR,
	etc.) in the name slot of token_spellings.
	Use TOKEN_NAME and/or TOKEN_SPELL, do not reference
	token_spellings directly.
	* cpplib.c: Use TOKEN_SPELL.

	* cpplex.c (_cpp_push_token): If the token being pushed back
	is the previous token in this context, just subtract one from
	context->posn.
	* cppmacro.c (save_expansion): Clear aux field when storing a
	placemarker.

	* gcc.dg/cpp/paste5.c: New test.
	* gcc.dg/cpp/vararg1.c: New test.

From-SVN: r35124
2000-07-18 23:25:06 +00:00
Zack Weinberg
711b88243b [multiple changes]
2000-02-17  Zack Weinberg  <zack@wolery.cumb.org>

	* cpphash.c: Don't include hashtab.h.  Most macro-handling code
	moved to cppmacro.c.
	(hash_HASHNODE, eq_HASHNODE, _cpp_dump_macro_hash,
	dump_hash_helper): Delete.
	(expand_hash, higher_prime_number, _cpp_lookup_with_hash,
	cpp_forall_identifiers): New. Implement specialized version of
	Vlad's expandable hash table.
	(cpp_lookup): Use new functions.
	(_cpp_init_macros, _cpp_cleanup_macros): Adjust for new
	implementation.
	* cppmacro.c: New file.
	* cppinit.c (dump_macros_helper): New.
	(cpp_finish): Iterate over the identifier table directly.
	* cpplex.c (parse_name): Calculate the hash of the identifier
	while we scan it.  Use _cpp_lookup_with_hash when we can.

	* cpphash.h: Update prototypes.
	(xcnewvec, HASHSTEP): New helper macros.
	* cpplib.h: Update prototypes.
	* Makefile.in (LIBCPP_OBJS): Add cppmacro.o.
	(cppmacro.o): New rule.
	(cpphash.o): Update deps.

	* cppmain.c: Do not set pfile->printer if no_output is on.

2000-02-15  Neil Booth  <neilb@earthling.net>

	* cpplib.c: Change all directive-handler functions to return
	void, not int.
	* cpphash.h: Update typedefs.

From-SVN: r35113
2000-07-18 00:59:49 +00:00
Zack Weinberg
2c0accc920 cpphash.c (save_expansion): Clear PREV_WHITE on tokens immediately following a paste operator.
* cpphash.c (save_expansion): Clear PREV_WHITE on tokens
	immediately following a paste operator.
	* cppinit.c (sort_options): New function (only for HOST_EBCDIC).
	(cpp_reader_init): Call it, if HOST_EBCDIC.
	(cpp_handle_options): Do not sort option list here.
	(handle_option): Rename to cpp_handle_option and export.
	* cpplex.c (cpp_scan_buffer_nooutput, cpp_scan_buffer): Use
	_cpp_get_token directly.
	(cpp_scan_line): Return 0 at EOF, 1 otherwise.
	* cpplib.c (cpp_push_buffer): Don't set new->lineno to 1.
	* cpplib.h: Prototype cpp_handle_option.  Update prototype of
	cpp_scan_line.

From-SVN: r35052
2000-07-15 19:29:14 +00:00
Nathan Sidwell
ecd3655737 * cpplib.c (do_pragma_dependency): Tidy warning messages.
From-SVN: r35033
2000-07-14 08:55:21 +00:00
Zack Weinberg
f9a0e96c17 cppexp.c, [...]: Eradicate all traces of code dependent on traditional, lang_chill, or lang_fortran.
* cppexp.c, cpphash.c, cpphash.h, cppinit.c, cpplex.c,
	cpplib.c, cpplib.h: Eradicate all traces of code dependent on
	traditional, lang_chill, or lang_fortran.

	* cppfiles.c: #undef strcmp to suppress warning about macros
	used without arguments.
	(_cpp_execute_include): Use f, not fname, in "No include path"
	error.
	(_cpp_pop_file_buffer): New function.
	* cpplib.c: Don't include <sys/mman.h>.
	(cpp_push_buffer): Set line_base and lineno in new buffer.
	(cpp_pop_buffer): Use _cpp_pop_file_buffer.

	* cpplex.c: Move all prototypes and structure declarations to the
	top of the file.  Properly parenthesise some macro arguments.
	(cpp_scan_line): New function.
	(special_symbol [case T_INCLUDE_DEPTH]): Use pfile->include_depth,
	don't need to walk up the stack counting.

From-SVN: r35003
2000-07-13 02:32:41 +00:00
Zack Weinberg
417f3e3a5e [multiple changes]
2000-07-11  Zack Weinberg  <zack@wolery.cumb.org>

	* cpplex.c (parse_name): No longer inline (premature optimization).
	(do_pop_context): Fold into pop_context.
	(pop_context): Returns int.
	(lex_next): Hoist test for end of directive into pop_context.
	(push_macro_context): Returns int; takes just reader and token.
	Hoist test for excessive nesting to caller.
	(push_arg_context): Returns void; takes just reader and token.
	Do not call stringify_arg or get_raw_token.
	(get_raw_token): Convert tail recursion through	push_arg_context
	to a loop at this level.  Call stringify_arg here if appropriate.
	(maybe_paste_with_next): Convert tail recursion to a while loop.
	Hoist test of paste_level to caller.

	(stringify_arg): Push arg context at beginning.
	(cpp_get_token): Split out core into _cpp_get_token.  Call
	process_directive here.  Throw away CPP_PLACEMARKER tokens.
	(_cpp_get_token): Convert tail recursion through
	push_macro_context to a loop at this level.
	(_cpp_glue_header_name, is_macro_disabled, stringify_arg,
	_cpp_get_raw_token): Use _cpp_get_token.
	(_cpp_skip_rest_of_line): Drop the context stack directly; do
	not call pop_context.
	(_cpp_run_directive): Call lex_next directly.

	* cpphash.h: Prototype _cpp_get_token.
	* cppexp.c (lex): Use it.
	* cpphash.c (parse_define): Use it.
	* cpplib.c (get_define_node, do_undef, parse_include,
	read_line_number, do_line, do_ident, do_pragma, do_pragma_gcc,
	do_pragma_implementation, do_pragma_poison, do_pragma_dependency,
	parse_ifdef, validate_else): Use it.
	(cpp_push_buffer): Tweak error message; abort if anyone tries
	to push a buffer while macro expansions are stacked.

2000-07-11  Donn Terry  <donnte@microsoft.com>

	* cpplex.c (free_macro_args, save_token): Cast arg of free
	and/or xrealloc to PTR.
	(_cpp_init_input_buffer): Clear all fields of the base context.

From-SVN: r34972
2000-07-11 23:20:53 +00:00
Zack Weinberg
bfb9dc7faa cpplib.h (struct cpp_name): Now struct cpp_string.
* cpplib.h (struct cpp_name): Now struct cpp_string.
	(CPP_INT, CPP_FLOAT, CPP_NUMBER, CPP_COMMENT,
	CPP_HEADER_NAME): Change to type S.
	(struct cpp_token): Rename 'name' field to 'str'.  Add 'node'
	field, a cpp_hashnode *.  All references to val.name updated
	to use val.str or val.node as appropriate.
	(struct cpp_reader): Add spec_nodes field.
	(cpp_idcmp): Now cpp_ideq; takes a token * and a char *.

	* cpphash.h (struct spec_nodes): New.
	(enum spell_type): Reorder.  Only SPELL_STRING tokens use
	val.str.  All references to 'spelling > SPELL_NONE' updated to
	match.

	(CPP_IN_SYSTEM_HEADER): Check pfile->buffer and
	pfile->buffer->inc are not NULL before dereferencing them.

	* cpplex.c (parse_name): Take a pointer to the current token,
	plus current position and limit as args; return the new
	position; don't copy the text of a name into the string
	buffer, instead call cpp_lookup and store the node pointer.
	If extending a token, copy out the text of the old into a
	scratch buffer, append the new, look that up and store the new
	node pointer.  Inline.
	(maybe_paste_with_next): If the result of paste is a NAME,
	then look up the pasted text and store its node pointer.
	(lex_line): Adjust for new parse_name interface.
	Check for L"str", L'str' using spec_nodes->n_L.
	(spell_token): SPELL_IDENT tokens have their spelling in
	val.node->name.  Handle SPELL_STRING tokens that don't have
	string delimiters.
	(_cpp_expand_name_space,
	(can_paste): Check for L ## "str" using spec_nodes->n_L.
	(cpp_get_token, special_symbol): No need to call cpp_lookup.
	(cpp_idcmp): Now cpp_ideq; take a token * and a const char *;
	return 1=equal 0=not, not a tristate.

	* cpphash.c (var_args_str): Delete.
	(find_param): Compare node fields directly.
	(is__va_args__): Use CPP_PEDANTIC.  Just compare
	token->val.node with spec_nodes->n__VA_ARGS__.
	(dump_funlike_macro): Don't use var_args_str.

	* cpplib.c (_cpp_check_directive): Just walk through
	spec_nodes->dirs comparing pointers.
	(get_define_node, do_pragma_poison, detect_if_not_defined,
	parse_ifdef): The identifier has already been looked up.
	(do_ifdef, do_ifndef): parse_ifdef won't return a poisoned
	node.
	(do_if): Only call detect_if_not_defined at beginning of file.
	(_cpp_parse_assertion): Only copy string pointers for
	SPELL_STRING tokens.
	(pragma_dispatch): Take a node pointer and examine its name
	field.
	(_cpp_init_stacks): Also initialize the spec_nodes structure.

	* cppinit.c (cpp_reader_init): Call _cpp_init_stacks after
	_cpp_init_macros.
	(cpp_cleanup): Free pfile->spec_nodes.  Call _cpp_cleanup_* in
	reverse order from the corresponding _cpp_init_* routines.

	* cppexp.c (parse_number, parse_charconst, parse_defined,
	lex): Check val.node->type instead of calling cpp_defined.
	Use spec_nodes entries where appropriate.

	* fix-header.c, scan-decls.c: Update for interface changes.

From-SVN: r34926
2000-07-08 19:00:39 +00:00