diff options
author | brolley <brolley@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-12-15 11:17:06 +0000 |
---|---|---|
committer | brolley <brolley@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-12-15 11:17:06 +0000 |
commit | 616814f81e771d0eb9b9b7f53c01e9364ad4a066 (patch) | |
tree | b159c3f4e8c5f6ede1944dfdb5b3496afa086930 /gcc/cpplib.c | |
parent | 69bcbfc6334f2ec547116352fd09d69f83a39880 (diff) | |
download | ppe42-gcc-616814f81e771d0eb9b9b7f53c01e9364ad4a066.tar.gz ppe42-gcc-616814f81e771d0eb9b9b7f53c01e9364ad4a066.zip |
1998-12-14 00:56 -0500 Zack Weinberg <zack@rabi.phys.columbia.edu>
* cpplib.c: Make all directive handlers read their own
arguments.
(struct directive): Remove last two arguments from FUNC
member prototype. Remove `command_reads_line' member
entirely.
(directive_table): Remove initializations of
command_reads_line flag. Pretty-print.
(eval_if_expression, do_define, do_line, do_include,
do_undef, do_error, do_pragma, do_ident, do_if, do_xifdef,
do_else, do_elif, do_sccs, do_assert, do_unassert,
do_warning): Take only two args.
(cpp_define): Call do_define with two args and the text to
define stuffed into a buffer.
(make_assertion): Call do_assert with two args.
(handle_directive): Call do_line with two args. Call
kt->func with two args. Remove command_reads_line
processing.
(do_define, do_undef, do_error, do_warning, do_pragma,
do_sccs): Read the rest of the line here.
(do_ident): Gobble rest of line, as cccp does.
(cpp_undef): New function.
(cpp_start_read): Call cpp_undef instead of do_undef.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@24326 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cpplib.c')
-rw-r--r-- | gcc/cpplib.c | 341 |
1 files changed, 169 insertions, 172 deletions
diff --git a/gcc/cpplib.c b/gcc/cpplib.c index 919e9ac6235..537d2dce404 100644 --- a/gcc/cpplib.c +++ b/gcc/cpplib.c @@ -159,7 +159,7 @@ extern void fancy_abort (); static int check_macro_name PROTO ((cpp_reader *, U_CHAR *, char *)); static int compare_defs PROTO ((cpp_reader *, DEFINITION *, DEFINITION *)); -static HOST_WIDE_INT eval_if_expression PROTO ((cpp_reader *, U_CHAR *, int)); +static HOST_WIDE_INT eval_if_expression PROTO ((cpp_reader *)); static int change_newlines PROTO ((U_CHAR *, int)); static void push_macro_expansion PARAMS ((cpp_reader *, U_CHAR *, int, HASHNODE *)); @@ -243,34 +243,33 @@ static struct default_include { struct directive { int length; /* Length of name */ int (*func) /* Function to handle directive */ - PARAMS ((cpp_reader *, struct directive *, U_CHAR *, U_CHAR *)); + PARAMS ((cpp_reader *, struct directive *)); char *name; /* Name of directive */ enum node_type type; /* Code which describes which directive. */ - char command_reads_line; /* One if rest of line is read by func. */ }; /* These functions are declared to return int instead of void since they are going to be placed in a table and some old compilers have trouble with pointers to functions returning void. */ -static int do_define PARAMS ((cpp_reader *, struct directive *, U_CHAR *, U_CHAR *)); -static int do_line PARAMS ((cpp_reader *, struct directive *, U_CHAR *, U_CHAR *)); -static int do_include PARAMS ((cpp_reader *, struct directive *, U_CHAR *, U_CHAR *)); -static int do_undef PARAMS ((cpp_reader *, struct directive *, U_CHAR *, U_CHAR *)); -static int do_error PARAMS ((cpp_reader *, struct directive *, U_CHAR *, U_CHAR *)); -static int do_pragma PARAMS ((cpp_reader *, struct directive *, U_CHAR *, U_CHAR *)); -static int do_ident PARAMS ((cpp_reader *, struct directive *, U_CHAR *, U_CHAR *)); -static int do_if PARAMS ((cpp_reader *, struct directive *, U_CHAR *, U_CHAR *)); -static int do_xifdef PARAMS ((cpp_reader *, struct directive *, U_CHAR *, U_CHAR *)); -static int do_else PARAMS ((cpp_reader *, struct directive *, U_CHAR *, U_CHAR *)); -static int do_elif PARAMS ((cpp_reader *, struct directive *, U_CHAR *, U_CHAR *)); -static int do_endif PARAMS ((cpp_reader *, struct directive *, U_CHAR *, U_CHAR *)); +static int do_define PARAMS ((cpp_reader *, struct directive *)); +static int do_line PARAMS ((cpp_reader *, struct directive *)); +static int do_include PARAMS ((cpp_reader *, struct directive *)); +static int do_undef PARAMS ((cpp_reader *, struct directive *)); +static int do_error PARAMS ((cpp_reader *, struct directive *)); +static int do_pragma PARAMS ((cpp_reader *, struct directive *)); +static int do_ident PARAMS ((cpp_reader *, struct directive *)); +static int do_if PARAMS ((cpp_reader *, struct directive *)); +static int do_xifdef PARAMS ((cpp_reader *, struct directive *)); +static int do_else PARAMS ((cpp_reader *, struct directive *)); +static int do_elif PARAMS ((cpp_reader *, struct directive *)); +static int do_endif PARAMS ((cpp_reader *, struct directive *)); #ifdef SCCS_DIRECTIVE -static int do_sccs PARAMS ((cpp_reader *, struct directive *, U_CHAR *, U_CHAR *)); +static int do_sccs PARAMS ((cpp_reader *, struct directive *)); #endif -static int do_assert PARAMS ((cpp_reader *, struct directive *, U_CHAR *, U_CHAR *)); -static int do_unassert PARAMS ((cpp_reader *, struct directive *, U_CHAR *, U_CHAR *)); -static int do_warning PARAMS ((cpp_reader *, struct directive *, U_CHAR *, U_CHAR *)); +static int do_assert PARAMS ((cpp_reader *, struct directive *)); +static int do_unassert PARAMS ((cpp_reader *, struct directive *)); +static int do_warning PARAMS ((cpp_reader *, struct directive *)); #define IS_INCLUDE_DIRECTIVE_TYPE(t) \ ((int) T_INCLUDE <= (int) (t) && (int) (t) <= (int) T_IMPORT) @@ -279,28 +278,28 @@ static int do_warning PARAMS ((cpp_reader *, struct directive *, U_CHAR *, U_CHA The initialize_builtins function assumes #define is the very first. */ static struct directive directive_table[] = { - { 6, do_define, "define", T_DEFINE, 0}, - { 5, do_xifdef, "ifdef", T_IFDEF, 1}, - { 6, do_xifdef, "ifndef", T_IFNDEF, 1}, - { 7, do_include, "include", T_INCLUDE, 1}, - { 12, do_include, "include_next", T_INCLUDE_NEXT, 1}, - { 6, do_include, "import", T_IMPORT, 1}, - { 5, do_endif, "endif", T_ENDIF, 1}, - { 4, do_else, "else", T_ELSE, 1}, - { 2, do_if, "if", T_IF, 1}, - { 4, do_elif, "elif", T_ELIF, 1}, - { 5, do_undef, "undef", T_UNDEF, 0}, - { 5, do_error, "error", T_ERROR, 0}, - { 7, do_warning, "warning", T_WARNING, 0}, - { 6, do_pragma, "pragma", T_PRAGMA, 0}, - { 4, do_line, "line", T_LINE, 1}, - { 5, do_ident, "ident", T_IDENT, 1}, + { 6, do_define, "define", T_DEFINE }, + { 5, do_xifdef, "ifdef", T_IFDEF }, + { 6, do_xifdef, "ifndef", T_IFNDEF }, + { 7, do_include, "include", T_INCLUDE }, + { 12, do_include, "include_next", T_INCLUDE_NEXT }, + { 6, do_include, "import", T_IMPORT }, + { 5, do_endif, "endif", T_ENDIF }, + { 4, do_else, "else", T_ELSE }, + { 2, do_if, "if", T_IF }, + { 4, do_elif, "elif", T_ELIF }, + { 5, do_undef, "undef", T_UNDEF }, + { 5, do_error, "error", T_ERROR }, + { 7, do_warning, "warning", T_WARNING }, + { 6, do_pragma, "pragma", T_PRAGMA }, + { 4, do_line, "line", T_LINE }, + { 5, do_ident, "ident", T_IDENT }, #ifdef SCCS_DIRECTIVE - { 4, do_sccs, "sccs", T_SCCS, 0}, + { 4, do_sccs, "sccs", T_SCCS }, #endif - { 6, do_assert, "assert", T_ASSERT, 1}, - { 8, do_unassert, "unassert", T_UNASSERT, 1}, - { -1, 0, "", T_UNUSED, 0}, + { 6, do_assert, "assert", T_ASSERT }, + { 8, do_unassert, "unassert", T_UNASSERT }, + { -1, 0, "", T_UNUSED } }; /* table to tell if char can be part of a C identifier. */ @@ -467,7 +466,11 @@ cpp_define (pfile, str) *q = 0; } - do_define (pfile, NULL, buf, buf + strlen (buf)); + if (cpp_push_buffer (pfile, buf, strlen (buf)) != NULL) + { + do_define (pfile, NULL); + cpp_pop_buffer (pfile); + } } /* Process the string STR as if it appeared as the body of a #assert. @@ -508,10 +511,10 @@ make_assertion (pfile, option, str) cpp_error (pfile, "malformed option `%s %s'", option, str); return; } - + if (cpp_push_buffer (pfile, buf, strlen (buf)) != NULL) { - do_assert (pfile, NULL, NULL, NULL); + do_assert (pfile, NULL); cpp_pop_buffer (pfile); } } @@ -793,8 +796,7 @@ handle_directive (pfile) { int c; register struct directive *kt; int ident_length; - long after_ident; - U_CHAR *ident, *line_end; + U_CHAR *ident; long old_written = CPP_WRITTEN (pfile); cpp_skip_hspace (pfile); @@ -805,7 +807,7 @@ handle_directive (pfile) /* Handle # followed by a line number. */ if (CPP_PEDANTIC (pfile)) cpp_pedwarn (pfile, "`#' followed by integer"); - do_line (pfile, NULL, NULL, NULL); + do_line (pfile, NULL); goto done_a_directive; } @@ -851,40 +853,23 @@ handle_directive (pfile) for (kt = directive_table; ; kt++) { if (kt->length <= 0) goto not_a_directive; - if (kt->length == ident_length && !strncmp (kt->name, ident, ident_length)) + if (kt->length == ident_length + && !strncmp (kt->name, ident, ident_length)) break; } - if (kt->command_reads_line) - after_ident = 0; - else - { - /* Nonzero means do not delete comments within the directive. - #define needs this when -traditional. */ - int comments = CPP_TRADITIONAL (pfile) && kt->type == T_DEFINE; - int save_put_out_comments = CPP_OPTIONS (pfile)->put_out_comments; - CPP_OPTIONS (pfile)->put_out_comments = comments; - after_ident = CPP_WRITTEN (pfile); - copy_rest_of_line (pfile); - CPP_OPTIONS (pfile)->put_out_comments = save_put_out_comments; - } - /* We may want to pass through #define, #pragma, and #include. Other directives may create output, but we don't want the directive itself out, so we pop it now. For example conditionals may emit - #failed ... #endfailed stuff. But note that popping the buffer - means the parameters to kt->func may point after pfile->limit - so these parameters are invalid as soon as something gets appended - to the token_buffer. */ + #failed ... #endfailed stuff. */ - line_end = CPP_PWRITTEN (pfile); if (! (kt->type == T_DEFINE || kt->type == T_PRAGMA || (IS_INCLUDE_DIRECTIVE_TYPE (kt->type) && CPP_OPTIONS (pfile)->dump_includes))) CPP_SET_WRITTEN (pfile, old_written); - (*kt->func) (pfile, kt, pfile->token_buffer + after_ident, line_end); + (*kt->func) (pfile, kt); if (kt->type == T_DEFINE) { @@ -911,7 +896,7 @@ handle_directive (pfile) /* Pass a directive through to the output file. BUF points to the contents of the directive, as a contiguous string. - LIMIT points to the first character past the end of the directive. +m LIMIT points to the first character past the end of the directive. KEYWORD is the keyword-table entry for the directive. */ static void @@ -1533,28 +1518,44 @@ comp_def_part (first, beg1, len1, beg2, len2, last) } /* Process a #define command. -BUF points to the contents of the #define command, as a contiguous string. -LIMIT points to the first character past the end of the definition. KEYWORD is the keyword-table entry for #define, or NULL for a "predefined" macro. */ static int -do_define (pfile, keyword, buf, limit) +do_define (pfile, keyword) cpp_reader *pfile; struct directive *keyword; - U_CHAR *buf, *limit; { int hashcode; MACRODEF mdef; HASHNODE *hp; + int save_put_out_comments; + long here; + U_CHAR *macro, *buf, *end; + + here = CPP_WRITTEN (pfile); + + save_put_out_comments = CPP_OPTIONS (pfile)->put_out_comments; + CPP_OPTIONS (pfile)->put_out_comments = CPP_TRADITIONAL (pfile); + copy_rest_of_line (pfile); + CPP_OPTIONS (pfile)->put_out_comments = save_put_out_comments; + + /* Copy out the line so we can pop the token buffer. */ + buf = pfile->token_buffer + here; + end = CPP_PWRITTEN (pfile); + macro = alloca (end - buf + 1); + bcopy (buf, macro, end - buf + 1); + end = macro + (end - buf); + + CPP_SET_WRITTEN (pfile, here); #if 0 /* If this is a precompiler run (with -pcp) pass thru #define commands. */ if (pcp_outfile && keyword) - pass_thru_directive (buf, limit, pfile, keyword); + pass_thru_directive (macro, end, pfile, keyword); #endif - mdef = create_definition (buf, limit, pfile, keyword == NULL); + mdef = create_definition (macro, end, pfile, keyword == NULL); if (mdef.defn == 0) goto nope; @@ -1580,7 +1581,7 @@ do_define (pfile, keyword, buf, limit) /* If we are passing through #define and #undef directives, do that for this re-definition now. */ if (CPP_OPTIONS (pfile)->debug_output && keyword) - pass_thru_directive (buf, limit, pfile, keyword); + pass_thru_directive (macro, end, pfile, keyword); msg = (U_CHAR *) alloca (mdef.symlen + 22); *msg = '`'; @@ -1600,7 +1601,7 @@ do_define (pfile, keyword, buf, limit) /* If we are passing through #define and #undef directives, do that for this new definition now. */ if (CPP_OPTIONS (pfile)->debug_output && keyword) - pass_thru_directive (buf, limit, pfile, keyword); + pass_thru_directive (macro, end, pfile, keyword); install (mdef.symnam, mdef.symlen, T_MACRO, 0, (char *) mdef.defn, hashcode); } @@ -2871,10 +2872,9 @@ get_directive_token (pfile) This is safe. */ static int -do_include (pfile, keyword, unused1, unused2) +do_include (pfile, keyword) cpp_reader *pfile; struct directive *keyword; - U_CHAR *unused1 ATTRIBUTE_UNUSED, *unused2 ATTRIBUTE_UNUSED; { int importing = (keyword->type == T_IMPORT); int skip_dirs = (keyword->type == T_INCLUDE_NEXT); @@ -3147,10 +3147,9 @@ convert_string (pfile, result, in, limit, handle_escapes) #define FNAME_HASHSIZE 37 static int -do_line (pfile, keyword, unused1, unused2) +do_line (pfile, keyword) cpp_reader *pfile; struct directive *keyword ATTRIBUTE_UNUSED; - U_CHAR *unused1 ATTRIBUTE_UNUSED, *unused2 ATTRIBUTE_UNUSED; { cpp_buffer *ip = CPP_BUFFER (pfile); int new_lineno; @@ -3278,14 +3277,43 @@ do_line (pfile, keyword, unused1, unused2) */ static int -do_undef (pfile, keyword, buf, limit) +do_undef (pfile, keyword) cpp_reader *pfile; struct directive *keyword; - U_CHAR *buf, *limit; { int sym_length; HASHNODE *hp; - U_CHAR *orig_buf = buf; + U_CHAR *buf, *name, *limit; + int c; + long here = CPP_WRITTEN (pfile); + enum cpp_token token; + + cpp_skip_hspace (pfile); + c = GETC(); + if (! is_idstart[c]) + { + cpp_error (pfile, "token after #undef is not an identifier"); + skip_rest_of_line (pfile); + return 1; + } + + parse_name (pfile, c); + buf = pfile->token_buffer + here; + limit = CPP_PWRITTEN(pfile); + + /* Copy out the token so we can pop the token buffer. */ + name = alloca (limit - buf + 1); + bcopy(buf, name, limit - buf); + name[limit - buf] = '\0'; + + token = get_directive_token (pfile); + if (token != CPP_VSPACE) + { + cpp_pedwarn (pfile, "junk on line after #undef"); + skip_rest_of_line (pfile); + } + + CPP_SET_WRITTEN (pfile, here); #if 0 /* If this is a precompiler run (with -pcp) pass thru #undef commands. */ @@ -3293,28 +3321,35 @@ do_undef (pfile, keyword, buf, limit) pass_thru_directive (buf, limit, pfile, keyword); #endif - SKIP_WHITE_SPACE (buf); - sym_length = check_macro_name (pfile, buf, "macro"); + sym_length = check_macro_name (pfile, name, "macro"); - while ((hp = cpp_lookup (pfile, buf, sym_length, -1)) != NULL) + while ((hp = cpp_lookup (pfile, name, sym_length, -1)) != NULL) { /* If we are generating additional info for debugging (with -g) we need to pass through all effective #undef commands. */ if (CPP_OPTIONS (pfile)->debug_output && keyword) - pass_thru_directive (orig_buf, limit, pfile, keyword); + pass_thru_directive (name, name+sym_length, pfile, keyword); if (hp->type != T_MACRO) cpp_warning (pfile, "undefining `%s'", hp->name); delete_macro (hp); } - if (CPP_PEDANTIC (pfile)) { - buf += sym_length; - SKIP_WHITE_SPACE (buf); - if (buf != limit) - cpp_pedwarn (pfile, "garbage after `#undef' directive"); - } return 0; } + +/* Wrap do_undef for -U processing. */ +static void +cpp_undef (pfile, macro) + cpp_reader *pfile; + U_CHAR *macro; +{ + if (cpp_push_buffer (pfile, macro, strlen(macro))) + { + do_undef (pfile, NULL); + cpp_pop_buffer (pfile); + } +} + /* * Report an error detected by the program we are processing. @@ -3323,77 +3358,78 @@ do_undef (pfile, keyword, buf, limit) */ static int -do_error (pfile, keyword, buf, limit) +do_error (pfile, keyword) cpp_reader *pfile; struct directive *keyword ATTRIBUTE_UNUSED; - U_CHAR *buf, *limit; { - int length = limit - buf; - U_CHAR *copy = (U_CHAR *) alloca (length + 1); - bcopy (buf, copy, length); - copy[length] = 0; - SKIP_WHITE_SPACE (copy); - cpp_error (pfile, "#error %s", copy); + long here = CPP_WRITTEN (pfile); + U_CHAR *text; + copy_rest_of_line (pfile); + text = pfile->token_buffer + here; + SKIP_WHITE_SPACE(text); + + cpp_error (pfile, "#error %s", text); + CPP_SET_WRITTEN (pfile, here); return 0; } /* * Report a warning detected by the program we are processing. * Use the text of the line in the warning message, then continue. - * (We use error because it prints the filename & line#.) */ static int -do_warning (pfile, keyword, buf, limit) +do_warning (pfile, keyword) cpp_reader *pfile; struct directive *keyword ATTRIBUTE_UNUSED; - U_CHAR *buf, *limit; { - int length = limit - buf; - U_CHAR *copy = (U_CHAR *) alloca (length + 1); - bcopy (buf, copy, length); - copy[length] = 0; - SKIP_WHITE_SPACE (copy); + U_CHAR *text; + long here = CPP_WRITTEN(pfile); + copy_rest_of_line (pfile); + text = pfile->token_buffer + here; + SKIP_WHITE_SPACE(text); if (CPP_PEDANTIC (pfile) && !CPP_BUFFER (pfile)->system_header_p) cpp_pedwarn (pfile, "ANSI C does not allow `#warning'"); /* Use `pedwarn' not `warning', because #warning isn't in the C Standard; if -pedantic-errors is given, #warning should cause an error. */ - cpp_pedwarn (pfile, "#warning %s", copy); + cpp_pedwarn (pfile, "#warning %s", text); + CPP_SET_WRITTEN (pfile, here); return 0; } /* Report program identification. */ static int -do_ident (pfile, keyword, buf, limit) +do_ident (pfile, keyword) cpp_reader *pfile; struct directive *keyword ATTRIBUTE_UNUSED; - U_CHAR *buf ATTRIBUTE_UNUSED, *limit ATTRIBUTE_UNUSED; { -/* long old_written = CPP_WRITTEN (pfile);*/ - /* Allow #ident in system headers, since that's not user's fault. */ if (CPP_PEDANTIC (pfile) && !CPP_BUFFER (pfile)->system_header_p) cpp_pedwarn (pfile, "ANSI C does not allow `#ident'"); - /* Leave rest of line to be read by later calls to cpp_get_token. */ + skip_rest_of_line (pfile); /* Correct? Appears to match cccp. */ return 0; } -/* #pragma and its argument line have already been copied to the output file. - Just check for some recognized pragmas that need validation here. */ +/* Just check for some recognized pragmas that need validation here, + and leave the text in the token buffer to be output. */ static int -do_pragma (pfile, keyword, buf, limit) +do_pragma (pfile, keyword) cpp_reader *pfile; struct directive *keyword ATTRIBUTE_UNUSED; - U_CHAR *buf, *limit ATTRIBUTE_UNUSED; { - while (*buf == ' ' || *buf == '\t') - buf++; + long here = CPP_WRITTEN (pfile); + U_CHAR *buf; + + copy_rest_of_line (pfile); + buf = pfile->token_buffer + here; + SKIP_WHITE_SPACE (buf); + if (!strncmp (buf, "once", 4)) { cpp_buffer *ip = NULL; @@ -3444,44 +3480,17 @@ do_pragma (pfile, keyword, buf, limit) return 0; } -#if 0 -/* This was a fun hack, but #pragma seems to start to be useful. - By failing to recognize it, we pass it through unchanged to cc1. */ - -/* - * the behavior of the #pragma directive is implementation defined. - * this implementation defines it as follows. - */ - -static int -do_pragma () -{ - close (0); - if (open ("/dev/tty", O_RDONLY, 0666) != 0) - goto nope; - close (1); - if (open ("/dev/tty", O_WRONLY, 0666) != 1) - goto nope; - execl ("/usr/games/hack", "#pragma", 0); - execl ("/usr/games/rogue", "#pragma", 0); - execl ("/usr/new/emacs", "-f", "hanoi", "9", "-kill", 0); - execl ("/usr/local/emacs", "-f", "hanoi", "9", "-kill", 0); -nope: - fatal ("You are in a maze of twisty compiler features, all different"); -} -#endif - #ifdef SCCS_DIRECTIVE /* Just ignore #sccs, on systems where we define it at all. */ static int -do_sccs (pfile, keyword, buf, limit) +do_sccs (pfile, keyword) cpp_reader *pfile; struct directive *keyword ATTRIBUTE_UNUSED; - U_CHAR *buf ATTRIBUTE_UNUSED, *limit ATTRIBUTE_UNUSED; { if (CPP_PEDANTIC (pfile)) cpp_pedwarn (pfile, "ANSI C does not allow `#sccs'"); + skip_rest_of_line (pfile); return 0; } #endif @@ -3500,12 +3509,11 @@ do_sccs (pfile, keyword, buf, limit) */ static int -do_if (pfile, keyword, buf, limit) +do_if (pfile, keyword) cpp_reader *pfile; struct directive *keyword ATTRIBUTE_UNUSED; - U_CHAR *buf, *limit; { - HOST_WIDE_INT value = eval_if_expression (pfile, buf, limit - buf); + HOST_WIDE_INT value = eval_if_expression (pfile); conditional_skip (pfile, value == 0, T_IF, NULL_PTR); return 0; } @@ -3516,10 +3524,9 @@ do_if (pfile, keyword, buf, limit) */ static int -do_elif (pfile, keyword, buf, limit) +do_elif (pfile, keyword) cpp_reader *pfile; struct directive *keyword ATTRIBUTE_UNUSED; - U_CHAR *buf, *limit; { if (pfile->if_stack == CPP_BUFFER (pfile)->if_stack) { cpp_error (pfile, "`#elif' not within a conditional"); @@ -3542,7 +3549,7 @@ do_elif (pfile, keyword, buf, limit) if (pfile->if_stack->if_succeeded) skip_if_group (pfile, 0); else { - HOST_WIDE_INT value = eval_if_expression (pfile, buf, limit - buf); + HOST_WIDE_INT value = eval_if_expression (pfile); if (value == 0) skip_if_group (pfile, 0); else { @@ -3559,10 +3566,8 @@ do_elif (pfile, keyword, buf, limit) */ static HOST_WIDE_INT -eval_if_expression (pfile, buf, length) +eval_if_expression (pfile) cpp_reader *pfile; - U_CHAR *buf ATTRIBUTE_UNUSED; - int length ATTRIBUTE_UNUSED; { HASHNODE *save_defined; HOST_WIDE_INT value; @@ -3587,10 +3592,9 @@ eval_if_expression (pfile, buf, length) */ static int -do_xifdef (pfile, keyword, unused1, unused2) +do_xifdef (pfile, keyword) cpp_reader *pfile; struct directive *keyword; - U_CHAR *unused1 ATTRIBUTE_UNUSED, *unused2 ATTRIBUTE_UNUSED; { int skip; cpp_buffer *ip = CPP_BUFFER (pfile); @@ -3868,10 +3872,9 @@ skip_if_group (pfile, any) */ static int -do_else (pfile, keyword, buf, limit) +do_else (pfile, keyword) cpp_reader *pfile; struct directive *keyword ATTRIBUTE_UNUSED; - U_CHAR *buf ATTRIBUTE_UNUSED, *limit ATTRIBUTE_UNUSED; { cpp_buffer *ip = CPP_BUFFER (pfile); @@ -3911,10 +3914,9 @@ do_else (pfile, keyword, buf, limit) */ static int -do_endif (pfile, keyword, buf, limit) +do_endif (pfile, keyword) cpp_reader *pfile; struct directive *keyword ATTRIBUTE_UNUSED; - U_CHAR *buf ATTRIBUTE_UNUSED, *limit ATTRIBUTE_UNUSED; { if (CPP_PEDANTIC (pfile)) validate_else (pfile, "#endif"); @@ -4830,7 +4832,7 @@ cpp_start_read (pfile, fname) case 'U': if (opts->debug_output) output_line_command (pfile, 0, same_file); - do_undef (pfile, NULL, pend->arg, pend->arg + strlen (pend->arg)); + cpp_undef (pfile, pend->arg); break; case 'D': if (opts->debug_output) @@ -6006,10 +6008,9 @@ parse_assertion (pfile) } static int -do_assert (pfile, keyword, buf, limit) +do_assert (pfile, keyword) cpp_reader *pfile; struct directive *keyword ATTRIBUTE_UNUSED; - U_CHAR *buf ATTRIBUTE_UNUSED, *limit ATTRIBUTE_UNUSED; { char *sym; int ret, c; @@ -6073,10 +6074,9 @@ do_assert (pfile, keyword, buf, limit) } static int -do_unassert (pfile, keyword, buf, limit) +do_unassert (pfile, keyword) cpp_reader *pfile; struct directive *keyword ATTRIBUTE_UNUSED; - U_CHAR *buf ATTRIBUTE_UNUSED, *limit ATTRIBUTE_UNUSED; { int c, ret; char *sym; @@ -6569,9 +6569,6 @@ cpp_perror_with_name (pfile, name) * * Possibly different enum token codes for each C/C++ token. * - * Should clean up remaining directives to that do_XXX functions - * only take two arguments and all have command_reads_line. - * * Find and cleanup remaining uses of static variables, * * Support for trigraphs. |