aboutsummaryrefslogtreecommitdiff
path: root/gcc/cpplex.c
AgeCommit message (Collapse)AuthorFilesLines
2000-06-28Back it out temporarily.Jakub Jelinek1-16/+15
From-SVN: r34767
2000-06-28cpplex.c (output_line_command): Output correct #line if a header is ↵Jakub Jelinek1-15/+16
including itself and is not protected... * cpplex.c (output_line_command): Output correct #line if a header is including itself and is not protected against multiple inclusion. From-SVN: r34761
2000-06-21cppfiles.c: Include splay-tree.h, not hashtab.h.Zack Weinberg1-8/+15
* 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-20cpplex.c (parse_name): Don't warn about $ in identifiers if skipping.Zack Weinberg1-1/+4
* cpplex.c (parse_name): Don't warn about $ in identifiers if skipping. * Makefile.in: Remove all references to HOST_INTLLIBS. * cp/method.c: Don't include hard-reg-set.h. From-SVN: r34621
2000-06-01[multiple changes]Zack Weinberg1-2/+2
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-29cpplib.h (cpp_reader): Remove if_stack.Zack Weinberg1-17/+32
* 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-184/+115
* 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-28cpplex.c (_cpp_lex_line): Merge vertical space.Neil Booth1-37/+25
* cpplex.c (_cpp_lex_line): Merge vertical space. Flag first token of a line BOL. Update EOF code for this. Remove illegal directive check - it appears in the (not yet committed) caller. * cpplib.h (BOL): New flag. From-SVN: r34216
2000-05-27cpplex.c (_cpp_init_toklist): No comment space to initialise.Neil Booth1-79/+23
* cpplex.c (_cpp_init_toklist): No comment space to initialise. (_cpp_free_toklist): No comment space to free. (expand_comment_space): Remove. (save_comment_space): Place the comment in the current token and not in a separate comment space. (_cpp_lex_line): Save comments during plain code and #define directives only. * cpplib.h (struct _cpp_toklist): Remove comment space. From-SVN: r34215
2000-05-27cppexp.c (parse_assertion): Supply extra argument to _cpp_init_toklist.Neil Booth1-70/+103
* 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-26cpplex.c (maybe_macroexpand): Warn about function-like macros used in ↵Zack Weinberg1-0/+6
non-function context, if -Wtraditional. * cpplex.c (maybe_macroexpand): Warn about function-like macros used in non-function context, if -Wtraditional. From-SVN: r34183
2000-05-19cpplex.c (_cpp_scan_until): Clear AUX field of tokens.Zack Weinberg1-0/+1
* 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-191/+227
* 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-18cppinit.c (cpp_reader_init): Initialise col_adjust and default tab stop size.Neil Booth1-13/+21
* cppinit.c (cpp_reader_init): Initialise col_adjust and default tab stop size. (no_num, OPT_ftabstop): New. (handle_option): Handle "ftabstop=" command-line option. (print_help): Document it. * cpplex.c (COLUMN): Remove. (handle_newline): Reset col_adjust. (skip_whitespace): Update col_adjust as tabs encountered. (_cpp_lex_line): Update to use col_adjust. Call skip_whitespace for all whitespace. * cpplib.h (struct cpp_options): New member tabstop. (struct cpp_reader): New member col_adjust. (CPP_BUF_COL): Update. (CPP_BUF_COLUMN): New. * cpp.texi: Document "-ftabstop=" command line option. From-SVN: r33982
2000-05-17cpplex.c (expand_name_space): Don't use ptrdiff_t.Neil Booth1-4/+2
2000-05-17 Neil Booth <neilb@earthling.net> * cpplex.c (expand_name_space): Don't use ptrdiff_t. From-SVN: r33964
2000-05-15cpplex.c (parse_string2): Update comment.Neil Booth1-12/+3
* 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-50/+68
* 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-10cpplex.c (spell_token): New function.Neil Booth1-119/+76
* cpplex.c (spell_token): New function. (spell_string, spell_comment, spell_name): fold into spell_token. (I, S): Add macros. (E, H): Remove macros. (save_comment): Save comment opening characters too. (_cpp_lex_file): Update to use spell_token. Tidy up comment handling. * cpplib.h (I, S): Add macros. (E, H): Remove macros. (TTYPE_TABLE): Update entries for new speller. (SYNTAX_ASSERT): Remove. From-SVN: r33817
2000-05-10cpplex.c (_cpp_lex_line): Maintain PREV_WHITESPACE flag when removing ↵Neil Booth1-18/+19
escaped newlines. * cpplex.c (_cpp_lex_line): Maintain PREV_WHITESPACE flag when removing escaped newlines. Reverse sense of test for escaped newline. From-SVN: r33816
2000-05-08cpplex.c (spell_token): New function.Neil Booth1-62/+80
* cpplex.c (spell_token): New function. (TOKEN_LEN): Add 1 for whitespace. (_cpp_lex_file): Update to use spell_token. * cpplib.h (E): Remove. (TTYPE_TABLE): Update CPP_VSPACE entry. From-SVN: r33777
2000-05-07cpplex.c: Move new lexer definitions and prototypes to top.Neil Booth1-102/+106
* cpplex.c: Move new lexer definitions and prototypes to top. Conditional include these and the code if NEW_LEXER is defined. Rename functions whose names clash if this code included. From-SVN: r33758
2000-05-04cpphash.h: #define __extension__ away if GCC_VERSION < 2095 (overly ↵Zack Weinberg1-1/+5
conservative). * cpphash.h: #define __extension__ away if GCC_VERSION < 2095 (overly conservative). Change extern inline wrappers to static inline, define them always, use PARAMS properly. * cpplex.c (_cpp_get_directive_token): Don't issue pedantic whitespace warnings for \f and \v at the beginning of a line. From-SVN: r33674
2000-05-04cpphash.h (U): New define, to correct type of string constants.Zack Weinberg1-3/+3
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-19/+18
* 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-54/+42
* 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-2/+2
* 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-30cpplex.c (cpp_idcmp): New function.Zack Weinberg1-0/+31
* cpplex.c (cpp_idcmp): New function. * cpplib.h: Prototype it. * scan_decls.c (scan_decls): Use it to inspect token names. * fix-header.c (read_scan_file): Likewise. Set system_header_p on the file being run through the preprocessor. (check_macro_names): Provide length of token to cpp_defined. * Makefile.in: Remove stale warning message. From-SVN: r33552
2000-04-28cpplex.c (_cpp_scan_line): Fix buffer overwrite.Scott Bambrough1-1/+1
2000-04-28 Scott Bambrough <scottb@netwinder.org> * cpplex.c (_cpp_scan_line): Fix buffer overwrite. From-SVN: r33514
2000-04-27cpplib.h: "~=" is not a single pp-token.Neil Booth1-13/+13
2000-04-26 Neil Booth <NeilB@earthling.net> * cpplib.h: "~=" is not a single pp-token. * cpplex.c: Correct commentary. From-SVN: r33463
2000-04-27cpplex.c (spell_other, spell_char): Remove.Neil Booth1-60/+28
* cpplex.c (spell_other, spell_char): Remove. (SPELL_CHAR): New. (token_spelling, trigraph_map): Use unsigned chars. (_cpp_lex_line): Tidy up the switch statement. * cpplib.h: Implement spell_char with spell_string. (C): New. From-SVN: r33454
2000-04-26* cpplex.c: fix typos in commentNeil Booth1-9/+10
From-SVN: r33444
2000-04-26* cpplex.c: add comment describing lexer algorithm.Neil Booth1-0/+90
From-SVN: r33443
2000-04-25[multiple changes]Zack Weinberg1-23/+1362
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-1361/+21
From-SVN: r33411
2000-04-24cpphash.c: replace HSPACE_BEFORE with PREV_WHITESPACE.Neil Booth1-21/+1361
* 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-2/+2
* 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-7/+20
* 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-48/+52
* 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-21/+194
* 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-18conflict.c (conflict_graph_add): Pass enum type to htab_find_slot.Richard Kenner1-0/+1
* 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-18cpplex.c (_cpp_lex_token): Don't call CPP_BUMP_LINE when the mark is active.Mark Mitchell1-1/+2
* cpplex.c (_cpp_lex_token): Don't call CPP_BUMP_LINE when the mark is active. From-SVN: r33228
2000-04-18cppexp.c (lex): Don't assume tokens are NUL terminated.Zack Weinberg1-5/+0
* 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-16cpplex.c (_cpp_read_and_prescan): Enlarge len by setting it to offset * 2.Zack Weinberg1-1/+1
* cpplex.c (_cpp_read_and_prescan): Enlarge len by setting it to offset * 2. From-SVN: r33183
2000-04-16cpplex.c (output_line_command): Remove debugging prints.Zack Weinberg1-16/+23
* cpplex.c (output_line_command): Remove debugging prints. (cpp_output_tokens): Don't write out a zero-length buffer or try to see if it has a newline in it. (_cpp_expand_to_buffer): Copy the source buffer before pushing. (_cpp_read_and_prescan): Move shift-down of pushback bytes to the end of the loop. Use memmove. Don't read past the end of the buffer. Remove trailing newlines from error messages. From-SVN: r33180
2000-04-14cpplex.c (cpp_output_tokens, [...]): New public interfaces.Zack Weinberg1-68/+189
* 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-13cpplex.c (_cpp_lex_token): Handle digraphs.Jason Merrill1-29/+71
* cpplex.c (_cpp_lex_token): Handle digraphs. Don't null-terminate the token except for numbers and identifiers. From-SVN: r33136
2000-04-11cppexp.c, [...]: Replace cpp_token with cpp_ttype everywhere.Zack Weinberg1-34/+17
* 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-10cpplex.c (skip_block_comment): Use pointer arithmetic rather than GETC ().Neil Booth1-16/+24
* cpplex.c (skip_block_comment): Use pointer arithmetic rather than GETC (). * cpphash.h: (CPP_BUMP_BUFFER_LINE_CUR, CPP_BUMP_LINE_CUR): New. From-SVN: r33052
2000-04-08cppexp.c (parse_charconst): Null does not end character constants.Neil Booth1-16/+55
* cppexp.c (parse_charconst): Null does not end character constants. * cppinit.c (ISTABLE): Null character handled as whitespace. * cpplex.c (null_warning): new function. (skip_string): Emit warning if nulls encountered. (_cpp_skip_hspace): Emit warning if nulls encountered. (_cpp_lex_token): Emit warning if nulls encountered. Drop them. * cpp.texi: Update. From-SVN: r33013
2000-04-06cpphash.c (CPP_IS_MACRO_BUFFER, [...]): Delete.Zack Weinberg1-60/+121
* 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