Commit Graph

210 Commits

Author SHA1 Message Date
Zack Weinberg
54925c2087 cpplib.c (handle_directive): Print non-NUL-terminated string with %.*s.
* cpplib.c (handle_directive): Print non-NUL-terminated string
	with %.*s.

From-SVN: r34514
2000-06-13 07:19:22 +00:00
Jakub Jelinek
5af7e2c2e1 cpplib.c (do_ifdef, do_ifndef): Don't segfault if parse_ifdef returned NULL.
2000-06-06  Jakub Jelinek  <jakub@redhat.com>

	* cpplib.c (do_ifdef, do_ifndef): Don't segfault if parse_ifdef
	returned NULL.

From-SVN: r34448
2000-06-07 22:27:57 +00:00
Zack Weinberg
d7a2e0f70b [multiple changes]
2000-06-01  Zack Weinberg  <zack@wolery.cumb.org>

	* cpplex.c (maybe_macroexpand): Use CPP_WTRADITIONAL.  Improve
	error message.
	* cpplib.c (parse_include): Remove support for VAX-C
	"#include starlet" misfeature.

	* gcc.dg/cpp-tradwarn2.c: Update egrep pattern.

2000-05-31 Laurynas Biveinis <lauras@softhome.net>

	* cppfiles.c: conditionally define O_BINARY.
	(open_include_file): pass O_BINARY to open().

From-SVN: r34344
2000-06-01 20:06:57 +00:00
Zack Weinberg
37dbf7aa9c cpplib.c (do_if): Don't save and restore only_seen_white here.
* cpplib.c (do_if): Don't save and restore only_seen_white here.
	* cppexp.c (_cpp_parse_expr): Save and restore only_seen_white
	and skipping here.

From-SVN: r34260
2000-05-30 02:40:48 +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
d1d9a6bd66 cppexp.c (parse_assertion): Supply extra argument to _cpp_init_toklist.
* cppexp.c (parse_assertion): Supply extra argument to
	_cpp_init_toklist.
	* cpplib.c (do_assert, do_unassert): Similarly.
	* cpphash.h (_cpp_init_toklist) Update.
	(_cpp_expand_token_space): New.
	(DUMMY_TOKEN, NO_DUMMY_TOKEN): New.
	* cpplex.c (_cpp_init_toklist): New argument.
	(parse_string2): New argument multiline_ok.
	(spell_token): Take a const cpp_token *.
	(INIT_NAME): Replace with INIT_TOKEN_NAME.  Update tokens_used.
	(SPELL_ macros): Replace with enum.
	(expand_token_space): Replace with _cpp_expand_token_space.
	Take COUNT argument.
	(IS_DIRECTIVE): Update.
	(_cpp_lex_line): Update token structure before parsing number.
	Don't assume start at beginning of token list.
	(save_comment): Use INIT_TOKEN_NAME.

From-SVN: r34214
2000-05-27 23:19:56 +00:00
Zack Weinberg
a58f64f5c2 cpplex.c (_cpp_scan_until): Clear AUX field of tokens.
* cpplex.c (_cpp_scan_until): Clear AUX field of tokens.
	* cpplib.c (do_unassert): Put the list to compare against on
	the stack.

From-SVN: r34025
2000-05-19 16:18:43 +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
Zack Weinberg
2c0b35cb89 cpplib.c: New feature, #pragma system_header.
* cpplib.c: New feature, #pragma system_header.
	* cpp.texi: Document special treatment of system headers, and
	the various mechanisms to get a header that special treatment.

From-SVN: r33962
2000-05-17 18:07:16 +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
Zack Weinberg
12cf91fef0 cpphash.h (U): New define, to correct type of string constants.
gcc:
	* cpphash.h (U): New define, to correct type of string constants.
	(ustrcmp, ustrncmp, ustrlen, uxstrdup, ustrchr): New wrapper
	routines, to do casts when passing unsigned strings to libc.
	* cppexp.c, cppfiles.c, cpphash.c, cppinit.c, cpplib.c: Use them.

	* cppfiles.c (_cpp_execute_include): Make filename an U_CHAR *.
	* cpphash.c (_cpp_quote_string): Make string an U_CHAR *.
	* cppinit.c (dump_special_to_buffer): Make macro name an U_CHAR *.
	* cpplex.c (parse_ifdef, parse_include, validate_else): Make
	second argument an U_CHAR *.

	* cppinit.c (builtin_array): Make name and value U_CHAR *, add
	length field, clean up initializer.
	(ISTABLE): Add __extension__ to designated-
	initializers version.
	* cpplex.c (CHARTAB): Likewise.

	* mbchar.c: Add dummy external declaration to the !MULTIBYTE_CHARS
	case so the file won't be empty.

include:
	* symcat.h: Remove #endif label.

From-SVN: r33657
2000-05-04 04:38:01 +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
a7abcbbf92 cpphash.c (_cpp_make_hashnode): Rename make_HASHNODE, now static.
* cpphash.c (_cpp_make_hashnode): Rename make_HASHNODE, now
	static.  Allocate the hashnode and its string in the same
	block of memory.
	(del_HASHNODE): Don't free h->name.
	(_cpp_lookup): If there is no entry for this string, create
	one, of type T_VOID.
	(_cpp_lookup_slot): Delete.
	* cpphash.h: Update prototypes.

	* cpplex.c (maybe_macroexpand): Check for hp->type == T_VOID,
	not hp == NULL.
	* cpplib.c (do_define, do_undef, do_pragma_poison, do_assert,
	do_unassert, cpp_defined): Use _cpp_lookup.  Don't create a
	node here, just fill in the value field properly.  "Delete"
	entries by setting the value field to T_VOID.  Check for
	hp->type == T_VOID, not hp == NULL.

	* Makefile.in (cpplib.o): Don't depend on $(HASHTAB_H).
	* cpperror.c, cppexp.c, cpplex.c, cpplib.c:  Don't include
	hashtab.h.

From-SVN: r33581
2000-05-01 18:20:10 +00:00
Zack Weinberg
638d694d84 cppfiles.c (redundant_include_p): Provide length of token to cpp_defined.
* cppfiles.c (redundant_include_p): Provide length of token to
	cpp_defined.
	* cpphash.c (_cpp_make_hashnode, _cpp_lookup_slot): Hash
	values are unsigned int.
	(_cpp_lookup, _cpp_lookup_slot): Do not calculate the length.
	(_cpp_lookup_slot): Do not calculate the hash, either.
	* cpphash.h: Update prototypes.
	* cpplib.c (do_define, do_undef, do_pragma_poison, do_assert):
	Hashes are unsigned int.  Calculate hash here, pass by value
	to _cpp_lookup_slot.

From-SVN: r33551
2000-04-30 17:11:25 +00:00
Zack Weinberg
d2158690ae cpphash.h (enum node_type): Take out T_MCONST.
* cpphash.h (enum node_type: Take out T_MCONST.
	(union hashval): Move into struct hashnode.
	(struct hashnode): Pack tighter.  Remove file, line, col
	members.
	* cpphash.c: Constify most of the macro-definition structures.
	(struct definition): Replace by struct object_defn
	and struct funct_defn.  Put file, line, column information
	here.  All users updated to match.
	(_cpp_create_definition, _cpp_macroexpand): Remove special
	case for #define WORD OTHERWORD.
	* cpplib.c (do_undef): Remove T_MCONST case.

From-SVN: r33538
2000-04-30 01:34:00 +00:00
Zack Weinberg
5cebbd8de3 cpphash.h: Move struct reflist, struct definition, and the DEFINITION typedef to cpphash.c.
* cpphash.h: Move struct reflist, struct definition, and the
	DEFINITION typedef to cpphash.c.  Use 'struct definition *' in
	union hashval.  _cpp_free_definition takes a HASHNODE pointer.
	* cpphash.c (_cpp_free_definition): Free data pointed to by
	MCONST, XCONST, MACRO, and FMACRO nodes properly.
	(_cpp_create_definition, del_HASHNODE): Just call
	_cpp_free_definition to clear out a hashnode.
	* cpplib.c (do_pragma_poison): Likewise.

From-SVN: r33536
2000-04-29 20:58:12 +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
d9e0bd53b2 cpphash.h (struct definition): Move file, line, col members...
* cpphash.h (struct definition): Move file, line, col members...
	(struct hashnode): ... here.  Also add 'disabled' flag.
	(enum node_type): Add T_VOID, T_XCONST, T_FMACRO, and
	T_IDENTITY.  Remove T_DISABLED.
	Update prototypes.

	* cpphash.c (_cpp_dump_definition): Split out dump_DEFINITION.
	(collect_expansion): Split into collect_objlike_expansion and
	collect_funlike_expansion.
	(_cpp_macroexpand): Split out scan_arguments, stringify, and
	funlike_macroexpand.
	(_cpp_compare_defs): Rename compare_defs, make static.
	(_cpp_make_hashnode): Initialize hp->disabled.
	(macro_cleanup): Adjust for new token types.  Clear
	m->disabled.
	(_cpp_create_definition): Move code here to determine what
	sort of macro it is, and code to check for redefinitions, from
	do_define.  Implement a few simple cases without creating a
	full DEFINITION.
	(_cpp_macroexpand, special_symbol, _cpp_dump_definition):
	Handle the simple cases.
	(push_macro_expansion): Set buf->has_escapes and hp->disabled
	here.

	* cppinit.c (builtin_array): Change MCONST to XCONST
	everywhere.
	* cpplex.c (maybe_macroexpand): Handle IDENTITY macros here;
	fix check for disabled and function-like macros.
	* cpplib.c (do_define): Move most logic to
	_cpp_create_definition.
	(do_undef): Handle new special token types.

From-SVN: r33355
2000-04-23 17:03:31 +00:00
Zack Weinberg
0f89df67fc cpphash.c (trad_stringify, add_pat): New functions.
* cpphash.c (trad_stringify, add_pat): New functions.
	(collect_expansion): Restore support for -traditional syntax.
	Use trad_stringify and add_pat.
	(_cpp_macroexpand): Restore support for -traditional semantics.
	* cpplex.c (_cpp_scan_line): Don't change space_before if we
	get a COMMENT token.
	(_cpp_lex_token): Provide COMMENT tokens to caller if
	traditional and parsing_define_directive.
	(skip_comment): Warn about // comments if -Wtraditional.
	* cpplib.c (do_define): Fix typo.  Create EMPTY nodes with
	proper node type.
	(do_undef): Don't warn about undefining EMPTY nodes.

From-SVN: r33350
2000-04-22 23:02:08 +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
6a832d4240 cpplib.c (do_pragma_poison): Strings in the token buffer are not nul-terminated.
* cpplib.c (do_pragma_poison):  Strings in the token buffer are
	not nul-terminated.

From-SVN: r33247
2000-04-19 05:37:03 +00:00
Richard Kenner
e38992e8d3 conflict.c (conflict_graph_add): Pass enum type to htab_find_slot.
* gcc/conflict.c (conflict_graph_add): Pass enum type to
	htab_find_slot.
	* gcc/cpperror.c (hashtab.h): Now include.
	* gcc/cppexp.c (hashtab.h): Likewise.
	* gcc/cpplex.c (hashtab.h): Likewise.
	* gcc/cppfiles.c (hashtab.h): Likewise.
	(find_include_file, _cpp_calc_hash, cpp_read_file): Pass enum type
	to htab_find_slot_with_hash.
	* gcc/cpphash.c (hashtab.h): Now include.
	(_cpp_lookup_slot): INSERT is now enum insert_option.
	* gcc/cpphash.h (_cpp_lookup_slot): Likewise.
	* gcc/cppinit.c (hashtab.h): Include earlier.
	(initialize_builtins): Pass enum to htab_find_slot.
	* gcc/cpplib.c (hashtab.h): Now include.
	(do_define, do_undef): Pass enum type to _cpp_lookup_slot.
	(do_pragma_poison, do_assert): Likewise.
	* gcc/emit-rtl.c (gen_rtx_CONST_INT): Pass enum to
	htab_find_slot_with_hash.
	* gcc/simplify-rtx.c (cselib_lookup_mem, cselib_lookup): Likewise.
	* gcc/tree.c (type_hash_add): Likewise.
	(build1): Minor cleanup.
	* include/hashtab.h (enum insert_option): New type.
	(htab_find_slot, htab_find_slot_with_hash): Use it.
	* libiberty/hashtab.c: Various minor cleanups.
	(htab_find_slot_with_hash): INSERT is now enum insert_option.
	(htab_find_slot): Likewise.

From-SVN: r33236
2000-04-18 16:42:00 -04:00
Zack Weinberg
9cc6e05fdf cppexp.c (lex): Don't assume tokens are NUL terminated.
* cppexp.c (lex): Don't assume tokens are NUL terminated.
	* cpplib.c (do_include, do_import, do_include_next,
	read_line_number, detect_if_not_defined): Likewise.
	* cpphash.c (collect_expansion): Likewise.
	(special_symbol, _cpp_macroexpand): Check return from
	cpp_file_buffer.
	* cpphash.h (CPP_NUL_TERMINATE, CPP_NUL_TERMINATE_Q): Delete
	macros.  Delete all uses.

	* gcc.dg/cpp-mi.c: Add two more test cases.
	* gcc.dg/cpp-mind.h, gcc.dg/cpp-mindp.h: New files.

From-SVN: r33223
2000-04-18 06:43:41 +00:00
Dave Pitts
5f6d382330 Makefile.in ($(srcdir)/c-parse.y: c-parse.in): Enclose the whole message in quotes.
* Makefile.in ($(srcdir)/c-parse.y: c-parse.in): Enclose the whole
        message in quotes. Otherwise, IBM's make program treats the '#' as the
        start of a comment and ignores the remainder of the line.

        * c-lex.c (yylex): Change for EBCDIC, lower case characters preceed
        upper case.
        * cccp.c (initialize_char_syntax): Allow for holes in EBCDIC.
        * cexp.y (initialize_random_junk): Likewise.
        * cppfiles.c (find_include_file): Cast alloca return value.
        * cppinit.c (initialize_standard_includes): Likewise.
        * cpplib.c (cpp_define, cpp_undef): Likewise.
        * defaults.h (ASM_OUTPUT_ASCII): Use ISPRINT.
        * final.c (output_asm_insn): Allow for holes in EBCDIC.
        * fold-const.c (CHARMASK): New.
        (real_hex_to_f): Use it.
        * real.c (CHARMASK): New.
        (etoasc, asctoeg): Use it.
        (asctoeg): EBCDIC lower case characters preceed upper case.

From-SVN: r33192
2000-04-16 17:54:25 -07:00
Neil Booth
d481b69b5e cpphash.h (SYNTAX_INCLUDE, [...]): new.
* cpphash.h (SYNTAX_INCLUDE, SYNTAX_ASSERT, directive_handler): new.
        * cpplib.c: Add new syntax flags to directive table, and
        supporting macros.

From-SVN: r33179
2000-04-16 02:10:34 +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
f787c583ae cpplib.c (do_elif): Skip the rest of the line if we're not going to bother evaluating it.
* cpplib.c (do_elif): Skip the rest of the line if we're
	not going to bother evaluating it.
	(skip_if_group): Clear pfile->only_seen_white.  Reorder loop
	to avoid pointless calls to the lexer.

	* gcc.dg/cpp-mi2.c: New test.
	* gcc.dg/cpp-mi2[abc].h: New files.

From-SVN: r33008
2000-04-07 21:09:51 +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
Philippe De Muyter
05ecd0e9ab cpphash.c (_cpp_free_definition): Test argnames, not nargs >= 0, before freeing argnames.
2000-04-04  Philippe De Muyter  <phdm@macqel.be>

	* cpphash.c (_cpp_free_definition): Test argnames, not nargs >= 0,
	before freeing argnames.
	* cpplib.c (do_ifndef): Cast return value of xstrdup.

From-SVN: r32924
2000-04-05 05:15:09 +00:00
Kaveh R. Ghazi
7c32404c2d cpplib.c (D): Adjust to call CONCAT2 macro without whitespace.
2000-04-04  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cpplib.c (D): Adjust to call CONCAT2 macro without whitespace.

From-SVN: r32910
2000-04-04 21:07:17 +00:00
Zack Weinberg
bfab56e7ab cppinit.c (cpp_start_read): Turn off -Wtraditional if processing C++.
* cppinit.c (cpp_start_read): Turn off -Wtraditional if
	processing C++.
	* cpplib.c (_cpp_handle_directive): Improve warnings for
	traditional C and indented directives.

	* enquire.c, gsyslimits.h, limity.h, config/convex/fixinc.convex,
	fixinc/fixinc.irix, fixinc/fixinc.sco, fixinc/fixinc.wrap,
	fixinc/inclhack.def: Indent the # of #include_next one space.
	* cp/rtti.c: Un-indent #if and #endif.

	* cppexp.c (_cpp_parse_expr): If lex returns '#', it's a
	syntax error, but an error has already been printed.
	* cpplex.c (_cpp_parse_assertion): Give a more specific error
	message when called with nothing remaining on the line.
	(_cpp_lex_token): If _cpp_parse_assertion fails, return an
	OTHER token, not an ASSERTION.
	* cpplib.c (do_assert): When we create a 'base' node, clear
	its aschain pointer.

	* gcc.c-torture/compile/981211-1.c: Move to...
	* gcc.dg/cpp-as1.c: ...here.
	* gcc.dg/cpp-as2.c: New file.

	* gcc.dg/cpp-tradwarn1.c: Change warning regexps to match the
	compiler.

From-SVN: r32870
2000-04-02 22:50:55 +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
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
29a72a4f09 cppfiles.c (hash_IHASH): Just return i->hash.
2000-03-28  Zack Weinberg  <zack@wolery.cumb.org>

	* cppfiles.c (hash_IHASH): Just return i->hash.
	(cpp_included): Set dummy.hash using _cpp_calc_hash.  Use
	htab_find_with_hash.
	(cpp_read_file): Likewise.
	(find_include_file): Likewise.  Properly initialize
	ih->nshort.  Share ih->name and ih->nshort if possible.
	* cpphash.c (_cpp_calc_hash): New function.
	(hash_HASHNODE): Just return h->hash.
	(_cpp_lookup): Set dummy.hash using _cpp_calc_hash.  Use
	htab_find_with_hash.
	* cpphash.h: Prototype _cpp_calc_hash.
	* cppinit.c (initialize_builtins): Provide a valid hash
	to _cpp_make_hashnode, using _cpp_calc_hash.

	* cpphash.c (collect_expansion): # is not a special character
	in object-like macros.  In -traditional mode, /**/ is not
	token paste at the beginning or end of the line.
	* cpplib.c (do_include, do_import, do_include_next): If
	parse_include fails, return immediately.

From-SVN: r32792
2000-03-28 21:45:02 +00:00
Zack Weinberg
168d3732aa cppfiles.c: Include mkdeps.h.
* cppfiles.c: Include mkdeps.h.
	(find_include_file, read_include_file): Remove _cpp_ prefix
	from name, make static.
	(_cpp_execute_include): New function, broken out of
	do_include.

	* cpplib.c: Don't include mkdeps.h.
	(struct directive): Remove type field. Reorder entries.  The
	function takes only one argument.
	(struct if_stack): Make type field an int.
	(directive_table): Rename to dtable.  Generate it, the
	prototypes of the directive handlers, and the enum for the
	directive numbers, from a template macro.
	(do_ifndef, do_include_next, do_import): New functions.
	(do_define, do_include, do_endif, do_ifdef, do_if, do_else,
	do_undef, do_line, do_elif, do_error, do_pragma, do_warning,
	do_ident, do_assert, do_unassert, do_sccs): Take only one
	argument.
	(do_sccs): Define always, but alter behavior based on
	SCCS_DIRECTIVE.
	(_cpp_handle_directive, consider_directive_while_skipping):
	Restructure for new directive table layout.

	(pass_thru_directive): Take a directive number, not a pointer
	to a struct directive.
	(parse_include): New function, broken out of do_include.
	(do_include, do_import, do_include_next): Use parse_include
	and _cpp_execute_include.
	(do_elif, do_else): Test for T_ELSE specifically when checking
	for #elif/#else after #else.
	(parse_ifdef): New function, broken out of do_ifdef.
	(validate_else): Expect a name arg without a leading #.
	(if_directive_name): Delete.
	(cpp_define, cpp_assert, cpp_undef, cpp_unassert): Call
	directive handlers with only one argument.

	* cpphash.h: Update prototypes.
	(enum node_type): Remove entries for directives.
	* Makefile.in: Update dependencies.

From-SVN: r32519
2000-03-14 06:34: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
0e091b520e cpplib.c (do_pragma_implementation): Fix off-by-one error truncating a string.
* cpplib.c (do_pragma_implementation): Fix off-by-one error
	truncating a string.  Don't assume tokens are nul terminated.
	Problem noted by Andreas Jaeger <aj@suse.de>

From-SVN: r32507
2000-03-13 17:25:36 +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