diff options
author | Neil Booth <neil@daikokuya.demon.co.uk> | 2001-09-24 22:53:12 +0000 |
---|---|---|
committer | Neil Booth <neil@gcc.gnu.org> | 2001-09-24 22:53:12 +0000 |
commit | 4ed5bcfb1ed415c32bdd8735b2cd0ea0ed37e8b6 (patch) | |
tree | f2b5dd04bb961bbe8dac8d988d52d574f0cb2b47 /gcc/cppexp.c | |
parent | ad43d46f3abe6f4d9b41f5b1d7b46a0c320efda8 (diff) | |
download | gcc-4ed5bcfb1ed415c32bdd8735b2cd0ea0ed37e8b6.zip gcc-4ed5bcfb1ed415c32bdd8735b2cd0ea0ed37e8b6.tar.gz gcc-4ed5bcfb1ed415c32bdd8735b2cd0ea0ed37e8b6.tar.bz2 |
c-lex.c (cb_def_pragma): Update.
* c-lex.c (cb_def_pragma): Update.
(c_lex): Update, and skip padding.
* cppexp.c (lex, parse_defined): Update, remove unused variable.
* cpphash.h (struct toklist): Delete.
(union utoken): New.
(struct cpp_context): Update.
(struct cpp_reader): New members eof, avoid_paste.
(_cpp_temp_token): New.
* cppinit.c (cpp_create_reader): Update.
* cpplex.c (_cpp_temp_token): New.
(_cpp_lex_direct): Add PREV_WHITE when parsing args.
(cpp_output_token): Don't print leading whitespace.
(cpp_output_line): Update.
* cpplib.c (glue_header_name, parse_include, get__Pragma_string,
do_include_common, do_line, do_ident, do_pragma,
do_pragma_dependency, _cpp_do__Pragma, parse_answer,
parse_assertion): Update.
(get_token_no_padding): New.
* cpplib.h (CPP_PADDING): New.
(AVOID_LPASTE): Delete.
(struct cpp_token): New union member source.
(cpp_get_token): Update.
* cppmacro.c (macro_arg): Convert to use pointers to const tokens.
(builtin_macro, paste_all_tokens, paste_tokens, funlike_invocation_p,
replace_args, quote_string, stringify_arg, parse_arg, next_context,
enter_macro_context, expand_arg, _cpp_pop_context, cpp_scan_nooutput,
_cpp_backup_tokens, _cpp_create_definition): Update.
(push_arg_context): Delete.
(padding_token, push_token_context, push_ptoken_context): New.
(make_string_token, make_number_token): Update, rename.
(cpp_get_token): Update to handle tokens as pointers to const,
and insert padding appropriately.
* cppmain.c (struct printer): New member prev.
(check_multiline_token): Constify.
(do_preprocessing, cb_line_change): Update.
(scan_translation_unit): Update to handle spacing.
* scan-decls.c (get_a_token): New.
(skip_to_closing_brace, scan_decls): Update.
* fix-header.c (read_scan_file): Update.
* doc/cpp.texi: Update.
* gcc.dg/cpp/macro10.c: New test.
* gcc.dg/cpp/strify3.c: New test.
* gcc.dg/cpp/spacing1.c: Add tests.
* gcc.dg/cpp/19990703-1.c: Remove bogus test.
* gcc.dg/cpp/20000625-2.c: Fudge to pass.
From-SVN: r45793
Diffstat (limited to 'gcc/cppexp.c')
-rw-r--r-- | gcc/cppexp.c | 39 |
1 files changed, 16 insertions, 23 deletions
diff --git a/gcc/cppexp.c b/gcc/cppexp.c index bdc09ed..c79f20d 100644 --- a/gcc/cppexp.c +++ b/gcc/cppexp.c @@ -36,7 +36,7 @@ static HOST_WIDEST_INT right_shift PARAMS ((cpp_reader *, HOST_WIDEST_INT, unsigned HOST_WIDEST_INT)); static struct op parse_number PARAMS ((cpp_reader *, const cpp_token *)); static struct op parse_defined PARAMS ((cpp_reader *)); -static struct op lex PARAMS ((cpp_reader *, int, cpp_token *)); +static struct op lex PARAMS ((cpp_reader *, int)); static const unsigned char *op_as_text PARAMS ((cpp_reader *, enum cpp_ttype)); struct op @@ -217,44 +217,40 @@ parse_defined (pfile) { int paren = 0; cpp_hashnode *node = 0; - cpp_token token; + const cpp_token *token; struct op op; /* Don't expand macros. */ pfile->state.prevent_expansion++; - cpp_get_token (pfile, &token); - if (token.type == CPP_OPEN_PAREN) + token = cpp_get_token (pfile); + if (token->type == CPP_OPEN_PAREN) { paren = 1; - cpp_get_token (pfile, &token); + token = cpp_get_token (pfile); } - if (token.type == CPP_NAME) + if (token->type == CPP_NAME) { - node = token.val.node; - if (paren) + node = token->val.node; + if (paren && cpp_get_token (pfile)->type != CPP_CLOSE_PAREN) { - cpp_get_token (pfile, &token); - if (token.type != CPP_CLOSE_PAREN) - { - cpp_error (pfile, "missing ')' after \"defined\""); - node = 0; - } + cpp_error (pfile, "missing ')' after \"defined\""); + node = 0; } } else { cpp_error (pfile, "operator \"defined\" requires an identifier"); - if (token.flags & NAMED_OP) + if (token->flags & NAMED_OP) { cpp_token op; op.flags = 0; - op.type = token.type; + op.type = token->type; cpp_error (pfile, "(\"%s\" is an alternative token for \"%s\" in C++)", - cpp_token_as_text (pfile, &token), + cpp_token_as_text (pfile, token), cpp_token_as_text (pfile, &op)); } } @@ -282,14 +278,12 @@ parse_defined (pfile) CPP_EOF, or the type of an operator token. */ static struct op -lex (pfile, skip_evaluation, token) +lex (pfile, skip_evaluation) cpp_reader *pfile; int skip_evaluation; - cpp_token *token; { struct op op; - - cpp_get_token (pfile, token); + const cpp_token *token = cpp_get_token (pfile); switch (token->type) { @@ -578,7 +572,6 @@ _cpp_parse_expr (pfile) struct op init_stack[INIT_STACK_SIZE]; struct op *stack = init_stack; struct op *limit = stack + INIT_STACK_SIZE; - cpp_token token; register struct op *top = stack + 1; int skip_evaluation = 0; int result; @@ -603,7 +596,7 @@ _cpp_parse_expr (pfile) struct op op; /* Read a token */ - op = lex (pfile, skip_evaluation, &token); + op = lex (pfile, skip_evaluation); lex_count++; /* If the token is an operand, push its value and get next |