diff options
Diffstat (limited to 'contrib/gcc/c-lang.c')
-rw-r--r-- | contrib/gcc/c-lang.c | 215 |
1 files changed, 74 insertions, 141 deletions
diff --git a/contrib/gcc/c-lang.c b/contrib/gcc/c-lang.c index 7da6798..497d32a 100644 --- a/contrib/gcc/c-lang.c +++ b/contrib/gcc/c-lang.c @@ -1,99 +1,94 @@ /* Language-specific hook definitions for C front end. - Copyright (C) 1991, 1995, 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1991, 1995, 1997, 1998, + 1999, 2000, 2001 Free Software Foundation, Inc. -This file is part of GNU CC. +This file is part of GCC. -GNU CC 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 2, or (at your option) -any later version. +GCC 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 2, or (at your option) any later +version. -GNU CC 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. +GCC 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 GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +along with GCC; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ #include "config.h" #include "system.h" #include "tree.h" -#include "input.h" #include "c-tree.h" -#include "c-lex.h" -#include "toplev.h" -#include "output.h" - -#if USE_CPPLIB -#include "cpplib.h" -extern char *yy_cur; -extern cpp_reader parse_in; -extern cpp_options parse_options; -#endif - -/* Each of the functions defined here - is an alternative to a function in objc-actions.c. */ - -int -lang_decode_option (argc, argv) - int argc; - char **argv; -{ - return c_decode_option (argc, argv); -} +#include "langhooks.h" +#include "langhooks-def.h" -void -lang_init_options () -{ -#if USE_CPPLIB - cpp_reader_init (&parse_in); - parse_in.opts = &parse_options; - cpp_options_init (&parse_options); -#endif -} +static const char *c_init PARAMS ((const char *)); +static void c_init_options PARAMS ((void)); +static void c_post_options PARAMS ((void)); -void -lang_init () -{ - /* the beginning of the file is a new line; check for # */ - /* With luck, we discover the real source file's name from that - and put it in input_filename. */ -#if !USE_CPPLIB - ungetc (check_newline (), finput); -#else - check_newline (); - yy_cur--; -#endif -} +/* ### When changing hooks, consider if ObjC needs changing too!! ### */ -void -lang_finish () -{ -} +#undef LANG_HOOKS_NAME +#define LANG_HOOKS_NAME "GNU C" +#undef LANG_HOOKS_INIT +#define LANG_HOOKS_INIT c_init +#undef LANG_HOOKS_FINISH +#define LANG_HOOKS_FINISH c_common_finish +#undef LANG_HOOKS_INIT_OPTIONS +#define LANG_HOOKS_INIT_OPTIONS c_init_options +#undef LANG_HOOKS_DECODE_OPTION +#define LANG_HOOKS_DECODE_OPTION c_decode_option +#undef LANG_HOOKS_POST_OPTIONS +#define LANG_HOOKS_POST_OPTIONS c_post_options +#undef LANG_HOOKS_GET_ALIAS_SET +#define LANG_HOOKS_GET_ALIAS_SET c_common_get_alias_set +#undef LANG_HOOKS_SAFE_FROM_P +#define LANG_HOOKS_SAFE_FROM_P c_safe_from_p +#undef LANG_HOOKS_STATICP +#define LANG_HOOKS_STATICP c_staticp +#undef LANG_HOOKS_PRINT_IDENTIFIER +#define LANG_HOOKS_PRINT_IDENTIFIER c_print_identifier +#undef LANG_HOOKS_SET_YYDEBUG +#define LANG_HOOKS_SET_YYDEBUG c_set_yydebug + +#undef LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN +#define LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN \ + c_cannot_inline_tree_fn +#undef LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS +#define LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS \ + c_disregard_inline_limits +#undef LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P +#define LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P \ + anon_aggr_type_p -char * -lang_identify () +/* ### When changing hooks, consider if ObjC needs changing too!! ### */ + +/* Each front end provides its own. */ +const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; + +/* Post-switch processing. */ +static void +c_post_options () { - return "c"; + c_common_post_options (); } -void -print_lang_statistics () +static void +c_init_options () { + c_common_init_options (clk_c); } -/* used by print-tree.c */ - -void -lang_print_xnode (file, node, indent) - FILE *file ATTRIBUTE_UNUSED; - tree node ATTRIBUTE_UNUSED; - int indent ATTRIBUTE_UNUSED; +static const char * +c_init (filename) + const char *filename; { + return c_objc_common_init (filename); } /* Used by c-lex.c, but only for objc. */ @@ -128,13 +123,6 @@ maybe_objc_comptypes (lhs, rhs, reflexive) } tree -maybe_objc_method_name (decl) - tree decl ATTRIBUTE_UNUSED; -{ - return 0; -} - -tree maybe_building_objc_message_expr () { return 0; @@ -146,72 +134,17 @@ recognize_objc_keyword () return 0; } +/* Used by c-typeck.c (build_external_ref), but only for objc. */ + tree -build_objc_string (len, str) - int len ATTRIBUTE_UNUSED; - const char *str ATTRIBUTE_UNUSED; +lookup_objc_ivar (id) + tree id ATTRIBUTE_UNUSED; { - abort (); - return NULL_TREE; + return 0; } -/* Called at end of parsing, but before end-of-file processing. */ - void finish_file () { -#ifndef ASM_OUTPUT_CONSTRUCTOR - extern tree static_ctors; -#endif -#ifndef ASM_OUTPUT_DESTRUCTOR - extern tree static_dtors; -#endif - extern tree build_function_call PROTO((tree, tree)); -#if !defined(ASM_OUTPUT_CONSTRUCTOR) || !defined(ASM_OUTPUT_DESTRUCTOR) - tree void_list_node = build_tree_list (NULL_TREE, void_type_node); -#endif -#ifndef ASM_OUTPUT_CONSTRUCTOR - if (static_ctors) - { - tree fnname = get_file_function_name ('I'); - start_function (void_list_node, - build_parse_node (CALL_EXPR, fnname, - tree_cons (NULL_TREE, NULL_TREE, - void_list_node), - NULL_TREE), - NULL_TREE, NULL_TREE, 0); - fnname = DECL_ASSEMBLER_NAME (current_function_decl); - store_parm_decls (); - - for (; static_ctors; static_ctors = TREE_CHAIN (static_ctors)) - expand_expr_stmt (build_function_call (TREE_VALUE (static_ctors), - NULL_TREE)); - - finish_function (0); - - assemble_constructor (IDENTIFIER_POINTER (fnname)); - } -#endif -#ifndef ASM_OUTPUT_DESTRUCTOR - if (static_dtors) - { - tree fnname = get_file_function_name ('D'); - start_function (void_list_node, - build_parse_node (CALL_EXPR, fnname, - tree_cons (NULL_TREE, NULL_TREE, - void_list_node), - NULL_TREE), - NULL_TREE, NULL_TREE, 0); - fnname = DECL_ASSEMBLER_NAME (current_function_decl); - store_parm_decls (); - - for (; static_dtors; static_dtors = TREE_CHAIN (static_dtors)) - expand_expr_stmt (build_function_call (TREE_VALUE (static_dtors), - NULL_TREE)); - - finish_function (0); - - assemble_destructor (IDENTIFIER_POINTER (fnname)); - } -#endif + c_objc_common_finish_file (); } |