summaryrefslogtreecommitdiff
path: root/gcc/cpplib.h
Commit message (Collapse)AuthorAgeFilesLines
* * cpplib.h (cpp_reader): Remove if_stack. Changezack2000-05-291-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34253 138bc75d-0d04-0410-961f-82ee72b054a4
* * cppfiles.c: Read files in, using mmap if possible, thenzack2000-05-281-1/+59
| | | | | | | | | | | | | | | | | | | | | 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 *. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34228 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplex.c (_cpp_lex_line): Merge vertical space. Flagneil2000-05-281-3/+4
| | | | | | | | | | first token of a line BOL. Update EOF code for this. Remove illegal directive check - it appears in the (not yet committed) caller. * cpplib.h (BOL): New flag. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34216 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplex.c (_cpp_init_toklist): No comment space to initialise.neil2000-05-271-5/+0
| | | | | | | | | | | | | (_cpp_free_toklist): No comment space to free. (expand_comment_space): Remove. (save_comment_space): Place the comment in the current token and not in a separate comment space. (_cpp_lex_line): Save comments during plain code and #define directives only. * cpplib.h (struct _cpp_toklist): Remove comment space. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34215 138bc75d-0d04-0410-961f-82ee72b054a4
* * cppexp.c (parse_assertion): New.zack2000-05-181-13/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33984 138bc75d-0d04-0410-961f-82ee72b054a4
* * cppinit.c (cpp_reader_init): Initialise col_adjust andneil2000-05-181-1/+8
| | | | | | | | | | | | | | | | | | | | default tab stop size. (no_num, OPT_ftabstop): New. (handle_option): Handle "ftabstop=" command-line option. (print_help): Document it. * cpplex.c (COLUMN): Remove. (handle_newline): Reset col_adjust. (skip_whitespace): Update col_adjust as tabs encountered. (_cpp_lex_line): Update to use col_adjust. Call skip_whitespace for all whitespace. * cpplib.h (struct cpp_options): New member tabstop. (struct cpp_reader): New member col_adjust. (CPP_BUF_COL): Update. (CPP_BUF_COLUMN): New. * cpp.texi: Document "-ftabstop=" command line option. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33982 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplex.c (parse_string2): Update comment.neil2000-05-151-1/+0
| | | | | | | | | (cpp_lex_line): No special assertion treatment for '('. * cpplib.c (DIRECTIVE_TABLE): Remove SYNTAX_ASSERT. * cpplib.h (SYNTAX_ASSERT): Remove. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33915 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpphash.c (trad_stringify, warn_trad_stringify,neil2000-05-141-5/+4
| | | | | | | | | | | | | | | | | | | | | | | | | 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33901 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplex.c (spell_token): New function.neil2000-05-101-23/+22
| | | | | | | | | | | | | | | | | (spell_string, spell_comment, spell_name): fold into spell_token. (I, S): Add macros. (E, H): Remove macros. (save_comment): Save comment opening characters too. (_cpp_lex_file): Update to use spell_token. Tidy up comment handling. * cpplib.h (I, S): Add macros. (E, H): Remove macros. (TTYPE_TABLE): Update entries for new speller. (SYNTAX_ASSERT): Remove. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33817 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplex.c (spell_token): New function.neil2000-05-081-3/+1
| | | | | | | | | | (TOKEN_LEN): Add 1 for whitespace. (_cpp_lex_file): Update to use spell_token. * cpplib.h (E): Remove. (TTYPE_TABLE): Update CPP_VSPACE entry. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33777 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplib.h: Add accessor macros for token lists.zack2000-05-031-9/+16
| | | | | | | * cpplib.c, cpphash.c, cpplex.c: Use them. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33630 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplib.h (CPP_POP, parse_cleanup_t): Delete.zack2000-05-021-12/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | (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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33611 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplex.c (cpp_idcmp): New function.zack2000-04-301-2/+2
| | | | | | | | | | | | | * cpplib.h: Prototype it. * scan_decls.c (scan_decls): Use it to inspect token names. * fix-header.c (read_scan_file): Likewise. Set system_header_p on the file being run through the preprocessor. (check_macro_names): Provide length of token to cpp_defined. * Makefile.in: Remove stale warning message. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33552 138bc75d-0d04-0410-961f-82ee72b054a4
* 2000-04-26 Neil Booth <NeilB@earthling.net>zack2000-04-271-2/+1
| | | | | | | | * cpplib.h: "~=" is not a single pp-token. * cpplex.c: Correct commentary. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33463 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplex.c (spell_other, spell_char): Remove.neil2000-04-271-3/+5
| | | | | | | | | | | (SPELL_CHAR): New. (token_spelling, trigraph_map): Use unsigned chars. (_cpp_lex_line): Tidy up the switch statement. * cpplib.h: Implement spell_char with spell_string. (C): New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33454 138bc75d-0d04-0410-961f-82ee72b054a4
* 2000-04-25 Zack Weinberg <zack@wolery.cumb.org>zack2000-04-251-45/+84
| | | | | | | | | | | | | | | | | | * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33419 138bc75d-0d04-0410-961f-82ee72b054a4
* * Revert previous patch until build failure cause determined.neil2000-04-251-79/+44
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33411 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpphash.c: replace HSPACE_BEFORE with PREV_WHITESPACE.neil2000-04-241-44/+79
| | | | | | | | | | | | | | | | | | | | | | | | | * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33390 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpphash.c (struct arg, struct arglist): Const-ify strings.zack2000-04-211-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (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". git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33309 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplib.h (enum cpp_ttype): Add token types for allzack2000-04-201-26/+150
| | | | | | | | | | | | | | | | | | 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33289 138bc75d-0d04-0410-961f-82ee72b054a4
* * cccp.c, cexp.y, cexp.c, cccp.1: Removed.zack2000-04-181-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | * configure.in: Delete --disable-cpplib option and all references to cpp_main. * configure: Regenerate. * Makefile.in: Remove all references to CCCP, CCCP_OBJS, @cpp_main@, cccp.c, cexp.c, cexp.y, cexp.output, cexp.o, cccp.o, cccp, or cppmain. Link cppmain.o straight to cpp$(exeext). Add --no-headers to makeinfo command line when generating INSTALL. Install and uninstall cpp.1 manpage, not cccp.1. * install.texi: Delete all references to cexp.y/cexp.c. Delete ancient instructions for compiling GCC on 3b1. * INSTALL: Regenerate. * cppfiles.c, cpplib.h, jump.c, protoize.c, c-lex.c, ch/decl.c, ch/lex.c, cp/lex.c, f/lex.c, mips/t-ecoff, mips/t-elf, mips/t-r3900: Remove references to cccp.c. * convex.h, fx80.h, m68k.h, pdp11.h, contrib/gcc_update, f/g77install.texi: Remove references to cexp.c/cexp.y. * xm-linux.h, xm-os2.h, romp.h: Remove definition of BSTRING, which is no longer tested anywhere. * po/POTFILES.in: Remove cccp.c and cexp.c. Comment out alpha/vms-tramp.asm. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33238 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplex.c (cpp_output_tokens, cpp_scan_buffer_nooutput): New publiczack2000-04-141-17/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33159 138bc75d-0d04-0410-961f-82ee72b054a4
* * cppexp.c, cpphash.c, cpphash.h, cpplex.c, cpplib.c,zack2000-04-111-10/+13
| | | | | | | | | | | | | | | | 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33076 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpphash.c (timestamp): Delete.zack2000-04-101-2/+0
| | | | | | | | | | | | | | | | | | | | (del_HASHNODE): If type is T_MCONST, free value.cpval. (special_symbol): Remove unnecessary braces. Remove T_VERSION. Treat T_STDC like T_CONST unless STDC_0_IN_SYSTEM_HEADERS. Render both __DATE__ and __TIME__ when one is encountered, then convert them into T_MCONST nodes. * cppinit.c (builtin_array): version_string is T_MCONST. __STDC__ has a "1" in its cpval. Don't have a terminator entry. Clean up which entries are dumped. (initialize_builtins): Only __STDC__ gets the special -traditional treatment. Count the length of builtin_array. Render version_string here. * cpphash.h: Remove T_VERSION. Add T_MCONST. * cpplib.h (struct cpp_reader): Remove timebuf. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33047 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpphash.c (CPP_IS_MACRO_BUFFER, FORWARD, PEEKC): Delete.zack2000-04-061-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32965 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplib.c: Include symcat.h. Add 'origin' field to structzack2000-04-011-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32860 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplex.c: Copy ISTABLE macros from cppinit.c, and adapt themzack2000-04-011-4/+2
| | | | | | | | | | | | | 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32858 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplib.h: Merge struct cpp_options into struct cpp_reader.zack2000-03-311-216/+203
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32850 138bc75d-0d04-0410-961f-82ee72b054a4
* * Makefile.in (LIBCPP_OBJS): Add cpplex.o.zack2000-03-131-13/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32513 138bc75d-0d04-0410-961f-82ee72b054a4
* Convert cpplib to use libiberty/hashtab.c.zack2000-03-121-5/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32497 138bc75d-0d04-0410-961f-82ee72b054a4
* * cppfiles.c (file_cleanup, _cpp_find_include_file,neil2000-03-111-14/+14
| | | | | | | | | | | | | | | | | | | | | | | 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32477 138bc75d-0d04-0410-961f-82ee72b054a4
* * Makefile.in (LIBCPP_DEPS): New macro.zack2000-03-081-213/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32435 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplib.h (parse_underflow_t, CPP_NULL_BUFFER): Delete.zack2000-03-081-25/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32430 138bc75d-0d04-0410-961f-82ee72b054a4
* 2000-03-07 Neil Booth <NeilB@earthling.net>zack2000-03-071-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | * 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>. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32394 138bc75d-0d04-0410-961f-82ee72b054a4
* * cppfiles.c (_cpp_find_include_file): Make sure ih->name iszack2000-03-071-7/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32390 138bc75d-0d04-0410-961f-82ee72b054a4
* * mkdeps.c, mkdeps.h: New files.zack2000-03-041-12/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | * po/POTFILES.in: Add them. * Makefile.in (LIBCPP_OBJS): Add mkdeps.o. (cpplib.o, cppinit.o): Depend on mkdeps.h. (mkdeps.o): New target. * cppfiles.c: Delete deps_output. * cppinit.c: Include mkdeps.h. Delete known_suffixes, OBJECT_SUFFIX, and base_name. (cpp_cleanup): Use deps_free. Free ihash->name when clearing the include hash. (initialize_dependency_output): Use deps_init, deps_add_target, deps_calc_target, and deps_add_dep. Remove all the unnecessary string bashing. (cpp_finish): Use deps_write. Remove an unnecessary nesting level. * cpplib.c (do_include): Use deps_add_dep. * cpplib.h (struct cpp_reader): Replace deps_buffer, deps_allocated_size, deps_size, deps_column members with single pointer to a struct deps. Delete prototype of deps_output. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32329 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplib.h (_dollar_ok): New macro.zack2000-03-041-15/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | (is_idchar, is_idstart): Use it. (IStable): Rename to _cpp_IStable. Declare it const if gcc >=2.7 or C99. Delete all references to FAKE_CONST. (is_idchar, is_idstart, is_numchar, is_numstart, is_hspace, is_space): Update for renamed IStable. * cppinit.c: Delete all references to FAKE_CONST and CAT macros. Define init_IStable as empty macro if gcc >=2.7 or C99. Change TABLE() to ISTABLE and hardcode name of table. (cpp_start_read): Don't change the IStable based on dollars_in_ident. * cpphash.c (unsafe_chars): Add pfile argument. All callers changed. Handle '$' for char1 correctly. * cpplib.c (cpp_get_token): Use is_numchar when parsing numbers. * cppexp.c (tokentab2): Make const. (cpp_lex): Make toktab const. * cppinit.c (include_defaults_array): Make const. (initialize_standard_includes): Make default_include const. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32321 138bc75d-0d04-0410-961f-82ee72b054a4
* * cppinit.c (cpp_handle_option): Set opts->pedantic directly.zack2000-03-041-2/+0
| | | | | | | * cpplib.h: Delete SET_CPP_PEDANTIC. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32318 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplib.h (CPP_PEDANTIC): Only true if system_header_p is not setjason2000-03-031-1/+5
| | | | | | | | | | for the buffer. (SET_CPP_PEDANTIC): New macro. * cpplib.c (do_include): Don't bother checking system_header_p. (do_warning, do_ident, do_assert, do_unassert): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32299 138bc75d-0d04-0410-961f-82ee72b054a4
* * cppfiles.c (cpp_read_file): New function.zack2000-03-021-15/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cpphash.c (collect_expansion): Make sure to reset last_token to NORM when we hit a string. Handle trailing whitespace properly when the expansion is empty. (create_definition): Disable line commands while parsing the directive line. (dump_definition): If pfile->lineno == 0, output a line command ahead of the dump, and add a trailing newline. * cppinit.c (append_include_chain): Add fifth argument, which indicates whether or not system headers are C++ aware. (initialize_standard_includes): New function, broken out of read_and_prescan. Pass 'cxx_aware' value from the include_defaults_array on to append_include_chain. (dump_special_to_buffer): Const-ify char array. (builtin_array): Don't dump __BASE_FILE__. (cpp_start_read): Use cpp_read_file. Reorder code for clarity. Don't output line commands here for -D/-A/-U switches. Don't call deps_output for files included with -include or -imacros. * cpplib.c (do_define): Don't pay any attention to the second argument. (cpp_expand_to_buffer): Disable line commands while scanning. (output_line_command): Work in the file buffer. * cpplib.h: Remove no_record_file flag from struct cpp_reader. Fix formatting of comments. Prototype cpp_read_file. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32293 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplib.h (CPP_ASSERTION, CPP_STRINGIZE, CPP_TOKPASTE): Newzack2000-03-011-17/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | token types. (struct cpp_reader): Add parsing_if_directive and parsing_define_directive flags. (struct cpp_options): Remove output_conditionals flag. (check_macro_name): Delete prototype. * cpphash.h (struct macrodef): Delete. (struct reflist): Separate from struct definition. (struct definition): Remove unused fields. Add column number. (create_definition): Returns a DEFINITION *. Takes a cpp_reader * and an int. * cpphash.c (SKIP_WHITE_SPACE): Delete. (PEEKC): Copy defn from cpplib.c. (rest_extension, REST_EXTENSION_LENGTH): Delete. (struct arg): New. (struct arglist): Simplify. (collect_expansion): Rewrite. Get tokens by calling cpp_get_token. Add more error checking. (collect_formal_parameters): New function, broken out of create_definition and reworked to use get_directive_token. (create_definition): All real work is now in collect_expansion and collect_formal_parameters. do_define handles finding the macro name. Return a DEFINITION, not a MACRODEF. (macroexpand): Replace bcopy with memcpy throughout. Replace character-at-a-time copy loop with memcpy and pointer increments. (compare-defs): d1->argnames / d2->argnames might be null. * cpplib.c (copy_rest_of_line): Delete function. (skip_rest_of_line): Do all the work ourselves. (skip_string): New function. (parse_string): Use skip_string. (get_macro_name): New function. (check_macro_name): Delete. (copy_comment): Use CPP_RESERVE and CPP_PUTC_Q. (cpp_skip_hspace): Use CPP_BUMP_LINE. (handle_directive): ICE if we're called on a macro buffer. (do_define): Determine macro name and type (funlike/objlike) here. Expunge all uses of MACRODEF. (cpp_push_buffer): Set line_base to NULL. (do_undef, read_line_number): Don't worry about getting a POP token. (eval_if_expression): Set/reset parsing_if_directive around cpp_parse_expr. Don't clear only_seen_white. (skip_if_group): Remove output_conditionals logic. Use skip_rest_of_line. (cpp_get_token): Return ASSERTION, STRINGIZE, and TOKPASTE tokens under appropriate conditions. (cpp_unassert): Call do_unassert not do_assert. Oops. * cppexp.c (parse_defined): New function, break out of cpp_lex. (cpp_lex): We now get CPP_ASSERTION tokens and can check them ourselves, with cpp_defined. * cppinit.c (cpp_handle_option, print_help): Delete -ifoutput. * gcc.dg/20000209-2.c: Turn off -pedantic-errors. * gcc.dg/strpaste-2.c: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32274 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplib.h (enum file_change_code): Added rename_file.aoliva2000-02-271-1/+1
| | | | | | | | | | * cpplib.c (do_line): If a filename is given, set file_change to rename_file. (output_line_command): If file_change is rename_file, always output a # directive with the file name. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32215 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplib.h (enum cpp_token): Added CPP_WCHAR and CPP_WSTRING.aoliva2000-02-231-0/+2
| | | | | | | | * cpplib.c (cpp_get_token): Produce them. * cppexp.c (cpp_lex): Handle them. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32121 138bc75d-0d04-0410-961f-82ee72b054a4
* * cppexp.c: Don't include cpphash.h.zack2000-02-101-8/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (parse_charconst, cpp_lex): Use cpp_defined. (cpp_lex): Use get_directive_token throughout. Remove unnecessary cases from switch. Move assertion-handling code down to OTHER case. (cpp_parse_expr): If we see '+' or '-', check the context to determine if they are unary or binary operators. Streamline the jumps a bit. Do not call skip_rest_of_line. * cpplib.c: Make skip_rest_of_line and cpp_skip_hspace static. Export get_directive_token. Update commentary. (cpp_defined): New function. (do_define): Remove reference to T_PCSTRING. Call free_definition to release memory for old definition, when redefining a macro. (eval_if_expression): Set only_seen_white to 0 before calling cpp_parse_expr. Call skip_rest_of_line after it returns. (cpp_read_check_assertion): Don't preserve a pointer into the token buffer across a call to cpp_get_token. * Makefile.in (cppexp.o): Don't depend on cpphash.h. * cppfiles.c (redundant_include_p): Use cpp_defined. * cpphash.c (free_definition): New function. (delete_macro): Use it. Update commentary. * cpphash.h: Typedef HASHNODE here. Prototype cpp_lookup and free_definition. * cpplib.h: Don't typedef HASHNODE here. Delete T_PCSTRING from enum node_type. Prototype cpp_defined and get_directive_token. Don't prototype cpp_lookup, skip_rest_of_line, or cpp_skip_hspace. * fix-header.c (check_macro_names): Use cpp_defined. (read_scan_file): Set inhibit_warnings and inhibit_errors in the options structure. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31908 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplib.h: Provide HASHNODE typedef and forward decl ofzack2000-02-101-70/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | struct hashnode only. Kill cpp_hashnode typedef. MACRODEF, DEFINITION, struct hashnode, struct macrodef, struct definition, scan_decls prototype, default defn of INCLUDE_LEN_FUDGE moved elsewhere. * cpphash.h: MACRODEF, DEFINITION, struct macrodef, struct definition, and struct hashnode moved here. Remove the unused 'predefined' field from struct definition. Replace the 'args' union with its sole member. All users updated (cpphash.c). Delete HASHSTEP and MAKE_POS macros, and hashf prototype. Add multiple include guard. * cpphash.c (hashf): Make static; use better algorithm; drop HASHSIZE parameter; return an unsigned int. (cpp_lookup): Drop HASH parameter. PFILE parameter is used. Calculate HASHSIZE modulus here. (cpp_install): Drop HASH parameter. Calculate HASHSIZE modulus here. (create_definition): Drop PREDEFINITION parameter. * cpplib.c (do_define): Don't calculate a hash value here. Don't pass (keyword == NULL) to create_definition. * scan.h: Prototype scan_decls here. * cppfiles.c: Move INCLUDE_LEN_FUDGE default defn here. * cppexp.c, cppfiles.c, cppinit.c, cpplib.c, fix-header.c: All callers of cpp_lookup and cpp_install updated. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31881 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpphash.c (macarg): Hoist all the flag diddling out of thezack2000-02-101-6/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | function... (macroexpand): ... and out of the loop that calls macarg. Skip over the initial paren before macro arguments with cpp_get_non_space_token; point may be some distance before that paren. Abort if it's not there. * cpplib.c (parse_clear_mark): Delete function. (parse_set_mark, parse_goto_mark): Make static. (ACTIVE_MARK_P): New macro. (skip_block_comment, skip_line_comment): Do not bump the line if ACTIVE_MARK_P is true. (cpp_pop_buffer): The buffer to be popped may not have an active mark. (cpp_get_token): When looking for the initial paren before macro arguments, only set a mark in a file buffer, Always return to that mark before proceeding to call macroexpand or return a NAME token. * cpplib.h: Remove prototypes of parse_set_mark, parse_clear_mark, parse_goto_mark. (struct cpp_options): Rename 'put_out_comments' to 'discard_comments' and invert its sense. * cppinit.c, cpphash.c, cpplib.c: All users of put_out_comments changed to use discard_comments, with opposite sense. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31879 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplib.c (my_strerror, cpp_error, cpp_error_with_line,zack2000-02-061-24/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | cpp_error_from_errno, cpp_warning, cpp_warning_with_line, cpp_pedwarn, cpp_pedwarn_with_line, cpp_pedwarn_with_file_and_line): Move to cpperror.c. (cpp_print_file_and_line, v_cpp_error, v_cpp_warning, v_cpp_error_with_line, v_cpp_warning_with_line, cpp_message_from_errno, cpp_perror_with_name): Delete. * cpperror.c (cpp_print_containing_files): Take starting buffer as argument. (cpp_file_line_for_message): Rename to cpp_print_file_and_line. (v_cpp_message): Now called directly by all entry points. Remove -1 case. (cpp_pfatal_with_name, cpp_message): Delete. (cpp_notice_from_errno, cpp_ice): New functions. (cpp_notice): Is now for reporting error conditions, just without an associated file. (cpp_error, cpp_error_with_line): Don't do anything if opts->inhibit_errors is on. (cpp_pedwarn_with_file_and_line): Take column argument also. * cpplib.h: Update prototypes of exported functions. (struct cpp_options): Add inhibit_errors. * cppalloc.c, cppfiles.c: Use fprintf not cpp_notice for non-error messages. Include intl.h. * cppinit.c, cppmain.c: Likewise. Also, use cpp_notice_from_errno instead of cpp_perror_with_name or cpp_pfatal_with_name, and cpp_notice instead of cpp_message. * cppexp.c, cpphash.c, cppinit.c, cpplib.c: Use cpp_ice to report internal errors. * cpplib.c (do_define): Switch bcopy to memcpy. Give cpp_pedwarn_with_file_and_line a dummy column argument. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31829 138bc75d-0d04-0410-961f-82ee72b054a4
* * cppalloc.c: Update copyright.zack2000-02-061-14/+1
| | | | | | | | | * cpplib.c: Merge all the static function prototypes into one block. * cpplib.h: Remove #if 0 block. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31818 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpperror.c: Remove #ifdef EMACS block.zack2000-02-061-9/+0
| | | | | | | | | | | | | | * cppmain.c: Likewise. * cpphash.c: Remove #if 0 blocks. * cppinit.c: Remove #if 0 blocks, and the -lint option. * cpplib.c: Remove #if 0 blocks and code referencing pcp_inside_if or for_lint. Remove duplicate error message. Fix error messages for #else after #else or #elif. Reformat. Remove archaic TODO list. * cpplib.h: Remove pcp_inside_if and for_lint flags. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31817 138bc75d-0d04-0410-961f-82ee72b054a4
* * cpplib.h (cpp_reader): Add new flag, no_directives.zack2000-02-021-0/+5
| | | | | | | | | * cpphash.c (macarg): Set it. * cpplib.c (handle_directive): If no_directives is on and we find a directive, issue an error and discard the line. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31763 138bc75d-0d04-0410-961f-82ee72b054a4