diff options
author | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-09-24 22:53:12 +0000 |
---|---|---|
committer | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-09-24 22:53:12 +0000 |
commit | f9b5f7426b95ed5809c2ef8257b962306844f87b (patch) | |
tree | f2b5dd04bb961bbe8dac8d988d52d574f0cb2b47 /gcc/scan-decls.c | |
parent | 0be2ebc785cd4b366423534d0bfdce0499483e80 (diff) | |
download | gcc-f9b5f7426b95ed5809c2ef8257b962306844f87b.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45793 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/scan-decls.c')
-rw-r--r-- | gcc/scan-decls.c | 80 |
1 files changed, 46 insertions, 34 deletions
diff --git a/gcc/scan-decls.c b/gcc/scan-decls.c index fbe4e9d9ae1..cbd99004e9c 100644 --- a/gcc/scan-decls.c +++ b/gcc/scan-decls.c @@ -24,6 +24,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "scan.h" static void skip_to_closing_brace PARAMS ((cpp_reader *)); +static const cpp_token *get_a_token PARAMS ((cpp_reader *)); int brace_nesting = 0; @@ -38,6 +39,19 @@ char extern_C_braces[20]; prefixed by extern "C". */ int current_extern_C = 0; +/* Get a token but skip padding. */ +static const cpp_token * +get_a_token (pfile) + cpp_reader *pfile; +{ + for (;;) + { + const cpp_token *result = cpp_get_token (pfile); + if (result->type != CPP_PADDING) + return result; + } +} + static void skip_to_closing_brace (pfile) cpp_reader *pfile; @@ -45,11 +59,8 @@ skip_to_closing_brace (pfile) int nesting = 1; for (;;) { - cpp_token tok; - enum cpp_ttype token; + enum cpp_ttype token = get_a_token (pfile)->type; - cpp_get_token (pfile, &tok); - token = tok.type; if (token == CPP_EOF) break; if (token == CPP_OPEN_BRACE) @@ -88,16 +99,17 @@ scan_decls (pfile, argc, argv) char **argv ATTRIBUTE_UNUSED; { int saw_extern, saw_inline; - cpp_token token, prev_id; + cpp_token prev_id; + const cpp_token *token; new_statement: - cpp_get_token (pfile, &token); + token = get_a_token (pfile); handle_statement: current_extern_C = 0; saw_extern = 0; saw_inline = 0; - if (token.type == CPP_OPEN_BRACE) + if (token->type == CPP_OPEN_BRACE) { /* Pop an 'extern "C"' nesting level, if appropriate. */ if (extern_C_braces_length @@ -106,24 +118,24 @@ scan_decls (pfile, argc, argv) brace_nesting--; goto new_statement; } - if (token.type == CPP_OPEN_BRACE) + if (token->type == CPP_OPEN_BRACE) { brace_nesting++; goto new_statement; } - if (token.type == CPP_EOF) + if (token->type == CPP_EOF) return 0; - if (token.type == CPP_SEMICOLON) + if (token->type == CPP_SEMICOLON) goto new_statement; - if (token.type != CPP_NAME) + if (token->type != CPP_NAME) goto new_statement; prev_id.type = CPP_EOF; for (;;) { - switch (token.type) + switch (token->type) { default: goto handle_statement; @@ -138,7 +150,7 @@ scan_decls (pfile, argc, argv) { recognized_extern (&prev_id); } - if (token.type == CPP_COMMA) + if (token->type == CPP_COMMA) break; /* ... fall through ... */ case CPP_OPEN_BRACE: case CPP_CLOSE_BRACE: @@ -155,27 +167,27 @@ scan_decls (pfile, argc, argv) int have_arg_list = 0; for (;;) { - cpp_get_token (pfile, &token); - if (token.type == CPP_OPEN_PAREN) + token = get_a_token (pfile); + if (token->type == CPP_OPEN_PAREN) nesting++; - else if (token.type == CPP_CLOSE_PAREN) + else if (token->type == CPP_CLOSE_PAREN) { nesting--; if (nesting == 0) break; } - else if (token.type == CPP_EOF) + else if (token->type == CPP_EOF) break; - else if (token.type == CPP_NAME - || token.type == CPP_ELLIPSIS) + else if (token->type == CPP_NAME + || token->type == CPP_ELLIPSIS) have_arg_list = 1; } - recognized_function (&prev_id, token.line, + recognized_function (&prev_id, token->line, (saw_inline ? 'I' : in_extern_C_brace || current_extern_C ? 'F' : 'f'), have_arg_list); - cpp_get_token (pfile, &token); - if (token.type == CPP_OPEN_BRACE) + token = get_a_token (pfile); + if (token->type == CPP_OPEN_BRACE) { /* skip body of (normally) inline function */ skip_to_closing_brace (pfile); @@ -184,28 +196,28 @@ scan_decls (pfile, argc, argv) /* skip a possible __attribute__ or throw expression after the parameter list */ - while (token.type != CPP_SEMICOLON && token.type != CPP_EOF) - cpp_get_token (pfile, &token); + while (token->type != CPP_SEMICOLON && token->type != CPP_EOF) + token = get_a_token (pfile); goto new_statement; } break; case CPP_NAME: /* "inline" and "extern" are recognized but skipped */ - if (cpp_ideq (&token, "inline")) + if (cpp_ideq (token, "inline")) { saw_inline = 1; } - else if (cpp_ideq (&token, "extern")) + else if (cpp_ideq (token, "extern")) { saw_extern = 1; - cpp_get_token (pfile, &token); - if (token.type == CPP_STRING - && token.val.str.len == 1 - && token.val.str.text[0] == 'C') + token = get_a_token (pfile); + if (token->type == CPP_STRING + && token->val.str.len == 1 + && token->val.str.text[0] == 'C') { current_extern_C = 1; - cpp_get_token (pfile, &token); - if (token.type == CPP_OPEN_BRACE) + token = get_a_token (pfile); + if (token->type == CPP_OPEN_BRACE) { brace_nesting++; extern_C_braces[extern_C_braces_length++] @@ -218,9 +230,9 @@ scan_decls (pfile, argc, argv) break; } /* This may be the name of a variable or function. */ - prev_id = token; + prev_id = *token; break; } - cpp_get_token (pfile, &token); + token = get_a_token (pfile); } } |