OSDN Git Service

gcc/
[pf3gnuchains/gcc-fork.git] / gcc / c-lang.c
index dceede5..42004f5 100644 (file)
@@ -1,12 +1,13 @@
 /* Language-specific hook definitions for C front end.
    Copyright (C) 1991, 1995, 1997, 1998,
 /* Language-specific hook definitions for C front end.
    Copyright (C) 1991, 1995, 1997, 1998,
-   1999, 2000, 2001 Free Software Foundation, Inc.
+   1999, 2000, 2001, 2003, 2004, 2005, 2007, 2008
+   Free Software Foundation, Inc.
 
 This file is part of GCC.
 
 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
 
 This file is part of GCC.
 
 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
+Software Foundation; either version 3, or (at your option) any later
 version.
 
 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
 version.
 
 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
@@ -15,262 +16,43 @@ 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
 for more details.
 
 You should have received a copy of the GNU General Public License
-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.  */
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
 
 
 #include "config.h"
 #include "system.h"
 
 
 #include "config.h"
 #include "system.h"
+#include "coretypes.h"
+#include "tm.h"
 #include "tree.h"
 #include "tree.h"
-#include "function.h"
-#include "toplev.h"
-#include "flags.h"
-#include "ggc.h"
-#include "rtl.h"
-#include "expr.h"
 #include "c-tree.h"
 #include "c-tree.h"
-#include "varray.h"
+#include "c-common.h"
+#include "ggc.h"
 #include "langhooks.h"
 #include "langhooks-def.h"
 #include "langhooks.h"
 #include "langhooks-def.h"
+#include "tree-inline.h"
+#include "diagnostic.h"
+#include "c-objc-common.h"
+#include "c-pragma.h"
 
 
-static const char *c_init PARAMS ((const char *));
-static void c_init_options PARAMS ((void));
-static void c_post_options PARAMS ((void));
+enum c_language_kind c_language = clk_c;
 
 
-/* ### When changing hooks, consider if ObjC needs changing too!! ### */
+/* Lang hooks common to C and ObjC are declared in c-objc-common.h;
+   consequently, there should be very few hooks below.  */
 
 #undef LANG_HOOKS_NAME
 #define LANG_HOOKS_NAME "GNU C"
 #undef LANG_HOOKS_INIT
 
 #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_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
+#define LANG_HOOKS_INIT c_objc_common_init
 
 
-/* ### When changing hooks, consider if ObjC needs changing too!! ### */
-
-/* Each front end provides its own.  */
+/* Each front end provides its own lang hook initializer.  */
 const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
 
 const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
 
-static varray_type deferred_fns;
-
-/* Post-switch processing.  */
-static void
-c_post_options ()
-{
-  c_common_post_options ();
-}
-
-static void
-c_init_options ()
-{
-  c_common_init_options (clk_c);
-}
-
-static const char *
-c_init (filename)
-     const char *filename;
-{
-  filename = c_objc_common_init (filename);
-
-  VARRAY_TREE_INIT (deferred_fns, 32, "deferred_fns");
-  ggc_add_tree_varray_root (&deferred_fns, 1);
-
-  return filename;
-}
-
-/* Used by c-lex.c, but only for objc.  */
-
-tree
-lookup_interface (arg)
-     tree arg ATTRIBUTE_UNUSED;
-{
-  return 0;
-}
-
-tree
-is_class_name (arg)
-    tree arg ATTRIBUTE_UNUSED;
-{
-  return 0;
-}
-
+/* Final processing of file-scope data.  The Objective-C version of
+   this function still does something.  */
 void
 void
-maybe_objc_check_decl (decl)
-     tree decl ATTRIBUTE_UNUSED;
-{
-}
-
-int
-maybe_objc_comptypes (lhs, rhs, reflexive)
-     tree lhs ATTRIBUTE_UNUSED;
-     tree rhs ATTRIBUTE_UNUSED;
-     int reflexive ATTRIBUTE_UNUSED;
-{
-  return -1;
-}
-
-tree
-maybe_building_objc_message_expr ()
-{
-  return 0;
-}
-
-int
-recognize_objc_keyword ()
-{
-  return 0;
-}
-
-/* Used by c-typeck.c (build_external_ref), but only for objc.  */
-
-tree
-lookup_objc_ivar (id)
-     tree id ATTRIBUTE_UNUSED;
-{
-  return 0;
-}
-
-extern tree static_ctors;
-extern tree static_dtors;
-
-static tree start_cdtor                PARAMS ((int));
-static void finish_cdtor       PARAMS ((tree));
-
-static tree
-start_cdtor (method_type)
-     int method_type;
-{
-  tree fnname = get_file_function_name (method_type);
-  tree void_list_node_1 = build_tree_list (NULL_TREE, void_type_node);
-  tree body;
-
-  start_function (void_list_node_1,
-                 build_nt (CALL_EXPR, fnname,
-                           tree_cons (NULL_TREE, NULL_TREE, void_list_node_1),
-                           NULL_TREE),
-                 NULL_TREE);
-  store_parm_decls ();
-
-  current_function_cannot_inline
-    = "static constructors and destructors cannot be inlined";
-
-  body = c_begin_compound_stmt ();
-
-  pushlevel (0);
-  clear_last_expr ();
-  add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0);
-
-  return body;
-}
-
-static void
-finish_cdtor (body)
-     tree body;
+finish_file (void)
 {
 {
-  tree scope;
-  tree block;
-
-  scope = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0);
-  block = poplevel (0, 0, 0);
-  SCOPE_STMT_BLOCK (TREE_PURPOSE (scope)) = block;
-  SCOPE_STMT_BLOCK (TREE_VALUE (scope)) = block;
-
-  RECHAIN_STMTS (body, COMPOUND_BODY (body));
-
-  finish_function (0);
 }
 
 }
 
-/* Register a function tree, so that its optimization and conversion
-   to RTL is only done at the end of the compilation.  */
-
-int
-defer_fn (fn)
-     tree fn;
-{
-  VARRAY_PUSH_TREE (deferred_fns, fn);
-
-  return 1;
-}
-
-/* Called at end of parsing, but before end-of-file processing.  */
-
-void
-finish_file ()
-{
-  unsigned int i;
-
-  for (i = 0; i < VARRAY_ACTIVE_SIZE (deferred_fns); i++)
-    {
-      tree decl = VARRAY_TREE (deferred_fns, i);
-
-      if (! TREE_ASM_WRITTEN (decl))
-       {
-         /* For static inline functions, delay the decision whether to
-            emit them or not until wrapup_global_declarations.  */
-         if (! TREE_PUBLIC (decl))
-           DECL_DEFER_OUTPUT (decl) = 1;
-         c_expand_deferred_function (decl);
-       }
-    }
-  VARRAY_FREE (deferred_fns);
-
-  if (static_ctors)
-    {
-      tree body = start_cdtor ('I');
-
-      for (; static_ctors; static_ctors = TREE_CHAIN (static_ctors))
-       c_expand_expr_stmt (build_function_call (TREE_VALUE (static_ctors),
-                                                NULL_TREE));
-
-      finish_cdtor (body);
-    }
-  if (static_dtors)
-    {
-      tree body = start_cdtor ('D');
-
-      for (; static_dtors; static_dtors = TREE_CHAIN (static_dtors))
-       c_expand_expr_stmt (build_function_call (TREE_VALUE (static_dtors),
-                                                NULL_TREE));
-
-      finish_cdtor (body);
-    }
-
-  if (back_end_hook)
-    (*back_end_hook) (getdecls ());
-  
-  {
-    int flags;
-    FILE *stream = dump_begin (TDI_all, &flags);
-
-    if (stream)
-      {
-       dump_node (getdecls (), flags & ~TDF_SLIM, stream);
-       dump_end (TDI_all, stream);
-      }
-  }
-}
+#include "gtype-c.h"