Commit Graph

118 Commits

Author SHA1 Message Date
Neil Booth
563dd08adf cpphash.c (is__va_args__): New function.
* cpphash.c (is__va_args__): New function.
	(count_params): Fix line reported in error messages.  Use
	is__va_args__.  Don't return ')' on error.  Flag GNU style
	rest args macro definitions.
	(parse_define): Check macro name is not __VA_ARGS__.
	(save_expansion): Check identifier in non-varargs-macro is
	not __VA_ARGS__.  Don't flag GNU_VARARGS.
	* cpplex.c (parse_args): Accept no argument iff GNU_REST_ARGS.
	(maybe_paste_with_next): Use per-macro GNU_REST_ARGS rather
	 than per-token GNU_VARARGS.
	* cpplib.h (GNU_VARARGS): Remove.
	(GNU_REST_ARGS): New.

	* gcc.dg/cpp/macsyntx.c: New tests.

From-SVN: r34919
2000-07-08 02:18:25 +00:00
Zack Weinberg
c71f835b25 cpplex.c: Don't include sys/mman.h.
toplevel:
	* cpplex.c: Don't include sys/mman.h.
	(cpp_push_buffer, cpp_pop_buffer): Moved to cpplib.c.

	* cpplib.c: Include sys/mman.h and obstack.h.
	(cpp_push_buffer): Moved from cpplex.c; allocate buffers on an
	obstack.
	(cpp_pop_buffer): Moved from cpplex.c; free buffers from an obstack.
	(_cpp_unwind_if_stack): Now static, unwind_if_stack.  Don't
	bother freeing if stack entries (they will be freed with their buffer).
	(do_endif): Free if stack entries from the buffer obstack.
	(push_conditional): Allocate if stack entries from the buffer obstack.

	(find_answer): Rename to _cpp_find_answer.
	(do_assert, do_unassert): Update.

	* cpphash.h: Update prototypes.
	(xobnew): New convenience macro.
	* cpplib.h (struct cpp_reader): Add hash_ob and buffer_ob fields.
	Update comments.
	(struct cpp_hashnode): Remove disabled field.

	* cppinit.c: Don't include hashtab.h or splay-tree.h.
	(report_missing_guard): Moved to cppfiles.c.
	(cpp_reader_init): Call cpp_init_stacks, cpp_init_macros,
	cpp_init_includes.
	(cpp_cleanup): Call cpp_cleanup_stacks, cpp_cleanup_macros,
	cpp_cleanup_includes.  Don't destroy hashtab or
	all_include_files here.
	(cpp_finish): Use _cpp_report_missing_guards.

	* cppfiles.c (report_missing_guard): Moved from cppinit.c.
	(_cpp_init_include_table): Rename _cpp_init_includes.
	(_cpp_cleanup_includes, _cpp_report_missing_guards): New.

	* cppexp.c (parse_assertion): Update for new name of
	find_answer.

	* Makefile.in (cpplib.o, cpphash.o, cppinit.o): Update deps.

	* cpplib.c (do_ident): s/VSPACE/EOF/

testsuite:
	* gcc.dg/cpp/ident.c: New test.

From-SVN: r34870
2000-07-05 05:33:57 +00:00
Zack Weinberg
041c31944c top level:
2000-07-03  Zack Weinberg  <zack@wolery.cumb.org>

	* fix-header.c (struct partial_proto): Remove unnecessary fields.
	(recognized_extern, recognized_function, read_scan_file):
	Update for new scheme.
	(check_protection): It's still a multiple include guard even
	if it doesn't always trigger.
	* scan-decls.c (skip_to_closing_brace, scan_decls): Update for
	new scheme.
	* scan.h: Declare struct cpp_token.  Update prototypes.

2000-07-03  Neil Booth  <neilb@earthling.net>
	    Zack Weinberg  <zack@wolery.cumb.org>

	Complete overhaul of the lexer and macro expander.

	* cpphash.c (object_defn, funct_defn, push_macro_expansion,
	arg, arglist, argdata, reflist, collect_objlike_expansion,
	collect_funlike_expansion, collect_params,
	warn_trad_stringify, trad_stringify, duplicate_arg_p, add_pat,
	unsafe_chars, macarg, compare_defs, special_symbol,
	scan_arguments, stringify, funlike_macroexpand,
	_cpp_quote_string, monthnames): Delete.
	(cpp_lookup, _cpp_free_definition, dump_funlike_macro,
	_cpp_create_definition, _cpp_dump_definition,
	dump_hash_helper): Adjust.
	(find_param, count_params, parse_define, var_args_str,
	check_macro_redefinition, save_expansion): New.

	* cpplex.c (skip_block_comment, skip_line_comment, parse_name,
        parse_string, output_line_command, trigraph_replace,
        lex_line, cpp_push_buffer, cpp_pop_buffer, cpp_output_tokens,
        cpp_scan_buffer_nooutput, cpp_scan_buffer, cpp_free_toklist,
        cpp_idcmp, _cpp_get_directive_token, _cpp_init_input_buffer,
	_cpp_skip_rest_of_line): Modify.

        (maybe_macroexpand, skip_comment, copy_comment, skip_string,
	find_position, null_warning, bump_column, expand_name_space,
	pedantic_whitespace, _cpp_output_list, _cpp_slice_toklist,
	_cpp_squeeze_toklist, _cpp_scan_until, _cpp_skip_hspace,
	_cpp_parse_name, _cpp_lex_token, cpp_get_non_space_token,
	_cpp_prescan): Delete.

	(dump_param_spelling, process_directive, lex_next,
        is_macro_disabled, stringify_arg, expand_context_stack,
        output_token, make_string_token, alloc_number_token,
        special_symbol, duplicate_token, maybe_paste_with_next,
        can_paste, prevent_macro_expansion, restore_macro_expansion,
        get_temp_token, release_temp_tokens, quote_string,
        token_names, token_spellings, _cpp_expand_name_space,
        _cpp_glue_header_name, _cpp_reserve_name_space,
        digraph_spellings, trigraph_ok, skip_whitespace, save_comment,
        placemarker_token, eof_token, cpp_context, macro_args,
        get_raw_token, parse_arg, parse_args, save_token,
        push_arg_context, push_macro_context, pop_context,
        do_pop_context, free_macro_args, _cpp_get_line,
        _cpp_run_directive): New.

	* cpplib.c (validate_else, parse_include, push_conditional,
	pass_thru_directive, read_line_number, parse_ifdef,
	detect_if_not_defined, _cpp_check_directive, do_define,
	do_undef, do_include, do_import, do_include_next, do_error,
	do_warning, do_ident, do_pragma, pragma_dispatch, gcc_pragmas,
	top_pragmas, do_pragma_gcc, do_pragma_implementation,
	do_pragma_poison, do_pragma_system_header,
	do_pragma_dependency, do_sccs, do_ifdef, do_ifndef, do_else,
	dl_elif, do_endif, _cpp_unwind_if_stack, do_assert,
	do_unassert, cpp_define, cpp_undef, cpp_assert, cpp_unassert,
	cpp_defined): Update for new scheme.
	(strtoul_for_line, get_define_node, dump_macro_name,
	_cpp_check_linemarker, _cpp_parse_assertion): New.
	(_cpp_handle_directive, do_pragma_default): Delete.

	* cpphash.h (struct predicate): Now struct answer.
	(enum spell_type, struct token_spelling, struct directive,
	directive_handler): New.
	Update prototypes.  Remove unused macros.
	* cpplib.h: Update prototypes.  Remove unused macros,
	structure definitions, and fields.

	* cpperror.c (print_containing_files, v_message): Adjust.
	* cppexp.c (parse_assertion, lex, parse_escape,
	_cpp_parse_expr): Adjust.
	* cppfiles.c (open_include_file, _cpp_execute_include,
	_cpp_compare_file_date, cpp_read_file, read_include_file):
	Adjust.
	* cppinit.c (dump_special_to_buffer): Delete.
	(append_include_chain, merge_include_chains, cpp_reader_init,
	cpp_cleanup, initialize_builtins, builtin_array, cpp_start_read,
	cpp_finish, handle_option, print_help): Adjust.
	* cppmain.c (main): Adjust.

testsuite:
2000-07-03  Zack Weinberg  <zack@wolery.cumb.org>

	* testsuite/gcc.dg/cpp/19951025-1.c: Adjust regexps.
	* testsuite/gcc.dg/cpp/19990703-1.c: Likewise.
	* testsuite/gcc.dg/cpp/20000625-1.c: Likewise.
	* testsuite/gcc.dg/cpp/20000625-2.c: Likewise.

	* testsuite/gcc.dg/cpp/macro1.c,
	testsuite/gcc.dg/cpp/paste1.c, testsuite/gcc.dg/cpp/paste2.c,
	testsuite/gcc.dg/cpp/paste3.c, testsuite/gcc.dg/cpp/paste4.c,
	testsuite/gcc.dg/cpp/strify1.c,
	testsuite/gcc.dg/cpp/strify2.c: New tests.

From-SVN: r34859
2000-07-04 01:58:21 +00:00
Jakub Jelinek
fb753f88e9 cpplib.h (struct cpp_reader): New field include_depth.
* cpplib.h (struct cpp_reader): New field include_depth.
	(struct cpp_printer): Rename last_bsd to last_id.
	* cppfiles.c (read_include_file): Bump include_depth.
	* cpplex.c (cpp_pop_buffer): Decrement include_depth.
	(output_line_command): Output correct #line if a header
	is including itself and is not protected against multiple inclusion.
	Use include_depth instead of buffer_stack_depth, last_id instead of
	last_bsd.
	* cppinit.c (cpp_start_read): Initialize last_id instead of
	last_bsd.

From-SVN: r34831
2000-07-02 10:56:57 +02:00
Zack Weinberg
e605b0403e cppfiles.c (cpp_make_system_header): New function.
* cppfiles.c (cpp_make_system_header): New function.
	* cpplib.h: Prototype it.
	* cpplib.c (do_line, do_pragma_system_header): Use it.
	* fix-header.c (read_scan_file): Use it.

	* fix-header.c (check_macro_names): Cast second arg of
	cpp_defined to const unsigned char *.
	(read_scan_file): Make getchar_call const unsigned char.

From-SVN: r34641
2000-06-21 23:08:17 +00:00
Zack Weinberg
c31a6508ee cppfiles.c: Include splay-tree.h, not hashtab.h.
* cppfiles.c: Include splay-tree.h, not hashtab.h.
	(redundant_include_p, make_IHASH, hash_IHASH, eq_IHASH): Delete.
	(destroy_include_file_node): New.
	(_cpp_init_include_hash): Rename _cpp_init_include_table.
	Create a splay tree, not a hash table.
	(open_include_file): Look up the path in the include table,
	do the multiple include optimization here, etc.
	(cpp_included): Walk the path.
	(find_include_file): Just walk the path calling
	open_include_file, or call it directly for an absolute path.
	(_cpp_fake_ihash): Rename _cpp_fake_include and update for new
	scheme.
	(read_include_file): Update for new scheme.  Don't close the
	file unless reading fails.
	(_cpp_execute_include, cpp_read_file): Tweak for new scheme.

	* cpphash.h (struct ihash, NEVER_REINCLUDE): Delete.
	(struct include_file): New.
	(NEVER_REREAD, DO_NOT_REREAD, CPP_IN_SYSTEM_HEADER): New
	macros.
	(CPP_PEDANTIC, CPP_WTRADITIONAL): Update.
	Update prototypes.

	* cppinit.c: Include splay-tree.h.
	(cpp_reader_init, cpp_cleanup): Update.

	* cpplib.h (struct cpp_buffer): Change ihash field to
	'struct include_file *inc'.  Remove system_header_p.
	(struct cpp_reader): Change all_include_files to a
	struct splay_tree_s *.

	* cpplex.c: Update all references to cpp_buffer->ihash and/or
	cpp_buffer->system_header_p.
	(cpp_pop_buffer): Close file here, only if DO_NOT_REREAD.

From-SVN: r34636
2000-06-21 18:33:51 +00:00
Zack Weinberg
ea4a453b89 cpplib.h (cpp_reader): Remove if_stack.
* cpplib.h (cpp_reader): Remove if_stack.  Change
	potential_control_macro to a cpp_hashnode *.  Add skipping flag.
	* cpphash.h (struct ihash): Change control_macro to a
	cpp_hashnode * and shorten name to cmacro.
	Add NEVER_REINCLUDE constant.

	* cppfiles.c (redundant_include_p): Drop cpp_reader argument.
	Examine the cmacro node directly, no need to call cpp_defined.
	(_cpp_execute_include, read_include_file): Set cmacro to
	NEVER_REINCLUDE, not U"".
	* cpplex.c (cpp_push_buffer): Don't set new->if_stack.
	(cpp_get_token): If pfile->skipping is true, discard text and
	keep scanning until we hit a directive; don't expand macros.

	* cpplib.c (struct if_stack): Remove if_succeeded, add
	was_skipping. Change control_macro to a cpp_hashnode * and
	shorten name to cmacro.  Remove typedef IF_STACK.
	(parse_ifdef), detect_if_not_defined): Return a cpp_hashnode *.
	(conditional_skip, skip_if_group,
	consider_directive_while_skipping): Delete.
	(push_conditional): New.
	(_cpp_handle_directive): Don't process directives other than
	conditionals if we are skipping.

	(do_ifdef, do_ifndef, do_if, do_else, do_elif, do_endif):
	Update to new scheme.
	(validate_else): Skip rest of line here, unconditionally.
	(_cpp_unwind_if_stack): The stack is per-buffer.  Force
	pfile->skipping off.

	(all): Remove `scare quotes' from error messages.

	* gcc.dg/cpp-mi.c: Add another case, cpp-mix.h, where the
	guard macro is already defined when the header is first
	included.
	* gcc.dg/cpp-mix.h: New file.
	* gcc.dg/endif-label.c: Update patterns to match compiler.

	* g++.brendan/complex1.C: Declare abort.
	* g++.law/refs4.C: Remove XFAIL.
	* g++.oliva/expr2.C: Declare abort and exit.

From-SVN: r34253
2000-05-29 16:19:32 +00:00
Zack Weinberg
f8f769ea4e cppfiles.c: Read files in, using mmap if possible, then prescan them separately.
* cppfiles.c: Read files in, using mmap if possible, then
	prescan them separately.
	(read_file, read_with_read): New functions.
	* cpplex.c: Don't define UCHAR_MAX.
	(_cpp_read_and_prescan): Rename to _cpp_prescan.  Don't read
	the file here.

	* cppinit.c (handle_option): Automatically define __cplusplus,
	__OBJC__, __ASEEMBLER__, _LANGUAGE_FORTRAN here when we see
	the respective -lang switch.

	* cpphash.h (enum node_type, struct hashnode, _cpp_lookup
	prototype): Move to...
	* cpplib.h: ... here.  Rename struct hashnode to struct
	cpp_hashnode and give it a typedef.  Rename _cpp_lookup to
	cpp_lookup.  Add 'fe_value' slot, a union tree_node *.

From-SVN: r34228
2000-05-28 05:56:38 +00:00
Neil Booth
f624ffa71f cpplex.c (_cpp_lex_line): Merge vertical space.
* cpplex.c (_cpp_lex_line): Merge vertical space.  Flag
	first token of a line BOL.  Update EOF code for this.
	Remove illegal directive check - it appears in the (not
	yet committed) caller.
	* cpplib.h (BOL): New flag.

From-SVN: r34216
2000-05-28 01:03:16 +00:00
Neil Booth
ad265aa4d6 cpplex.c (_cpp_init_toklist): No comment space to initialise.
* cpplex.c (_cpp_init_toklist): No comment space to initialise.
	(_cpp_free_toklist): No comment space to free.
	(expand_comment_space): Remove.
        (save_comment_space): Place the comment in the current token and
        not in a separate comment space.
        (_cpp_lex_line): Save comments during plain code and #define
        directives only.
        * cpplib.h (struct _cpp_toklist): Remove comment space.

From-SVN: r34215
2000-05-27 23:27:36 +00:00
Zack Weinberg
15dad1d908 cppexp.c (parse_assertion): New.
* cppexp.c (parse_assertion): New.
	(lex): Call it for CPP_HASH.  Remove CPP_ASSERTION case.
	(_cpp_parse_expr): Remove case '#'.  Don't set
	parsing_if_directive.
	* cpphash.c (collect_objlike_expansion,
	collect_funlike_expansion, collect_params,
	_cpp_create_definition): The list no longer has a trailing
	VSPACE token.
	* cpphash.h (enum node_type): Add T_ASSERTION.
	(struct hashnode): Remove aschain, add pred.
	(struct predicate): New.
	Update prototypes.

	* cpplex.c (expand_token_space): Handle both offset and
	nonoffset lists.
	(init_token_list, _cpp_free_token_list, _cpp_parse_assertion): Delete.
	(_cpp_init_toklist, _cpp_clear_toklist, _cpp_free_toklist,
	_cpp_slice_toklist, _cpp_squeeze_toklist, _cpp_equiv_tokens,
	_cpp_equiv_toklists): New.
	(_cpp_scan_line): Rename to _cpp_scan_until; add ability to
	stop at any single-character token, not just newline.
	(_cpp_lex_token): Remove special cases for #define and #if.
	(cpp_get_token): Expect # as a separate token type.  Remove
	DIRECTIVE case.
	(_cpp_get_directive_token): Remove DIRECTIVE case.
	(_cpp_lex_line, _cpp_lex_file, _cpp_init_input_buffer): Update.

	* cpplib.c (_cpp_check_directive): Set dirno and
	SYNTAX_INCLUDE bit of flags, not dir_handler and dir_flags.
	(_cpp_handle_directive): Run # <number> through the same logic
	as normal directives.
	(do_define): Don't set parsing_define_directive.  Use
	_cpp_scan_until.  The list does not have a VSPACE at the end.
	(do_if): Save, clear, and restore only_seen_white around
	_cpp_parse_expr.
	(skip_if_group): s/CPP_DIRECTIVE/CPP_HASH/
	(do_assert, do_unassert): Rewrite.

	* cpplib.h (TTYPE_TABLE): Remove CPP_ASSERTION.
	(LIST_OFFSET): New flag.
	(struct cpp_toklist): Replace dir_handler and dir_flags with
	dirno and flags.
	(struct cpp_reader): Remove parsing_if_directive and
	parsing_define_directive.

From-SVN: r33984
2000-05-18 15:55:46 +00:00
Neil Booth
6ab3e7dde0 cppinit.c (cpp_reader_init): Initialise col_adjust and default tab stop size.
* cppinit.c (cpp_reader_init): Initialise col_adjust and
	default tab stop size.
	(no_num, OPT_ftabstop): New.
	(handle_option): Handle "ftabstop=" command-line option.
	(print_help): Document it.
	* cpplex.c (COLUMN): Remove.
	(handle_newline): Reset col_adjust.
	(skip_whitespace): Update col_adjust as tabs encountered.
	(_cpp_lex_line): Update to use col_adjust.  Call
	skip_whitespace for all whitespace.
	* cpplib.h (struct cpp_options): New member tabstop.
	(struct cpp_reader): New member col_adjust.
	(CPP_BUF_COL): Update.
	(CPP_BUF_COLUMN): New.
	* cpp.texi: Document "-ftabstop=" command line option.

From-SVN: r33982
2000-05-18 11:09:27 +00:00
Neil Booth
41e8b1d735 cpplex.c (parse_string2): Update comment.
* cpplex.c (parse_string2): Update comment.
	(cpp_lex_line): No special assertion treatment for '('.
	* cpplib.c (DIRECTIVE_TABLE): Remove SYNTAX_ASSERT.
	* cpplib.h (SYNTAX_ASSERT): Remove.

From-SVN: r33915
2000-05-15 22:44:22 +00:00
Neil Booth
f617b8e222 cpphash.c (trad_stringify, [...]): Make some pointers pointers to const.
* cpphash.c (trad_stringify, warn_trad_stringify,
	collect_params): Make some pointers pointers to const.
	* cpplex.c (auto_expand_name_space) Guaranteed to always
	expand by at least one character.
	(SPELL_CHAR, SPELL_NONE): Temporarily reverse order.
	(struct token_spelling): Use const U_CHAR * rather than PTR.
	(expand_name_space): Fix up token pointers if name space
	is moved when expanding.
	(INIT_NAME, cpp_scan_line, parse_name, parse_number,
	parse_string2, save_comment, spell_token, cpp_output_list):
	Update so the routines handle tokens with a direct pointer to
	their text, rather than an offset into the token's list's namebuf.
	(_cpp_lex_line): Rearrange for clarity.

	* cpplib.c (_cpp_check_directive): Similarly.
	(do_define): Make SYM a pointer to const.
	* cpplib.h (struct cpp_name): Replace offset with direct pointer.
	(CPP_INT, CPP_FLOAT): Spelling type should be SPELL_IDENT.
	(TOK_OFFSET): Delete.
	(TOK_NAME): Update.

From-SVN: r33901
2000-05-14 22:42:58 +00:00
Neil Booth
5d7ee2fa66 cpplex.c (spell_token): New function.
* cpplex.c (spell_token): New function.
	(spell_string, spell_comment, spell_name): fold into
	spell_token.
	(I, S): Add macros.
	(E, H): Remove macros.
	(save_comment): Save comment opening characters too.
	(_cpp_lex_file): Update to use spell_token.  Tidy up comment
	handling.
	* cpplib.h (I, S): Add macros.
	(E, H): Remove macros.
	(TTYPE_TABLE): Update entries for new speller.
	(SYNTAX_ASSERT): Remove.

From-SVN: r33817
2000-05-10 09:39:18 +00:00
Neil Booth
3fef5b2b99 cpplex.c (spell_token): New function.
* cpplex.c (spell_token): New function.
	  (TOKEN_LEN): Add 1 for whitespace.
	  (_cpp_lex_file): Update to use spell_token.
	* cpplib.h (E): Remove.
	(TTYPE_TABLE): Update CPP_VSPACE entry.

From-SVN: r33777
2000-05-08 22:22:49 +00:00
Zack Weinberg
1920de4701 cpplib.h: Add accessor macros for token lists.
* cpplib.h: Add accessor macros for token lists.
	* cpplib.c, cpphash.c, cpplex.c: Use them.

From-SVN: r33630
2000-05-03 15:35:47 +00:00
Zack Weinberg
c56c2073a6 cpplib.h (CPP_POP, [...]): Delete.
* cpplib.h (CPP_POP, parse_cleanup_t): Delete.
	(cpp_buffer): Remove cleanup, seen_eof, manual_pop members.

	* cppfiles.c (file_cleanup): Delete.
	* cpphash.c (macro_cleanup): Delete.
	(collect_objlike_expansion, collect_funlike_expansion,
	macarg, scan_arguments): Remove CPP_POP case.

	* cpplex.c (null_cleanup): Delete.
	(cpp_pop_buffer): Do the work that was done in the cleanups
	here.  Call _cpp_unwind_if_stack from here.
	(_cpp_expand_to_buffer, cpp_scan_buffer_nooutput,
	cpp_scan_buffer): Run until we see CPP_EOF and the top of
	stack is the buffer _below_ the one we stacked.
	(cpp_get_token): Always pop an exhausted buffer.  Return
	CPP_EOF unless it's a macro buffer.  Don't call _cpp_handle_eof.
	* cpplib.c (skip_if_group): Don't call cpp_get_token to
	increment the line number.
	(_cpp_handle_eof): Rename to _cpp_unwind_if_stack.

	* fix-header.c (read_scan_file) [parsing getchar()]: Run until
	we see CPP_EOF and the top of stack is the buffer _below_ the
	one we stacked.
	* scan-decls.c: Likewise.

From-SVN: r33611
2000-05-02 16:09:12 +00:00
Zack Weinberg
6d2c2047b5 cpplex.c (cpp_idcmp): New function.
* cpplex.c (cpp_idcmp): New function.
	* cpplib.h: Prototype it.
	* scan_decls.c (scan_decls): Use it to inspect token names.
	* fix-header.c (read_scan_file): Likewise.  Set system_header_p on
	the file being run through the preprocessor.
	(check_macro_names): Provide length of token to cpp_defined.

	* Makefile.in: Remove stale warning message.

From-SVN: r33552
2000-04-30 17:30:25 +00:00
Neil Booth
6777db6d4a cpplib.h: "~=" is not a single pp-token.
2000-04-26  Neil Booth  <NeilB@earthling.net>

	* cpplib.h: "~=" is not a single pp-token.
	* cpplex.c: Correct commentary.

From-SVN: r33463
2000-04-27 05:49:33 +00:00
Neil Booth
cfd5b8b852 cpplex.c (spell_other, spell_char): Remove.
* cpplex.c (spell_other, spell_char): Remove.
	(SPELL_CHAR): New.
	(token_spelling, trigraph_map): Use unsigned chars.
	(_cpp_lex_line): Tidy up the switch statement.
	* cpplib.h: Implement spell_char with spell_string.
	(C): New.

From-SVN: r33454
2000-04-27 00:58:50 +00:00
Zack Weinberg
c5a047348d [multiple changes]
2000-04-25  Zack Weinberg  <zack@wolery.cumb.org>

	* cpplib.h (struct cpp_buffer): Add 'mapped' flag; fix
	commentary.

2000-04-25  Neil Booth  <NeilB@earthling.net>

	Restore previous patch, plus the following fixes:

	* cpphash.c (_cpp_create_definition): Test PREV_WHITESPACE in
	flags, not CPP_OPEN_PAREN.
	* cpplex.c (expand_token_space, init_token_list,
	cpp_free_token_list): Put the dummy token at list->tokens[-1].
	(_cpp_lex_line, _cpp_lex_file): token list is 0-based.

From-SVN: r33419
2000-04-25 19:32:36 +00:00
Neil Booth
05183359da * Revert previous patch until build failure cause determined.
From-SVN: r33411
2000-04-25 11:57:57 +00:00
Neil Booth
9c603af2ac cpphash.c: replace HSPACE_BEFORE with PREV_WHITESPACE.
* cpphash.c: replace HSPACE_BEFORE with PREV_WHITESPACE.
	* cpphash.h (_cpp_check_directive): new.
	* cpplex.c (handle_newline, cpp_free_token_list,
	init_trigraph_map, trigraph_ok, trigraph_replace,
	backslash_start, skip_block_comment, skip_line_comment,
	skip_whitespace, parse_name, parse_number, parse_string,
	copy_comment, _cpp_lex_line, spell_char, spell_string,
	spell_comment, spell_name, spell_other, _cpp_lex_file,
	_cpp_output_list): new.
	(expand_name_space): take length argument.
	(init_token_list): add comment list initialisation.
	(cpp_scan_line): use auto_expand_name_space.  PREV_WHITESPACE
	instead of HSPACE_BEFORE.

	* cpplib.c (_cpp_check_directive): new
	* cpplib.h (cpp_name, PREV_WHITESPACE, PREV_COMMENT,
	DIGRAPH, UNSIGNED_INT, TOK_NAME): new.
	(HSPACE_BEFORE): delete.
	(TTYPE_TABLE): rearrange.
	(struct cpp_toklist): update.

From-SVN: r33390
2000-04-24 22:07:36 +00:00
Zack Weinberg
9e62c8114f cpphash.c (struct arg, [...]): Const-ify strings.
* cpphash.c (struct arg, struct arglist): Const-ify strings.
	(warn_trad_stringify, duplicate_arg_p): New helper functions.
	(collect_expansion): Rewrite to scan over a token list.
	Remove -traditional support.
	(collect_formal_parameters): Rename to collect_params; rewrite
	to scan over a token list.
	(_cpp_create_definition): Adjust to scan a token list.
	(_cpp_macroexpand): Remove -traditional support.
	(_cpp_compare_defs): Whitespace is now canonicalized.
	(comp_def_part): Delete function.

	* cpphash.h: Update prototypes.
	* cpplex.c (init_token_list): Don't set lineno if there is no
	buffer.
	(pedantic_whitespace): New function.
	(_cpp_scan_line): Mark tokens that had hspace before.  Don't
	consume a newline.  Use pedantic_whitespace.
	(_cpp_lex_token): Remove support for -traditional macros.
	(_cpp_get_define_token): Delete.
	(_cpp_get_directive_token): Do the real work here.  Use
	pedantic_whitespace.
	(_cpp_init_input_buffer): Initialize pfile->directbuf.

	* cpplib.c (get_macro_name): Delete.
	(do_define): Read the entire line into pfile->directbuf, then
	feed the token list to _cpp_create_definition.
	* cpplib.h (HSPACE_BEFORE): new define.
	(struct cpp_reader): Add a toklist member, "directbuf".

From-SVN: r33309
2000-04-21 17:18:50 +00:00
Zack Weinberg
1368ee700d cpplib.h (enum cpp_ttype): Add token types for all punctuators.
* cpplib.h (enum cpp_ttype): Add token types for all
	punctuators.  Distinguish pp-numbers from valid C numbers.
	Give some tokens better names.  Initialize from macro.
	(struct cpp_name, cpp_token, cpp_toklist): New data
	structures.
	Update prototypes.
	* cpplex.c (bump_column, expand_name_space,
	expand_token_space, init_token_list, cpp_output_list,
	_cpp_scan_line):  New functions.
	(output_line_command): Add third argument, new line number.
	* cpphash.h: Update prototypes.
	* cppexp.c, cpphash.c, cpplib.c, scan-decls.c: Update for new
	token names.

From-SVN: r33289
2000-04-20 19:33:11 +00:00
Zack Weinberg
86702e3134 cccp.c, [...]: Removed.
* cccp.c, cexp.y, cexp.c, cccp.1: Removed.

	* configure.in: Delete --disable-cpplib option and all
	references to cpp_main.
	* configure: Regenerate.
	* Makefile.in: Remove all references to CCCP, CCCP_OBJS,
	@cpp_main@, cccp.c, cexp.c, cexp.y, cexp.output, cexp.o,
	cccp.o, cccp, or cppmain.  Link cppmain.o straight to
	cpp$(exeext).  Add --no-headers to makeinfo command line when
	generating INSTALL.  Install and uninstall cpp.1 manpage, not
	cccp.1.
	* install.texi: Delete all references to cexp.y/cexp.c.
	Delete ancient instructions for compiling GCC on 3b1.
	* INSTALL: Regenerate.

	* cppfiles.c, cpplib.h, jump.c, protoize.c, c-lex.c,
	ch/decl.c, ch/lex.c, cp/lex.c, f/lex.c, mips/t-ecoff,
	mips/t-elf, mips/t-r3900: Remove references to cccp.c.
	* convex.h, fx80.h, m68k.h, pdp11.h, contrib/gcc_update,
	f/g77install.texi: Remove references to	cexp.c/cexp.y.
	* xm-linux.h, xm-os2.h, romp.h: Remove definition of BSTRING,
	which is no longer tested anywhere.

	* po/POTFILES.in: Remove cccp.c and cexp.c.  Comment out
	alpha/vms-tramp.asm.

From-SVN: r33238
2000-04-18 22:34:13 +00:00
Zack Weinberg
f2d5f0cca2 cpplex.c (cpp_output_tokens, [...]): New public interfaces.
* cpplex.c (cpp_output_tokens, cpp_scan_buffer_nooutput): New public
	interfaces.
	(safe_fwrite, output_line_command): New static functions.
	(cpp_expand_to_buffer): Now private to cpplib.
	(cpp_scan_buffer): Take a printer.

	* cpphash.h: Update prototypes.
	* cpplib.h: Update prototypes.
	(cpp_printer): New.
	(cpp_buffer): Remove last_nominal_fname.
	(cpp_reader): Remove lineno.

	* cppmain.c: Use a cpp_printer.
	* fix-header.c: No need to inhibit line commands.  Call
	cpp_start_read with no printer.

	* cpperror.c (cpp_notice_from_errno): Provide default name.
	* cppfiles.c (make_IHASH, _cpp_fake_ihash): New functions.
	(find_include_file, cpp_read_file): Use make_IHASH.
	(file_cleanup): Set control_macro and clear
	input_stack_listing_current here.
	(_cpp_execute_include): Don't output entering-file marker.
	* cpphash.c (special_symbol): Look for the line number in the
	buffer, not the reader.
	(_cpp_macroexpand): No need to disable line commands.
	(_cpp_dump_definition): No need to generate line commands.
	(dump_hash_helper): Remove excess newline from output.
	* cppinit.c (dump_special_to_buffer): No need to generate line
	commands.
	(cpp_printer_init): New.
	(cpp_start_read): Take a printer, and start it up if it's not
	NULL.  No need to generate line commands.
	(cpp_finish): Expect no buffers stacked at all.  Take a
	printer argument, and flush the output buffer if it's not
	NULL.
	* cpplex.c (_cpp_lex_token): Return EOF if there's no buffer.
	Don't put two hashes at the beginning of an assertion.
	(cpp_get_token): Don't increment pfile->lineno or emit line
	commands here.  Return EOF if there's no buffer when we get
	EOF.
	* cpplib.c (do_define, skip_if_group):
	No need to disable line commands.
	(_cpp_output_line_command): Delete function.
	(do_line): Don't emit line commands here, but set things up so
	they will be emitted if necessary.  Use _cpp_fake_ihash to
	make unique nominal_fnames if necessary.
	(do_elif, do_else, _cpp_handle_eof): Call cpp_error_with_line
	with 0 for column, not -1.
	(_cpp_handle_eof): Don't set the control macro here.  Don't
	clear input_stack_listing_current here.  Don't emit line
	commands.

From-SVN: r33159
2000-04-14 23:29:45 +00:00
Zack Weinberg
3a2b2c7a20 cppexp.c, [...]: Replace cpp_token with cpp_ttype everywhere.
* cppexp.c, cpphash.c, cpphash.h, cpplex.c, cpplib.c,
	cpplib.h, cppmain.c, fix-header.c, scan-decls.c: Replace
	cpp_token with cpp_ttype everywhere.
	* cpperror.c, cpphash.c, cpplex.c, cpplib.c, scan-decls.c:
	Replace cpp_buf_line_and_col with CPP_BUF_LINE and/or
	CPP_BUF_COL.  Line and column numbers are unsigned int, not
	long.
	* cpplex.c (cpp_buf_line_and_col): Delete.
	* cpplib.h (struct cpp_buffer, struct cpp_reader): Change
	'long lineno' to 'unsigned int lineno'.
	(CPP_BUF_LINE, CPP_BUF_COL): New macros.

From-SVN: r33076
2000-04-11 08:29:34 +00:00
Zack Weinberg
8c389f849a cpphash.c (timestamp): Delete.
* cpphash.c (timestamp): Delete.
	(del_HASHNODE): If type is T_MCONST, free value.cpval.
	(special_symbol): Remove unnecessary braces.  Remove
	T_VERSION.  Treat T_STDC like T_CONST unless
	STDC_0_IN_SYSTEM_HEADERS.  Render both __DATE__ and __TIME__
	when one is encountered, then convert them into T_MCONST
	nodes.
	* cppinit.c (builtin_array): version_string is T_MCONST.
	__STDC__ has a "1" in its cpval.  Don't have a terminator
	entry.  Clean up which entries are dumped.
	(initialize_builtins): Only __STDC__ gets the special
	-traditional treatment.  Count the length of builtin_array.
	Render version_string here.
	* cpphash.h: Remove T_VERSION.  Add T_MCONST.
	* cpplib.h (struct cpp_reader): Remove timebuf.

From-SVN: r33047
2000-04-10 03:27:21 +00:00
Zack Weinberg
ff2b53efb1 cpphash.c (CPP_IS_MACRO_BUFFER, [...]): Delete.
* cpphash.c (CPP_IS_MACRO_BUFFER, FORWARD, PEEKC): Delete.
	(macro_cleanup): No need to cast pbuf->macro.
	(collect_expansion): Use _cpp_get_define_token.  Goto done if
	it returns VSPACE.  Remove check for trailing space after
	CPP_COMMENT.
	(_cpp_create_definition): Don't diddle flags here.  Return
	directly on error.
	(unsafe_chars): Handle c1 being EOF.
	(push_macro_expansion): Use unsafe_chars for both accidental-paste
	checks.  Don't push the buffer till after we're done with
	them.
	* cpplex.c (PEEKBUF, GETBUF, FORWARDBUF): New.
	(PEEKN, FORWARD, GETC, PEEKC): Use them.
	(cpp_push_buffer): Don't set new->alimit.  Set new->mark
	appropriately.
	(_cpp_parse_assertion): Don't NUL terminate.
	(_cpp_lex_token): Fix -traditional macro handling.  Don't skip
	hspace before calling _cpp_parse_assertion.  Remove all sets
	of only_seen_white. Treat '\f' as hspace.  Don't do anything
	special with '\n' here.
	(maybe_macroexpand): Handle T_EMPTY hash entries without
	pushing a buffer at all.
	(cpp_get_token): Handle clearing only_seen_white here.  Handle
	incrementing the line number here.  Clear
	potential_control_macro as well as only_seen_white, if
	appropriate.
	(cpp_get_non_space_token): Don't eat CPP_POP tokens.
	(_cpp_get_define_token): New function, basically like
	_cpp_get_directive_token was but doesn't eat horizontal space.
	Don't do anything with only_seen_white here.
	(_cpp_get_directive_token): Just call _cpp_get_define_token
	repeatedly till it returns non-hspace.

	* cpplib.c (PEEKN, FORWARD, GETC, PEEKC): Delete.
	(conditional_skip, skip_if_group): Return int.
	(DIRECTIVE_TABLE): Change origin of all conditional directives
	to "COND".
	(TRAD_DIRECT_P): New macro.
	(_cpp_handle_directive): Use _cpp_get_directive_token.  Issue
	an error for a bogus directive, unless -lang-asm.  Use
	TRAD_DIRECT_P. Loop calling handler functions till one returns
	zero.
	(get_macro_name): Don't diddle flags here.
	(do_define): Diddle flags here.  Use _cpp_get_directive_token.
	Create T_EMPTY nodes for #define macro /* nothing */.
	(do_undef): Don't copy the name.  Use _cpp_get_directive_token.
	Use hp->name when calling pass_thru_directive.
	(do_if, do_else, do_elif, do_ifdef, do_ifndef, conditional_skip):
	Return the result of conditional_skip and/or skip_if_group.
	Don't call _cpp_output_line_command.
	(consider_directive_while_skipping): Use _cpp_get_directive_token.
	Issue -Wtraditional warnings as appropriate.  Don't complain
	about unrecognized directives.  If we are to stop skipping,
	return the number of the directive that ended the skip.
	(skip_if_group): Use _cpp_get_directive_token.  Turn off macro
	expansion and line commands while skipping.  Return the result
	of consider_directive_while_skipping, if nonzero.
	(do_endif): Just set potential_control_macro here.
	(validate_else): Use _cpp_get_directive_token.
	(do_assert, do_unassert): Don't save pointers into the
	token_buffer across calls to the lexer.  Use
	_cpp_get_directive_token.

	* cpplib.h (cpp_buffer): Remove alimit and colno.  Make mark a
	pointer, not an offset.  Replace 'data', which was a generic
	pointer, with 'macro', which points to a struct hashnode.
	(cpp_reader): Add 'potential_control_macro' pointer.
	* cpphash.h (T_UNUSED): Replace with T_EMPTY.
	(CPP_BUF_GET, CPP_FORWARD): Delete.
	(CPP_IN_COLUMN_1, ADJACENT_TO_MARK): New macros.
	(CPP_IS_MACRO_BUFFER, CPP_SET_BUF_MARK, CPP_GOTO_BUF_MARK,
	ACTIVE_MARK_P): Update.
	(_cpp_get_define_token): New internal function.
	* cppfiles.c (read_include_file): Don't set fp->alimit or fp->colno.

From-SVN: r32965
2000-04-06 07:56:14 +00:00
Zack Weinberg
07aa0b04f2 cpplib.c: Include symcat.h.
* cpplib.c: Include symcat.h.  Add 'origin' field to struct
	directive.  Add origin values to DIRECTIVE_TABLE.  Generate
	the strings and function names on the fly.  Take the #sccs
	entry out of the table if SCCS_DIRECTIVE is not defined.
	(_cpp_handle_directive): Decide if the # was at the beginning
	of the line here.  Issue -pedantic warnings for extended
	directives here.  Warn about K+R directives with the #
	indented, and C89/extended directives with the # not indented,
	here.
	(do_import, do_include_next, do_warning, do_ident, do_sccs,
	do_assert, do_unassert): Don't issue pedantic warning here.

	* cpphash.h: Add CPP_WTRADITIONAL macro.
	* cpplib.h (struct cpp_options): Rename warn_stringify to
	warn_traditional; update comments.
	* cppinit.c (handle_option): Set warn_traditional not
	warn_stringify.
	* cpphash.c: Replace CPP_OPTION (pfile, warn_stringify) with
	CPP_WTRADITIONAL (pfile).
	* cpplex.c (_cpp_lex_token): Don't decide if directives should
	be ignored in -traditional mode here.

	* cpplex.c: Copy ISTABLE macros from cppinit.c, and adapt them
	to initialize speccase[] and trigraph_map[].  Delete all
	references to pfile->input_speccase.  Always treat '?' as a
	special character.  Remove table-initialization code from
	_cpp_init_input_buffer.

	* cpplib.h (struct cpp_reader): Remove input_speccase field.
	* cppinit.c (cpp_cleanup): Don't free input_speccase.

From-SVN: r32860
2000-04-01 22:55:25 +00:00
Zack Weinberg
46d0749798 cpplex.c: Copy ISTABLE macros from cppinit.c...
* cpplex.c: Copy ISTABLE macros from cppinit.c, and adapt them
	to initialize speccase[] and trigraph_map[].  Delete all
	references to pfile->input_speccase.  Always treat '?' as a
	special character.  Remove table-initialization code from
	_cpp_init_input_buffer.

	* cpplib.h (struct cpp_reader): Remove input_speccase field.
	* cppinit.c (cpp_cleanup): Don't free input_speccase.

From-SVN: r32858
2000-04-01 22:02:31 +00:00
Zack Weinberg
ae79697b72 cpplib.h: Merge struct cpp_options into struct cpp_reader.
* cpplib.h: Merge struct cpp_options into struct cpp_reader.
	Reorder struct cpp_options and struct cpp_reader for better
	packing.  Replace CPP_OPTIONS macro with CPP_OPTION which
	takes two args.  Change all 'char' flags to 'unsigned char'.
	Move show_column flag into struct cpp_options.  Don't
	prototype cpp_options_init.
	* cpphash.h, cpperror.c, cppexp.c, cppfiles.c, cpphash.c,
	cppinit.c, cpplex.c, cpplib.c:
	Replace CPP_OPTIONS (pfile)->whatever with
	CPP_OPTION (pfile, whatever), and likewise for
	opts = CPP_OPTIONS (pfile); ... opts->whatever;

	* cppinit.c (merge_include_chains): Take a cpp_reader *.
	Extract CPP_OPTION (pfile, pending) and work with that
	directly.
	(cpp_options_init): Delete.
	(cpp_reader_init): Turn on on-by-default options here.
	Allocate the pending structure here.
	(cl_options, enum opt_code): Define these from the same table,
	kept in a large macro.  Add -fshow-column and -fno-show-column
	options.

	* cpperror.c (v_message): If show_column is off, don't print
	the column number.

	* cppmain.c: Update for new interface.
	* fix-header.c: Likewise.

From-SVN: r32850
2000-03-31 23:16:11 +00:00
Zack Weinberg
45b966db65 Makefile.in (LIBCPP_OBJS): Add cpplex.o.
* Makefile.in (LIBCPP_OBJS): Add cpplex.o.
	(cpplex.o): New target.
	* po/POTFILES.in: Add cpplex.c.

	* cpplex.c (_cpp_grow_token_buffer, null_cleanup,
	cpp_push_buffer, cpp_pop_buffer, cpp_scan_buffer,
	cpp_expand_to_buffer, cpp_buf_line_and_col, cpp_file_buffer,
	skip_block_comment, skip_line_comment, skip_comment,
	copy_comment, _cpp_skip_hspace, _cpp_skip_rest_of_line,
	_cpp_parse_name, skip_string, parse_string,
	_cpp_parse_assertion, cpp_get_token, cpp_get_non_space_token,
	_cpp_get_directive_token, find_position,
	_cpp_read_and_prescan, _cpp_init_input_buffer): Move here.
	(maybe_macroexpand, _cpp_lex_token): New functions.

	* cpplib.c (SKIP_WHITE_SPACE, eval_if_expr, parse_set_mark,
	parse_goto_mark): Delete.
	(_cpp_handle_eof): New function.
	(_cpp_handle_directive): Rename from handle_directive.
	(_cpp_output_line_command): Rename from output_line_command.
	(do_if, do_elif): Call _cpp_parse_expr directly.
	* cppfiles.c (_cpp_read_include_file): Don't call
	init_input_buffer here.
	* cpphash.c (quote_string): Move here, rename _cpp_quote_string.
	* cppexp.c (_cpp_parse_expr): Diddle parsing_if_directive
	here; pop the token_buffer and skip the rest of the line here.
	* cppinit.c (cpp_start_read): Call _cpp_init_input_buffer
	here.

	* cpphash.h (CPP_RESERVE, CPP_IS_MACRO_BUFFER, ACTIVE_MARK_P):
	Define here.
	(CPP_SET_BUF_MARK, CPP_GOTO_BUF_MARK, CPP_SET_MARK,
	CPP_GOTO_MARK): New macros.
	(_cpp_quote_string, _cpp_parse_name, _cpp_skip_rest_of_line,
	_cpp_skip_hspace, _cpp_parse_assertion, _cpp_lex_token,
	_cpp_read_and_prescan, _cpp_init_input_buffer,
	_cpp_grow_token_buffer, _cpp_get_directive_token,
	_cpp_handle_directive, _cpp_handle_eof,
	_cpp_output_line_command): Prototype them here.
	* cpplib.h (enum cpp_token): Add CPP_MACRO.
	(CPP_RESERVE, get_directive_token, cpp_grow_buffer,
	quote_string, output_line_command): Remove.

From-SVN: r32513
2000-03-13 22:01:08 +00:00
Zack Weinberg
d35364d13e Convert cpplib to use libiberty/hashtab.c.
* cpplib.h (struct cpp_reader): Make hashtab and
	all_include_files of type 'struct htab *'.  Delete HASHSIZE
	and ALL_INCLUDE_HASHSIZE macros.

	* cpphash.h: Update prototypes.
	(struct hashnode): Remove next, prev, and bucket_hdr members.
	Make length a size_t.  Add hash member.
	(struct ihash): Remove next member.  Add hash member.  Make
	name a flexible array member.

	* cppfiles.c: Include hashtab.h.
	(include_hash): Delete.
	(IHASHSIZE): New macro.
	(hash_IHASH, eq_IHASH, _cpp_init_include_hash): New functions.
	(cpp_included): Do the hash lookup here.
	(_cpp_find_include_file): Rewrite.
	(cpp_read_file): Put the "fake" hash entry into the hash
	table.  Honor the control_macro, if it turns out we've seen
	the file before.  Don't push the buffer here.
	(_cpp_read_include_file): Push the buffer here.
	(OMODES): New macro.  Use it whenever we call open(2).

	* cpphash.c: Include hashtab.h.
	(hash_HASHNODE, eq_HASHNODE, del_HASHNODE, dump_hash_helper,
	_cpp_init_macro_hash, _cpp_dump_macro_hash, _cpp_make_hashnode,
	_cpp_lookup_slot): New functions.
	(HASHSIZE): new macro.
	(hashf, _cpp_install, _cpp_delete_macro): Delete.
	(_cpp_lookup): Use hashtab.h routines.

	* cppinit.c: Include hashtab.h.
	(cpp_reader_init): Call _cpp_init_macro_hash and
	_cpp_init_include_hash.  Don't allocate hashtab directly.
	(cpp_cleanup): Just call htab_delete on pfile->hashtab and
	pfile->all_include_files.
	(initialize_builtins): Use _cpp_make_hashnode and
	htab_find_slot to add hash entries.
	(cpp_finish): Just call _cpp_dump_macro_hash.
	* cpplib.c: Include hashtab.h.
	(do_define): Use _cpp_lookup_slot and _cpp_make_hashnode to
	create hash entries.
	(do_pragma_poison, do_assert): Likewise.
	(do_include): Don't push the buffer here.  Don't increment
	system_include_depth unless _cpp_read_include_file succeeds.
	(do_undef, do_unassert): Use _cpp_lookup_slot and htab_clear_slot
	or htab_remove_elt.
	(do_pragma_implementation): Use alloca to create copy.

	* Makefile.in: Update dependencies.

From-SVN: r32497
2000-03-12 23:46:05 +00:00
Neil Booth
7ceb3598d8 cppfiles.c (file_cleanup, [...]): Replace bcopy(), index() etc calls.
* cppfiles.c (file_cleanup, _cpp_find_include_file,
	remap_filename, _cpp_read_include_file, actual_directory,
	hack_vms_include_specification): Replace bcopy(), index() etc
	calls.  Add casts to some allocations.  Make some variables
 	pointers to const [unsigned] char.
	* cpphash.c (_cpp_install, macro_cleanup, collect_expansion,
	collect_formal_parameters): Similarly.
	* cppinit.c (struct pending_option, append_include_chain,
	cpp_options_init, cpp_reader_init, initialize_standard_includes,
	cpp_start_read, new_pending_define, handle_option): Similarly.
	* cpplib.c (cpp_define, copy_comment, do_define, do_include,
	do_undef, do_error, do_warning, do_pragma, do_pragma_once,
	do_pragma_implementation, detect_if_not_defined,
	do_ifdef, skip_if_group, cpp_get_token, parse_string,
	do_assert, do_unassert): Similarly.
	* cpplib.h (cpp_buffer, cpp_options): Update types.  Update
	function prototypes.
	* mkdeps.c (deps_add_target, deps_add_dep): cast allocations.

From-SVN: r32477
2000-03-11 00:49:44 +00:00
Zack Weinberg
88ae23e71d Makefile.in (LIBCPP_DEPS): New macro.
* Makefile.in (LIBCPP_DEPS): New macro.
	(cpplib.o, cpphash.o, cpperror.o, cppexp.o, cppfiles.o): Use
	it to declare deps.
	* cpperror.c: Include cpphash.h.
	* cppexp.c: Include cpphash.h.  Remove MULTIBYTE_CHARS
	dingleberry.
	(lex): Don't use CPP_WARN_UNDEF.
	(_cpp_parse_expr): Return an int, the truth value.
	* cppfiles.c: Include cpphash.h.
	(_cpp_merge_include_chains): Move to cppinit.c and make static.
	* cppinit.c (include_defaults_array): Disentangle.
	(cpp_cleanup): Don't free the if stack here.
	(cpp_finish): Pop off all buffers, not just one.
	* cpplib.c (eval_if_expr): Return int.
	(do_xifdef): Rename do_ifdef.
	(handle_directive): Don't use CPP_PREPROCESSED.
	(cpp_get_token): Don't use CPP_C89.
	* fix-header.c: Don't use CPP_OPTIONS.

	* cpplib.h: Move U_CHAR, enum node_type, struct
	file_name_list, struct ihash, is_idchar, is_idstart,
	is_numchar, is_numstart, is_hspace, is_space, CPP_BUF_PEEK,
	CPP_BUF_GET, CPP_FORWARD, CPP_PUTS, CPP_PUTS_Q, CPP_PUTC,
	CPP_PUTC_Q, CPP_NUL_TERMINATE, CPP_NUL_TERMINATE_Q,
	CPP_BUMP_BUFFER_LINE, CPP_BUMP_LINE, CPP_PREV_BUFFER,
	CPP_PRINT_DEPS, CPP_TRADITIONAL, CPP_PEDANTIC, and prototypes
	of _cpp_simplify_pathname, _cpp_find_include_file,
	_cpp_read_include_file, and _cpp_parse_expr to cpphash.h.
	Move struct if_stack to cpplib.c.  Move struct cpp_pending to
	cppinit.c.
	Change all uses of U_CHAR to be unsigned char instead.
	Delete CPP_WARN_UNDEF, CPP_C89, and CPP_PREPROCESSED.

From-SVN: r32435
2000-03-08 23:35:19 +00:00
Zack Weinberg
38b24ee220 cpplib.h (parse_underflow_t, [...]): Delete.
* cpplib.h (parse_underflow_t, CPP_NULL_BUFFER): Delete.
	(struct cpp_buffer): Remove fname and underflow fields.
	(struct cpp_reader): Remove get_token field.
	(struct include_hash): Rename to struct ihash.  Add typedef to
	IHASH.
	(struct if_stack): Remove fname field.
	(IF_STACK_FRAME): Rename to IF_STACK.

	* cpperror.c (print_containing_files): Trust that there are no
	macro buffers below the top file buffer.
	* cppfiles.c: Replace all references to 'struct include_hash'
	with 'IHASH'.  Rename initialize_input_buffer to
	init_input_buffer.  Don't set or reference cpp_buffer->fname,
	use buffer->ihash->name instead.
	* cpphash.c (special_symbol): Use cpp_file_buffer.  Use NULL
	not CPP_NULL_BUFFER.
	* cppinit.c: Use NULL not CPP_NULL_BUFFER, IF_STACK not
	IF_STACK_FRAME, IHASH not struct include_hash.
	* cpplib.c: Rename eval_if_expression to eval_if_expr.  Remove
	null_underflow.  Use IF_STACK not IF_STACK_FRAME, IHASH not
	struct include_hash, NULL not CPP_NULL_BUFFER.  Remove all
	references to cpp_buffer->fname (delete entirely, or use
	->ihash->name instead) and IF_STACK->fname.
	(cpp_push_buffer): Don't set new->underflow.
	(do_include): Use cpp_file_buffer.

	* cpphash.c (collect_formal_parameters): Remove duplicate
	increment of argslen.  Pedwarn in C99 mode if __VA_ARGS__ is
	used as a macro argument name.  Don't append "..." to namebuf
	for varargs macros.  After we're done scanning, go through
	namebuf and make it NUL separated, not comma separated.
	(_cpp_compare_defs): Remove register tag from variables.
	Expect defn->argnames to be NUL separated.
	(_cpp_dump_definition): Expect defn->argnames to be NUL
	separated and in forward order.
	* cpphash.h: Update documentation of argnames field.

From-SVN: r32430
2000-03-08 20:37:23 +00:00
Zack Weinberg
e23c0ba36f [multiple changes]
2000-03-07  Neil Booth  <NeilB@earthling.net>

	* cppexp.c (struct operation, left_shift, right_shift,
	cpp_parse_expr): Change some "char"s to "U_CHAR"s, and some
	"int"s to "unsigned int"s.
	* cpplib.c (detect_if_not_defined, do_assert, do_unassert):
	Similarly.
	* cpplib.h: Update for above.
	* mkdeps.c (deps_init, deps_calc_target): Cast pointers
	returned from allocations.

	* cppinit.c (opt_comp, parse_options): New functions.
	(handle_option): Use parse_option to parse a single command
	line option, that possibly takes an argument.
	(cpp_handle_options): Sort the array of command line options on
	first invocation (non-ASCII hosts only).
	(print_help): Update.

2000-03-07  Zack Weinberg  <zack@wolery.cumb.org>

	* mkdeps.c (munge): Fix off-by-one bug and inconsistencies in
	backslash counting loops.  Problem noted by Matt Kraai <kraai@ghs.com>.

From-SVN: r32394
2000-03-07 23:11:06 +00:00
Zack Weinberg
b0699daddf cppfiles.c (_cpp_find_include_file): Make sure ih->name is initialized.
* cppfiles.c (_cpp_find_include_file): Make sure ih->name is
	initialized.
	* cppinit.c (cpp_cleanup): Free imp->nshort also.

	* cpperror.c (cpp_print_containing_files,
	cpp_print_file_and_line, v_cpp_message): Rename to
	print_containing_files, print_file_and_line, and v_message.
	* cppexp.c (cpp_parse_expr, cpp_parse_escape, cpp_lex): Rename
	to _cpp_parse_expr, parse_escape, and lex.
	(parse_charconst): Remove broken multibyte support.
	* cppfiles.c (include_hash): Make static.
	(cpp_included): New function.
	(merge_include_chains, find_include_file, finclude,
	simplify_pathname): Rename to _cpp_merge_include_chains,
	_cpp_find_include_file, _cpp_read_include_file, and
	_cpp_simplify_pathname.
	* cpphash.c (cpp_lookup, free_definition, delete_macro,
	cpp_install, create_definition, macroexpand, compare_defs,
	dump_definition): Rename to _cpp_lookup, _cpp_free_definition,
	_cpp_delete_macro, _cpp_install, _cpp_create_definition,
	_cpp_macroexpand, _cpp_compare_defs, and _cpp_dump_definition.
	* cppinit.c (cpp_handle_option): Rename to handle_option, make
	static.
	* cpplib.c: Remove extern prototype of cpp_parse_expr.

	* cpphash.h: Update prototypes.
	* cpplib.h: Likewise.  Prototype _cpp_parse_expr here.

From-SVN: r32390
2000-03-07 20:58:47 +00:00
Zack Weinberg
49e6c08e21 mkdeps.c, mkdeps.h: New files.
* mkdeps.c, mkdeps.h: New files.
	* po/POTFILES.in: Add them.
	* Makefile.in (LIBCPP_OBJS): Add mkdeps.o.
	(cpplib.o, cppinit.o): Depend on mkdeps.h.
	(mkdeps.o): New target.

	* cppfiles.c: Delete deps_output.
	* cppinit.c: Include mkdeps.h.  Delete known_suffixes,
	OBJECT_SUFFIX, and base_name.
	(cpp_cleanup): Use deps_free.  Free ihash->name when clearing
	the include hash.
	(initialize_dependency_output): Use deps_init,
	deps_add_target, deps_calc_target, and deps_add_dep.  Remove
	all the unnecessary string bashing.
	(cpp_finish): Use deps_write.  Remove an unnecessary nesting
	level.
	* cpplib.c (do_include): Use deps_add_dep.
	* cpplib.h (struct cpp_reader): Replace deps_buffer,
	deps_allocated_size, deps_size, deps_column members with
	single pointer to a struct deps.  Delete prototype of
	deps_output.

From-SVN: r32329
2000-03-04 19:42:04 +00:00
Zack Weinberg
455d25861f cpplib.h (_dollar_ok): New macro.
* cpplib.h (_dollar_ok): New macro.
	(is_idchar, is_idstart): Use it.
	(IStable): Rename to _cpp_IStable.  Declare it const if
	gcc >=2.7 or C99.  Delete all references to FAKE_CONST.
	(is_idchar, is_idstart, is_numchar, is_numstart, is_hspace,
	is_space): Update for renamed IStable.

	* cppinit.c: Delete all references to FAKE_CONST and CAT
	macros. Define init_IStable as empty macro if gcc >=2.7 or
	C99. Change TABLE() to ISTABLE and hardcode name of table.
	(cpp_start_read): Don't change the IStable based on
	dollars_in_ident.

	* cpphash.c (unsafe_chars): Add pfile argument.  All callers
	changed.  Handle '$' for char1 correctly.
	* cpplib.c (cpp_get_token): Use is_numchar when parsing numbers.

	* cppexp.c (tokentab2): Make const.
	(cpp_lex): Make toktab const.
	* cppinit.c (include_defaults_array): Make const.
	(initialize_standard_includes): Make default_include const.

From-SVN: r32321
2000-03-04 01:42:56 +00:00
Zack Weinberg
49634cde48 cppinit.c (cpp_handle_option): Set opts->pedantic directly.
* cppinit.c (cpp_handle_option): Set opts->pedantic directly.
	* cpplib.h: Delete SET_CPP_PEDANTIC.

From-SVN: r32318
2000-03-04 00:11:40 +00:00
Jason Merrill
83ecd27e96 cpplib.h (CPP_PEDANTIC): Only true if system_header_p is not set for the buffer.
* cpplib.h (CPP_PEDANTIC): Only true if system_header_p is not set
        for the buffer.
        (SET_CPP_PEDANTIC): New macro.
        * cpplib.c (do_include): Don't bother checking system_header_p.
        (do_warning, do_ident, do_assert, do_unassert): Likewise.

From-SVN: r32299
2000-03-02 19:09:22 -05:00
Zack Weinberg
c45da1ca92 cppfiles.c (cpp_read_file): New function.
* cppfiles.c (cpp_read_file): New function.

	* cpphash.c (collect_expansion): Make sure to reset last_token
	to NORM when we hit a string.  Handle trailing whitespace
	properly when the expansion is empty.
	(create_definition): Disable line commands while parsing the
	directive line.
	(dump_definition): If pfile->lineno == 0, output a line
	command ahead of the dump, and add a trailing newline.

	* cppinit.c (append_include_chain): Add fifth argument, which
	indicates whether or not system headers are C++ aware.
	(initialize_standard_includes): New function,
	broken out of read_and_prescan.  Pass 'cxx_aware' value from
	the include_defaults_array on to append_include_chain.
	(dump_special_to_buffer): Const-ify char array.
	(builtin_array): Don't dump __BASE_FILE__.
	(cpp_start_read): Use cpp_read_file.  Reorder code for
	clarity.  Don't output line commands here for -D/-A/-U
	switches.  Don't call deps_output for files included with
	-include or -imacros.

	* cpplib.c (do_define): Don't pay any attention to the second
	argument.
	(cpp_expand_to_buffer): Disable line commands while scanning.
	(output_line_command): Work in the file buffer.
	* cpplib.h: Remove no_record_file flag from struct cpp_reader.
	Fix formatting of comments.  Prototype cpp_read_file.

From-SVN: r32293
2000-03-02 20:14:32 +00:00
Zack Weinberg
ba412f14ad cpplib.h (CPP_ASSERTION, [...]): New token types.
* cpplib.h (CPP_ASSERTION, CPP_STRINGIZE, CPP_TOKPASTE): New
	token types.
	(struct cpp_reader): Add parsing_if_directive and
	parsing_define_directive flags.
	(struct cpp_options): Remove output_conditionals flag.
	(check_macro_name): Delete prototype.

	* cpphash.h (struct macrodef): Delete.
	(struct reflist): Separate from struct definition.
	(struct definition): Remove unused fields.  Add column number.
	(create_definition): Returns a DEFINITION *.  Takes a
	cpp_reader * and an int.

	* cpphash.c (SKIP_WHITE_SPACE): Delete.
	(PEEKC): Copy defn from cpplib.c.
	(rest_extension, REST_EXTENSION_LENGTH): Delete.
	(struct arg): New.
	(struct arglist): Simplify.
	(collect_expansion): Rewrite.  Get tokens by calling
	cpp_get_token.  Add more error checking.
	(collect_formal_parameters): New function, broken out of
	create_definition and reworked to use get_directive_token.
	(create_definition): All real work is now in collect_expansion
	and collect_formal_parameters.  do_define handles finding the
	macro name.  Return a DEFINITION, not a MACRODEF.
	(macroexpand): Replace bcopy with memcpy throughout.  Replace
	character-at-a-time copy loop with memcpy and pointer increments.
	(compare-defs): d1->argnames / d2->argnames might be null.

	* cpplib.c (copy_rest_of_line): Delete function.
	(skip_rest_of_line): Do all the work ourselves.
	(skip_string): New function.
	(parse_string): Use skip_string.
	(get_macro_name): New function.
	(check_macro_name): Delete.
	(copy_comment): Use CPP_RESERVE and CPP_PUTC_Q.
	(cpp_skip_hspace): Use CPP_BUMP_LINE.
	(handle_directive): ICE if we're called on a macro buffer.
	(do_define): Determine macro name and type (funlike/objlike)
	here.  Expunge all uses of MACRODEF.
	(cpp_push_buffer): Set line_base to NULL.
	(do_undef, read_line_number): Don't worry about getting a POP token.
	(eval_if_expression): Set/reset parsing_if_directive around
	cpp_parse_expr. Don't clear only_seen_white.
	(skip_if_group): Remove output_conditionals logic.  Use
	skip_rest_of_line.
	(cpp_get_token): Return ASSERTION, STRINGIZE, and TOKPASTE
	tokens under appropriate conditions.
	(cpp_unassert): Call do_unassert not do_assert.  Oops.

	* cppexp.c (parse_defined): New function, break out of
	cpp_lex.
	(cpp_lex): We now get CPP_ASSERTION tokens and can check them
	ourselves, with cpp_defined.
	* cppinit.c (cpp_handle_option, print_help): Delete -ifoutput.

	* gcc.dg/20000209-2.c: Turn off -pedantic-errors.
	* gcc.dg/strpaste-2.c: New.

From-SVN: r32274
2000-03-01 00:57:09 +00:00
Alexandre Oliva
656ac11039 cpplib.h (enum file_change_code): Added rename_file.
* cpplib.h (enum file_change_code): Added rename_file.
* cpplib.c (do_line): If a filename is given, set file_change to
rename_file.
(output_line_command): If file_change is rename_file, always
output a # directive with the file name.

From-SVN: r32215
2000-02-27 07:57:29 +00:00
Alexandre Oliva
525bc95d4a cpplib.h (enum cpp_token): Added CPP_WCHAR and CPP_WSTRING.
* cpplib.h (enum cpp_token): Added CPP_WCHAR and CPP_WSTRING.
* cpplib.c (cpp_get_token): Produce them.
* cppexp.c (cpp_lex): Handle them.

From-SVN: r32121
2000-02-23 19:21:07 +00:00
Zack Weinberg
cf4ed945ea cppexp.c: Don't include cpphash.h.
* cppexp.c: Don't include cpphash.h.
	(parse_charconst, cpp_lex): Use cpp_defined.
	(cpp_lex): Use get_directive_token throughout.  Remove
	unnecessary cases from switch.  Move assertion-handling code
	down to OTHER case.
	(cpp_parse_expr): If we see '+' or '-', check the context to
	determine if they are unary or binary operators.  Streamline
	the jumps a bit.  Do not call skip_rest_of_line.

	* cpplib.c: Make skip_rest_of_line and cpp_skip_hspace
	static.  Export get_directive_token.  Update commentary.
	(cpp_defined): New function.
	(do_define): Remove reference to T_PCSTRING.  Call
	free_definition to release memory for old definition, when
	redefining a macro.
	(eval_if_expression): Set only_seen_white to 0 before calling
	cpp_parse_expr.  Call skip_rest_of_line after it returns.
	(cpp_read_check_assertion): Don't preserve a pointer into the
	token buffer across a call to cpp_get_token.

	* Makefile.in (cppexp.o): Don't depend on cpphash.h.
	* cppfiles.c (redundant_include_p): Use cpp_defined.
	* cpphash.c (free_definition): New function.
	(delete_macro): Use it.  Update commentary.
	* cpphash.h: Typedef HASHNODE here.  Prototype cpp_lookup and
	free_definition.
	* cpplib.h: Don't typedef HASHNODE here. Delete T_PCSTRING
	from enum node_type.  Prototype cpp_defined and get_directive_token.
	Don't prototype cpp_lookup, skip_rest_of_line, or cpp_skip_hspace.

	* fix-header.c (check_macro_names): Use cpp_defined.
	(read_scan_file): Set inhibit_warnings and inhibit_errors in
	the options structure.

From-SVN: r31908
2000-02-10 23:47:04 +00:00