| Index: gcc/gcc/scan-decls.c
|
| diff --git a/gcc/gcc/scan-decls.c b/gcc/gcc/scan-decls.c
|
| deleted file mode 100644
|
| index c0e2009150fd20253a7f41179cf0216769144315..0000000000000000000000000000000000000000
|
| --- a/gcc/gcc/scan-decls.c
|
| +++ /dev/null
|
| @@ -1,250 +0,0 @@
|
| -/* scan-decls.c - Extracts declarations from cpp output.
|
| - Copyright (C) 1993, 1995, 1997, 1998,
|
| - 1999, 2000, 2003, 2004, 2007 Free Software Foundation, Inc.
|
| -
|
| - This program is free software; you can redistribute it and/or modify it
|
| - under the terms of the GNU General Public License as published by the
|
| - Free Software Foundation; either version 3, or (at your option) any
|
| - later version.
|
| -
|
| - This program is distributed in the hope that it will be useful,
|
| - but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| - GNU General Public License for more details.
|
| -
|
| - You should have received a copy of the GNU General Public License
|
| - along with this program; see the file COPYING3. If not see
|
| - <http://www.gnu.org/licenses/>.
|
| -
|
| - Written by Per Bothner <bothner@cygnus.com>, July 1993. */
|
| -
|
| -#include "bconfig.h"
|
| -#include "system.h"
|
| -#include "coretypes.h"
|
| -#include "tm.h"
|
| -#include "cpplib.h"
|
| -#include "scan.h"
|
| -
|
| -static void skip_to_closing_brace (cpp_reader *);
|
| -static const cpp_token *get_a_token (cpp_reader *);
|
| -
|
| -int brace_nesting = 0;
|
| -
|
| -/* The first extern_C_braces_length elements of extern_C_braces
|
| - indicate the (brace nesting levels of) left braces that were
|
| - prefixed by extern "C". */
|
| -int extern_C_braces_length = 0;
|
| -/* 20 is not enough anymore on Solaris 9. */
|
| -#define MAX_EXTERN_C_BRACES 200
|
| -char extern_C_braces[MAX_EXTERN_C_BRACES];
|
| -#define in_extern_C_brace (extern_C_braces_length>0)
|
| -
|
| -/* True if the function declaration currently being scanned is
|
| - prefixed by extern "C". */
|
| -int current_extern_C = 0;
|
| -
|
| -/* Get a token but skip padding. */
|
| -static const cpp_token *
|
| -get_a_token (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 (cpp_reader *pfile)
|
| -{
|
| - int nesting = 1;
|
| - for (;;)
|
| - {
|
| - enum cpp_ttype token = get_a_token (pfile)->type;
|
| -
|
| - if (token == CPP_EOF)
|
| - break;
|
| - if (token == CPP_OPEN_BRACE)
|
| - nesting++;
|
| - if (token == CPP_CLOSE_BRACE && --nesting == 0)
|
| - break;
|
| - }
|
| -}
|
| -
|
| -/* This function scans a C source file (actually, the output of cpp),
|
| - reading from FP. It looks for function declarations, and
|
| - external variable declarations.
|
| -
|
| - The following grammar (as well as some extra stuff) is recognized:
|
| -
|
| - declaration:
|
| - (decl-specifier)* declarator ("," declarator)* ";"
|
| - decl-specifier:
|
| - identifier
|
| - keyword
|
| - extern "C"
|
| - declarator:
|
| - (ptr-operator)* dname [ "(" argument-declaration-list ")" ]
|
| - ptr-operator:
|
| - ("*" | "&") ("const" | "volatile")*
|
| - dname:
|
| - identifier
|
| -
|
| -Here dname is the actual name being declared.
|
| -*/
|
| -
|
| -int
|
| -scan_decls (cpp_reader *pfile, int argc ATTRIBUTE_UNUSED,
|
| - char **argv ATTRIBUTE_UNUSED)
|
| -{
|
| - int saw_extern, saw_inline;
|
| - cpp_token prev_id;
|
| - const cpp_token *token;
|
| -
|
| - new_statement:
|
| - token = get_a_token (pfile);
|
| -
|
| - handle_statement:
|
| - current_extern_C = 0;
|
| - saw_extern = 0;
|
| - saw_inline = 0;
|
| - if (token->type == CPP_OPEN_BRACE)
|
| - {
|
| - /* Pop an 'extern "C"' nesting level, if appropriate. */
|
| - if (extern_C_braces_length
|
| - && extern_C_braces[extern_C_braces_length - 1] == brace_nesting)
|
| - extern_C_braces_length--;
|
| - brace_nesting--;
|
| - goto new_statement;
|
| - }
|
| - if (token->type == CPP_OPEN_BRACE)
|
| - {
|
| - brace_nesting++;
|
| - goto new_statement;
|
| - }
|
| -
|
| - if (token->type == CPP_EOF)
|
| - return 0;
|
| -
|
| - if (token->type == CPP_SEMICOLON)
|
| - goto new_statement;
|
| - if (token->type != CPP_NAME)
|
| - goto new_statement;
|
| -
|
| - prev_id.type = CPP_EOF;
|
| - for (;;)
|
| - {
|
| - switch (token->type)
|
| - {
|
| - default:
|
| - goto handle_statement;
|
| - case CPP_MULT:
|
| - case CPP_AND:
|
| - /* skip */
|
| - break;
|
| -
|
| - case CPP_COMMA:
|
| - case CPP_SEMICOLON:
|
| - if (prev_id.type != CPP_EOF && saw_extern)
|
| - {
|
| - recognized_extern (&prev_id);
|
| - }
|
| - if (token->type == CPP_COMMA)
|
| - break;
|
| - /* ... fall through ... */
|
| - case CPP_OPEN_BRACE: case CPP_CLOSE_BRACE:
|
| - goto new_statement;
|
| -
|
| - case CPP_EOF:
|
| - return 0;
|
| -
|
| - case CPP_OPEN_PAREN:
|
| - /* Looks like this is the start of a formal parameter list. */
|
| - if (prev_id.type != CPP_EOF)
|
| - {
|
| - int nesting = 1;
|
| - int have_arg_list = 0;
|
| - const struct line_map *map;
|
| - unsigned int line;
|
| - for (;;)
|
| - {
|
| - token = get_a_token (pfile);
|
| - if (token->type == CPP_OPEN_PAREN)
|
| - nesting++;
|
| - else if (token->type == CPP_CLOSE_PAREN)
|
| - {
|
| - nesting--;
|
| - if (nesting == 0)
|
| - break;
|
| - }
|
| - else if (token->type == CPP_EOF)
|
| - break;
|
| - else if (token->type == CPP_NAME
|
| - || token->type == CPP_ELLIPSIS)
|
| - have_arg_list = 1;
|
| - }
|
| - map = linemap_lookup (&line_table, token->src_loc);
|
| - line = SOURCE_LINE (map, token->src_loc);
|
| - recognized_function (&prev_id, line,
|
| - (saw_inline ? 'I'
|
| - : in_extern_C_brace || current_extern_C
|
| - ? 'F' : 'f'), have_arg_list);
|
| - token = get_a_token (pfile);
|
| - if (token->type == CPP_OPEN_BRACE)
|
| - {
|
| - /* skip body of (normally) inline function */
|
| - skip_to_closing_brace (pfile);
|
| - goto new_statement;
|
| - }
|
| -
|
| - /* skip a possible __attribute__ or throw expression after the
|
| - parameter list */
|
| - while (token->type != CPP_SEMICOLON && token->type != CPP_EOF)
|
| - token = get_a_token (pfile);
|
| - if (token->type == CPP_EOF)
|
| - return 0;
|
| - goto new_statement;
|
| - }
|
| - break;
|
| - case CPP_NAME:
|
| - /* "inline" and "extern" are recognized but skipped */
|
| - if (cpp_ideq (token, "inline"))
|
| - {
|
| - saw_inline = 1;
|
| - }
|
| - else if (cpp_ideq (token, "extern"))
|
| - {
|
| - saw_extern = 1;
|
| - 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;
|
| - token = get_a_token (pfile);
|
| - if (token->type == CPP_OPEN_BRACE)
|
| - {
|
| - brace_nesting++;
|
| - extern_C_braces[extern_C_braces_length++]
|
| - = brace_nesting;
|
| - if (extern_C_braces_length >= MAX_EXTERN_C_BRACES)
|
| - {
|
| - fprintf (stderr,
|
| - "Internal error: out-of-bounds index\n");
|
| - exit (FATAL_EXIT_CODE);
|
| - }
|
| - goto new_statement;
|
| - }
|
| - }
|
| - else
|
| - continue;
|
| - break;
|
| - }
|
| - /* This may be the name of a variable or function. */
|
| - prev_id = *token;
|
| - break;
|
| - }
|
| - token = get_a_token (pfile);
|
| - }
|
| -}
|
|
|