aboutsummaryrefslogtreecommitdiff
path: root/gcc/cpplib.c
AgeCommit message (Collapse)AuthorFilesLines
2000-07-08cpplib.h (struct cpp_name): Now struct cpp_string.Zack Weinberg1-62/+64
* cpplib.h (struct cpp_name): Now struct cpp_string. (CPP_INT, CPP_FLOAT, CPP_NUMBER, CPP_COMMENT, CPP_HEADER_NAME): Change to type S. (struct cpp_token): Rename 'name' field to 'str'. Add 'node' field, a cpp_hashnode *. All references to val.name updated to use val.str or val.node as appropriate. (struct cpp_reader): Add spec_nodes field. (cpp_idcmp): Now cpp_ideq; takes a token * and a char *. * cpphash.h (struct spec_nodes): New. (enum spell_type): Reorder. Only SPELL_STRING tokens use val.str. All references to 'spelling > SPELL_NONE' updated to match. (CPP_IN_SYSTEM_HEADER): Check pfile->buffer and pfile->buffer->inc are not NULL before dereferencing them. * cpplex.c (parse_name): Take a pointer to the current token, plus current position and limit as args; return the new position; don't copy the text of a name into the string buffer, instead call cpp_lookup and store the node pointer. If extending a token, copy out the text of the old into a scratch buffer, append the new, look that up and store the new node pointer. Inline. (maybe_paste_with_next): If the result of paste is a NAME, then look up the pasted text and store its node pointer. (lex_line): Adjust for new parse_name interface. Check for L"str", L'str' using spec_nodes->n_L. (spell_token): SPELL_IDENT tokens have their spelling in val.node->name. Handle SPELL_STRING tokens that don't have string delimiters. (_cpp_expand_name_space, (can_paste): Check for L ## "str" using spec_nodes->n_L. (cpp_get_token, special_symbol): No need to call cpp_lookup. (cpp_idcmp): Now cpp_ideq; take a token * and a const char *; return 1=equal 0=not, not a tristate. * cpphash.c (var_args_str): Delete. (find_param): Compare node fields directly. (is__va_args__): Use CPP_PEDANTIC. Just compare token->val.node with spec_nodes->n__VA_ARGS__. (dump_funlike_macro): Don't use var_args_str. * cpplib.c (_cpp_check_directive): Just walk through spec_nodes->dirs comparing pointers. (get_define_node, do_pragma_poison, detect_if_not_defined, parse_ifdef): The identifier has already been looked up. (do_ifdef, do_ifndef): parse_ifdef won't return a poisoned node. (do_if): Only call detect_if_not_defined at beginning of file. (_cpp_parse_assertion): Only copy string pointers for SPELL_STRING tokens. (pragma_dispatch): Take a node pointer and examine its name field. (_cpp_init_stacks): Also initialize the spec_nodes structure. * cppinit.c (cpp_reader_init): Call _cpp_init_stacks after _cpp_init_macros. (cpp_cleanup): Free pfile->spec_nodes. Call _cpp_cleanup_* in reverse order from the corresponding _cpp_init_* routines. * cppexp.c (parse_number, parse_charconst, parse_defined, lex): Check val.node->type instead of calling cpp_defined. Use spec_nodes entries where appropriate. * fix-header.c, scan-decls.c: Update for interface changes. From-SVN: r34926
2000-07-08cppexp.c: Update all code for new lexer interface.Zack Weinberg1-2/+2
* cppexp.c: Update all code for new lexer interface. (op_t, operator codes, struct token, tokentab2, op_to_str): Remove. (struct suffix, vsuf_1, vsuf_2, vsuf_3, op_to_prio): New. * cpplex.c (token_names): Trim leading CPP_ from names; make the strings unsigned. (_cpp_spell_operator): New. (is_macro_disabled): Disable all macros if rescanning preprocessed text. (_cpp_get_directive_token): Remove. * cppinit.c: Don't set no_macro_expand. * cpplib.c (read_line_number, do_line): Check only for EOF, not VSPACE. * cpphash.h: Update prototypes. * cpplib.h (CPP_VSPACE): Remove. (struct cpp_reader): Remove no_macro_expand. testsuite: * gcc.dg/cpp/19951227-1.c, gcc.dg/cpp/assert2.c, gcc.dg/cpp/if-1.c, gcc.dg/cpp/if-4.c: Tweak error regexps. From-SVN: r34920
2000-07-06cpplib.c: (_cpp_parse_assertion): Perform hash lookups based on full length ↵Neil Booth1-1/+1
of predicate. * cpplib.c: (_cpp_parse_assertion): Perform hash lookups based on full length of predicate. From-SVN: r34885
2000-07-05* cpplib.c (_cpp_parse_assertion): Fix buffer overrun.Zack Weinberg1-2/+2
From-SVN: r34872
2000-07-05cpplex.c: Don't include sys/mman.h.Zack Weinberg1-17/+115
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-04top level:Zack Weinberg1-884/+677
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-06-30cpp.texi: Document #pragma GCC dependencyNathan Sidwell1-7/+47
* cpp.texi: Document #pragma GCC dependency * cppfiles.c (open_include_file): Set date to unknown. (_cpp_compare_file_date): New function. (read_include_file): Set file date. * cpphash.h (struct include_file): Add date member. (_cpp_compare_file_date): Prototype. * cpplib.c (parse_include): Add trail parameter. Adjust. (do_include): Adjust parse_include call. (do_import): Likewise. (do_include_next): Likewise. (gcc_pragmas): Add dependency pragma. (do_pragma_dependancy): New pragma. From-SVN: r34808
2000-06-23cpplib.c (struct pragma_entry): New structure.Nathan Sidwell1-12/+63
* cpplib.c (struct pragma_entry): New structure. (pragma_dispatch): Pragma dispatcher. (top_pragmas, gcc_pragmas): New static variables. (do_pragma): Use pragma_dispatch. (do_pragma_gcc): New pragma handler. * cpp.texi: Update. From-SVN: r34663
2000-06-21cppfiles.c (cpp_make_system_header): New function.Zack Weinberg1-5/+5
* 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-21cppfiles.c: Include splay-tree.h, not hashtab.h.Zack Weinberg1-14/+14
* 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-13cpplib.c (handle_directive): Print non-NUL-terminated string with %.*s.Zack Weinberg1-1/+2
* cpplib.c (handle_directive): Print non-NUL-terminated string with %.*s. From-SVN: r34514
2000-06-07cpplib.c (do_ifdef, do_ifndef): Don't segfault if parse_ifdef returned NULL.Jakub Jelinek1-9/+14
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-01[multiple changes]Zack Weinberg1-21/+1
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-05-30cpplib.c (do_if): Don't save and restore only_seen_white here.Zack Weinberg1-4/+0
* 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-29cpplib.h (cpp_reader): Remove if_stack.Zack Weinberg1-328/+173
* 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-28cppfiles.c: Read files in, using mmap if possible, then prescan them separately.Zack Weinberg1-11/+11
* 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-27cppexp.c (parse_assertion): Supply extra argument to _cpp_init_toklist.Neil Booth1-2/+2
* 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-19cpplex.c (_cpp_scan_until): Clear AUX field of tokens.Zack Weinberg1-11/+9
* 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-18cppexp.c (parse_assertion): New.Zack Weinberg1-93/+152
* 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-17cpplib.c: New feature, #pragma system_header.Zack Weinberg1-0/+22
* 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-15cpplex.c (parse_string2): Update comment.Neil Booth1-2/+2
* 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-14cpphash.c (trad_stringify, [...]): Make some pointers pointers to const.Neil Booth1-2/+2
* 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-04cpphash.h (U): New define, to correct type of string constants.Zack Weinberg1-34/+36
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-03cpplib.h: Add accessor macros for token lists.Zack Weinberg1-5/+5
* cpplib.h: Add accessor macros for token lists. * cpplib.c, cpphash.c, cpplex.c: Use them. From-SVN: r33630
2000-05-02cpplib.h (CPP_POP, [...]): Delete.Zack Weinberg1-13/+18
* 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-01cpphash.c (_cpp_make_hashnode): Rename make_HASHNODE, now static.Zack Weinberg1-94/+63
* 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-04-30cppfiles.c (redundant_include_p): Provide length of token to cpp_defined.Zack Weinberg1-8/+14
* 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-30cpphash.h (enum node_type): Take out T_MCONST.Zack Weinberg1-1/+0
* 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-29cpphash.h: Move struct reflist, struct definition, and the DEFINITION ↵Zack Weinberg1-3/+1
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-25[multiple changes]Zack Weinberg1-0/+23
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* Revert previous patch until build failure cause determined.Neil Booth1-23/+0
From-SVN: r33411
2000-04-24cpphash.c: replace HSPACE_BEFORE with PREV_WHITESPACE.Neil Booth1-0/+23
* 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-23cpphash.h (struct definition): Move file, line, col members...Zack Weinberg1-77/+13
* 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-22cpphash.c (trad_stringify, add_pat): New functions.Zack Weinberg1-3/+4
* 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-21cpphash.c (struct arg, [...]): Const-ify strings.Zack Weinberg1-57/+39
* 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-20cpplib.h (enum cpp_ttype): Add token types for all punctuators.Zack Weinberg1-3/+5
* 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-19cpplib.c (do_pragma_poison): Strings in the token buffer are not nul-terminated.Zack Weinberg1-2/+2
* cpplib.c (do_pragma_poison): Strings in the token buffer are not nul-terminated. From-SVN: r33247
2000-04-18conflict.c (conflict_graph_add): Pass enum type to htab_find_slot.Richard Kenner1-5/+6
* 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-18cppexp.c (lex): Don't assume tokens are NUL terminated.Zack Weinberg1-64/+67
* 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-16Makefile.in ($(srcdir)/c-parse.y: c-parse.in): Enclose the whole message in ↵Dave Pitts1-3/+3
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-16cpphash.h (SYNTAX_INCLUDE, [...]): new.Neil Booth1-35/+40
* 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-14cpplex.c (cpp_output_tokens, [...]): New public interfaces.Zack Weinberg1-133/+13
* 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-11cppexp.c, [...]: Replace cpp_token with cpp_ttype everywhere.Zack Weinberg1-15/+15
* 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-07cpplib.c (do_elif): Skip the rest of the line if we're not going to bother ↵Zack Weinberg1-11/+17
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-06cpphash.c (CPP_IS_MACRO_BUFFER, [...]): Delete.Zack Weinberg1-273/+312
* 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-05cpphash.c (_cpp_free_definition): Test argnames, not nargs >= 0, before ↵Philippe De Muyter1-1/+1
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-04cpplib.c (D): Adjust to call CONCAT2 macro without whitespace.Kaveh R. Ghazi1-2/+4
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-02cppinit.c (cpp_start_read): Turn off -Wtraditional if processing C++.Zack Weinberg1-3/+6
* 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-01cpplib.c: Include symcat.h.Zack Weinberg1-54/+64
* 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-03-31cpplib.h: Merge struct cpp_options into struct cpp_reader.Zack Weinberg1-22/+22
* 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