Makefile.in: Update.
authorNeil Booth <neil@daikokuya.demon.co.uk>
Sat, 20 Apr 2002 09:14:37 +0000 (09:14 +0000)
committerNeil Booth <neil@gcc.gnu.org>
Sat, 20 Apr 2002 09:14:37 +0000 (09:14 +0000)
* Makefile.in: Update.
* decl.c (push_c_function_context, pop_c_function_context,
mark_c_function_context): Rename for consistency.
* c-objc-common.c (c_objc_common_init): Langhooks set elsewhere.
* c-tree.h (push_c_function_context, pop_c_function_context,
mark_c_function_context): Rename for consistency.
* c-lang.c (LANG_HOOKS_FUNCTION_ENTER_NESTED,
LANG_HOOKS_FUNCTION_LEAVE_NESTED, LANG_HOOKS_FUNCTION_MARK): Redefine.
* function.c (init_lang_status, save_lang_status,
restore_lang_status, mark_lang_status, free_lang_status):
Move to langhooks.h.
(push_function_context_to, pop_function_context_from,
free_after_parsing, prepare_function_start, ggc_mark_struct_function):
Update.
* function.h (init_lang_status, save_lang_status,
restore_lang_status, mark_lang_status, free_lang_status):
Move to langhooks.h.
* langhooks-def.h (LANG_HOOKS_FUNCTION_INIT,
LANG_HOOKS_FUNCTION_FREE, LANG_HOOKS_FUNCTION_ENTER_NESTED,
LANG_HOOKS_FUNCTION_LEAVE_NESTED, LANG_HOOKS_FUNCTION_MARK,
LANG_HOOKS_FUNCTION_INITIALIZER): New.
(LANG_HOOKS_INITIALIZER): Update.
(lhd_do_nothing_f): New.
* langhooks.h (struct lang_hooks_for_functions): New.
(struct lang_hooks): New hooks.
* langhooks.c (lhd_do_nothing_f): New.
cp:
* cp-lang.c (LANG_HOOKS_FUNCTION_INIT,
LANG_HOOKS_FUNCTION_FREE, LANG_HOOKS_FUNCTION_MARK): Redefine.
* cp-tree.h (cxx_push_function_context, cxx_pop_function_context,
cxx_mark_function_context): New.
* decl.c (push_cp_function_context, pop_cp_function_context,
mark_cp_function_context): Rename for consistency.
(cxx_init_decl_processing): Don't set old hooks.
objc:
* objc-lang.c (LANG_HOOKS_FUNCTION_ENTER_NESTED,
LANG_HOOKS_FUNCTION_LEAVE_NESTED, LANG_HOOKS_FUNCTION_MARK): Redefine.

From-SVN: r52551

16 files changed:
gcc/ChangeLog
gcc/Makefile.in
gcc/c-decl.c
gcc/c-lang.c
gcc/c-objc-common.c
gcc/c-tree.h
gcc/cp/ChangeLog
gcc/cp/cp-lang.c
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/function.c
gcc/function.h
gcc/langhooks-def.h
gcc/langhooks.c
gcc/langhooks.h
gcc/objc/objc-lang.c

index 004339e757ae83568d21f737a1c8e7cd518159a0..f3556f860df15aae14a33beb19fa11418de3ad49 100644 (file)
@@ -1,3 +1,35 @@
+2002-04-20  Neil Booth  <neil@daikokuya.demon.co.uk>
+
+       * Makefile.in: Update.
+       * decl.c (push_c_function_context, pop_c_function_context,
+       mark_c_function_context): Rename for consistency.
+       * c-objc-common.c (c_objc_common_init): Langhooks set elsewhere.
+       * c-tree.h (push_c_function_context, pop_c_function_context,
+       mark_c_function_context): Rename for consistency.
+       * c-lang.c (LANG_HOOKS_FUNCTION_ENTER_NESTED,
+       LANG_HOOKS_FUNCTION_LEAVE_NESTED, LANG_HOOKS_FUNCTION_MARK): Redefine.
+       * function.c (init_lang_status, save_lang_status,
+       restore_lang_status, mark_lang_status, free_lang_status):
+       Move to langhooks.h.
+       (push_function_context_to, pop_function_context_from,
+       free_after_parsing, prepare_function_start, ggc_mark_struct_function):
+       Update.
+       * function.h (init_lang_status, save_lang_status,
+       restore_lang_status, mark_lang_status, free_lang_status):
+       Move to langhooks.h.
+       * langhooks-def.h (LANG_HOOKS_FUNCTION_INIT,
+       LANG_HOOKS_FUNCTION_FREE, LANG_HOOKS_FUNCTION_ENTER_NESTED,
+       LANG_HOOKS_FUNCTION_LEAVE_NESTED, LANG_HOOKS_FUNCTION_MARK,
+       LANG_HOOKS_FUNCTION_INITIALIZER): New.
+       (LANG_HOOKS_INITIALIZER): Update.
+       (lhd_do_nothing_f): New.
+       * langhooks.h (struct lang_hooks_for_functions): New.
+       (struct lang_hooks): New hooks.
+       * langhooks.c (lhd_do_nothing_f): New.
+objc:
+       * objc-lang.c (LANG_HOOKS_FUNCTION_ENTER_NESTED,
+       LANG_HOOKS_FUNCTION_LEAVE_NESTED, LANG_HOOKS_FUNCTION_MARK): Redefine.
+
 2002-04-19  David S. Miller  <davem@redhat.com>
 
        * config/sparc/linux.h (MD_FALLBACK_FRAME_STATE_FOR): Define.
index bb8e29ed0329a1a51941a95d0286aaee6e21f5d6..9d88ac6743868f738cb1766ea30b4afabe6bbf9d 100644 (file)
@@ -1154,9 +1154,9 @@ c-decl.o : c-decl.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) $(C_TREE_H) \
 c-typeck.o : c-typeck.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
     $(TARGET_H) flags.h intl.h output.h $(EXPR_H) $(RTL_H) toplev.h $(TM_P_H)
 c-lang.o : c-lang.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
-    langhooks.h langhooks-def.h
+    langhooks.h langhooks-def.h c-common.h
 c-lex.o : c-lex.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) c-lex.h \
-    debug.h $(C_TREE_H) \
+    debug.h $(C_TREE_H) c-common.h \
     c-pragma.h input.h intl.h flags.h toplev.h output.h \
     mbchar.h $(CPPLIB_H) $(EXPR_H) $(TM_P_H)
 c-objc-common.o : c-objc-common.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) \
index 7db66d78db7d43c6a1dbacfbf86ab71038784764..71ece88d6fe0aa6d56c2026d2856a90f475e7874 100644 (file)
@@ -6712,7 +6712,7 @@ finish_function (nested, can_defer_p)
 
       /* Let the error reporting routines know that we're outside a
         function.  For a nested function, this value is used in
-        pop_c_function_context and then reset via pop_function_context.  */
+        c_pop_function_context and then reset via pop_function_context.  */
       current_function_decl = NULL;
     }
 }
@@ -6887,7 +6887,7 @@ c_expand_body (fndecl, nested_p, can_defer_p)
       /* Stop pointing to the local nodes about to be freed.
         But DECL_INITIAL must remain nonzero so we know this
         was an actual function definition.
-        For a nested function, this is done in pop_c_function_context.
+        For a nested function, this is done in c_pop_function_context.
         If rest_of_compilation set this to 0, leave it 0.  */
       if (DECL_INITIAL (fndecl) != 0)
        DECL_INITIAL (fndecl) = error_mark_node;
@@ -6998,7 +6998,7 @@ struct c_language_function
    used during compilation of a C function.  */
 
 void
-push_c_function_context (f)
+c_push_function_context (f)
      struct function *f;
 {
   struct c_language_function *p;
@@ -7021,7 +7021,7 @@ push_c_function_context (f)
 /* Restore the variables used during compilation of a C function.  */
 
 void
-pop_c_function_context (f)
+c_pop_function_context (f)
      struct function *f;
 {
   struct c_language_function *p
@@ -7062,7 +7062,7 @@ pop_c_function_context (f)
 /* Mark the language specific parts of F for GC.  */
 
 void
-mark_c_function_context (f)
+c_mark_function_context (f)
      struct function *f;
 {
   struct c_language_function *p
index ec1f1521867cd5d864dd43c0d4675a2c329e8063..f24742d0a16c86aa92e9aad9e877a0f2db6f005e 100644 (file)
@@ -74,6 +74,12 @@ static void c_post_options PARAMS ((void));
 #define LANG_HOOKS_PRINT_IDENTIFIER c_print_identifier
 #undef LANG_HOOKS_SET_YYDEBUG
 #define LANG_HOOKS_SET_YYDEBUG c_set_yydebug
+#undef LANG_HOOKS_FUNCTION_ENTER_NESTED
+#define LANG_HOOKS_FUNCTION_ENTER_NESTED c_push_function_context
+#undef LANG_HOOKS_FUNCTION_LEAVE_NESTED
+#define LANG_HOOKS_FUNCTION_LEAVE_NESTED c_pop_function_context
+#undef LANG_HOOKS_FUNCTION_MARK
+#define LANG_HOOKS_FUNCTION_MARK c_mark_function_context
 #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL
 #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL c_dup_lang_specific_decl
 
index 36b5db4340b9620f14611caaa8cb1c063c6e59a4..df16be1f491a58fa0f7b2d1580b3b4fa85f9dcbd 100644 (file)
@@ -234,9 +234,6 @@ c_objc_common_init (filename)
   if (filename == NULL)
     return NULL;
 
-  save_lang_status = &push_c_function_context;
-  restore_lang_status = &pop_c_function_context;
-  mark_lang_status = &mark_c_function_context;
   lang_expand_decl_stmt = c_expand_decl_stmt;
 
   /* These were not defined in the Objective-C front end, but I'm
index 21f1146ff562ef32e947ba3374d11b54ac1678d3..eedaa7aa59342ed95d67cff5a89d84cdff6aaad7 100644 (file)
@@ -206,9 +206,9 @@ extern tree lookup_name                         PARAMS ((tree));
 extern tree lookup_name_current_level          PARAMS ((tree));
 extern void parmlist_tags_warning               PARAMS ((void));
 extern void pending_xref_error                  PARAMS ((void));
-extern void mark_c_function_context             PARAMS ((struct function *));
-extern void push_c_function_context             PARAMS ((struct function *));
-extern void pop_c_function_context              PARAMS ((struct function *));
+extern void c_mark_function_context             PARAMS ((struct function *));
+extern void c_push_function_context             PARAMS ((struct function *));
+extern void c_pop_function_context              PARAMS ((struct function *));
 extern void pop_label_level                     PARAMS ((void));
 extern void push_label_level                    PARAMS ((void));
 extern void push_parm_decl                      PARAMS ((tree));
index 7a139f4d52d47e8339cf1c63f931327b1081d9c5..67c67b8682eecddbb0a6c11b1dec8a3b227eed5a 100644 (file)
@@ -1,3 +1,13 @@
+2002-04-20  Neil Booth  <neil@daikokuya.demon.co.uk>
+
+       * cp-lang.c (LANG_HOOKS_FUNCTION_INIT,
+       LANG_HOOKS_FUNCTION_FREE, LANG_HOOKS_FUNCTION_MARK): Redefine.
+       * cp-tree.h (cxx_push_function_context, cxx_pop_function_context,
+       cxx_mark_function_context): New.
+       * decl.c (push_cp_function_context, pop_cp_function_context,
+       mark_cp_function_context): Rename for consistency.
+       (cxx_init_decl_processing): Don't set old hooks.
+
 2002-04-19  Neil Booth  <neil@daikokuya.demon.co.uk>
 
        * call.c (convert_type_from_ellipsis): Rename, update.
index d37cd111658d3b4e57dc8493c493c088aef9f334..0cca2670679742d251be66baa8830ae7e098fded 100644 (file)
@@ -93,6 +93,13 @@ static bool cxx_warn_unused_global_decl PARAMS ((tree));
 #undef LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL
 #define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL cxx_warn_unused_global_decl
 
+#undef LANG_HOOKS_FUNCTION_INIT
+#define LANG_HOOKS_FUNCTION_INIT cxx_push_function_context
+#undef LANG_HOOKS_FUNCTION_FREE
+#define LANG_HOOKS_FUNCTION_FREE cxx_pop_function_context
+#undef LANG_HOOKS_FUNCTION_MARK
+#define LANG_HOOKS_FUNCTION_MARK cxx_mark_function_context
+
 #undef LANG_HOOKS_TREE_INLINING_WALK_SUBTREES
 #define LANG_HOOKS_TREE_INLINING_WALK_SUBTREES \
   cp_walk_subtrees
index 5b56331f83b4aa5960565b56e40b43823d2a99d8..bdc4b4f9353825b8d46fc6fb6d7d73595dbc5922 100644 (file)
@@ -3658,6 +3658,9 @@ extern void cxx_init_decl_processing              PARAMS ((void));
 extern void cxx_mark_tree                      PARAMS ((tree));
 extern void cxx_insert_default_attributes      PARAMS ((tree));
 extern bool cxx_mark_addressable               PARAMS ((tree));
+extern void cxx_push_function_context          PARAMS ((struct function *));
+extern void cxx_pop_function_context           PARAMS ((struct function *));
+extern void cxx_mark_function_context          PARAMS ((struct function *));
 extern int toplevel_bindings_p                 PARAMS ((void));
 extern int namespace_bindings_p                        PARAMS ((void));
 extern void keep_next_level                    PARAMS ((int));
index ec087983f70e7f69b574fe100fccd11e71238f74..58d93bc143cf2fcac0df8f80b07544aad5fa0c40 100644 (file)
@@ -128,11 +128,8 @@ static void layout_var_decl PARAMS ((tree));
 static void maybe_commonize_var PARAMS ((tree));
 static tree check_initializer PARAMS ((tree, tree));
 static void make_rtl_for_nonlocal_decl PARAMS ((tree, tree, const char *));
-static void push_cp_function_context PARAMS ((struct function *));
-static void pop_cp_function_context PARAMS ((struct function *));
 static void mark_binding_level PARAMS ((void *));
 static void mark_named_label_lists PARAMS ((void *, void *));
-static void mark_cp_function_context PARAMS ((struct function *));
 static void mark_saved_scope PARAMS ((void *));
 static void mark_lang_function PARAMS ((struct cp_language_function *));
 static void save_function_data PARAMS ((tree));
@@ -6481,9 +6478,6 @@ cxx_init_decl_processing ()
   initialize_predefined_identifiers ();
 
   /* Fill in back-end hooks.  */
-  init_lang_status = &push_cp_function_context;
-  free_lang_status = &pop_cp_function_context;
-  mark_lang_status = &mark_cp_function_context;
   lang_missing_noreturn_ok_p = &cp_missing_noreturn_ok_p;
 
   cp_parse_init ();
@@ -14340,7 +14334,7 @@ finish_function (flags)
   if (! nested)
     /* Let the error reporting routines know that we're outside a
        function.  For a nested function, this value is used in
-       pop_cp_function_context and then reset via pop_function_context.  */
+       cxx_pop_function_context and then reset via pop_function_context.  */
     current_function_decl = NULL_TREE;
 
   return fndecl;
@@ -14629,8 +14623,8 @@ revert_static_member_fn (decl)
 /* Initialize the variables used during compilation of a C++
    function.  */
 
-static void
-push_cp_function_context (f)
+void
+cxx_push_function_context (f)
      struct function *f;
 {
   struct cp_language_function *p
@@ -14650,8 +14644,8 @@ push_cp_function_context (f)
 /* Free the language-specific parts of F, now that we've finished
    compiling the function.  */
 
-static void
-pop_cp_function_context (f)
+void
+cxx_pop_function_context (f)
      struct function *f;
 {
   if (f->language)
@@ -14689,8 +14683,8 @@ mark_lang_function (p)
 
 /* Mark the language-specific data in F for GC.  */
 
-static void
-mark_cp_function_context (f)
+void
+cxx_mark_function_context (f)
      struct function *f;
 {
   mark_lang_function ((struct cp_language_function *) f->language);
index ab3654acf4753668332b926976acc2fd99db13bd..e22273d585af8c644c7d11b120ea19fe56a3edaf 100644 (file)
@@ -133,13 +133,6 @@ void (*free_machine_status) PARAMS ((struct function *));
    that will need garbage collection.  */
 void (*mark_machine_status) PARAMS ((struct function *));
 
-/* Likewise, but for language-specific data.  */
-void (*init_lang_status) PARAMS ((struct function *));
-void (*save_lang_status) PARAMS ((struct function *));
-void (*restore_lang_status) PARAMS ((struct function *));
-void (*mark_lang_status) PARAMS ((struct function *));
-void (*free_lang_status) PARAMS ((struct function *));
-
 /* The FUNCTION_DECL for an inline function currently being expanded.  */
 tree inline_function_decl;
 
@@ -328,7 +321,7 @@ find_function_data (decl)
 
 /* Save the current context for compilation of a nested function.
    This is called from language-specific code.  The caller should use
-   the save_lang_status callback to save any language-specific state,
+   the enter_nested langhook to save any language-specific state,
    since this function knows only about language-independent
    variables.  */
 
@@ -357,8 +350,7 @@ push_function_context_to (context)
   outer_function_chain = p;
   p->fixup_var_refs_queue = 0;
 
-  if (save_lang_status)
-    (*save_lang_status) (p);
+  (*lang_hooks.function.enter_nested) (p);
 
   cfun = 0;
 }
@@ -387,8 +379,7 @@ pop_function_context_from (context)
 
   restore_emit_status (p);
 
-  if (restore_lang_status)
-    (*restore_lang_status) (p);
+  (*lang_hooks.function.leave_nested) (p);
 
   /* Finish doing put_var_into_stack for any of our variables which became
      addressable during the nested function.  If only one entry has to be
@@ -441,8 +432,7 @@ free_after_parsing (f)
   /* f->varasm is used by code generation.  */
   /* f->eh->eh_return_stub_label is used by code generation.  */
 
-  if (free_lang_status)
-    (*free_lang_status) (f);
+  (*lang_hooks.function.free) (f);
   free_stmt_status (f);
 }
 
@@ -6301,8 +6291,7 @@ prepare_function_start ()
 
   current_function_outgoing_args_size = 0;
 
-  if (init_lang_status)
-    (*init_lang_status) (cfun);
+  (*lang_hooks.function.init) (cfun);
   if (init_machine_status)
     (*init_machine_status) (cfun);
 }
@@ -8025,8 +8014,7 @@ ggc_mark_struct_function (f)
 
   if (mark_machine_status)
     (*mark_machine_status) (f);
-  if (mark_lang_status)
-    (*mark_lang_status) (f);
+  (*lang_hooks.function.mark) (f);
 
   if (f->original_arg_vector)
     ggc_mark_rtvec ((rtvec) f->original_arg_vector);
index 256364abad3e6809bd0b783b15dcbf9040a290cc..493543d22c1b364d93ba140d84d25cfbec964adf 100644 (file)
@@ -574,13 +574,6 @@ extern void (*free_machine_status) PARAMS ((struct function *));
    that will need garbage collection.  */
 extern void (*mark_machine_status)     PARAMS ((struct function *));
 
-/* Likewise, but for language-specific data.  */
-extern void (*init_lang_status)         PARAMS ((struct function *));
-extern void (*mark_lang_status)                PARAMS ((struct function *));
-extern void (*save_lang_status)                PARAMS ((struct function *));
-extern void (*restore_lang_status)     PARAMS ((struct function *));
-extern void (*free_lang_status)         PARAMS ((struct function *));
-
 /* Save and restore status information for a nested function.  */
 extern void restore_emit_status                PARAMS ((struct function *));
 extern void free_after_parsing         PARAMS ((struct function *));
index abbe734e0574a2db3daa2bb887b6f0bcc2001a7b..c08f753742f92286bfcc2494828749ff9eee14d7 100644 (file)
@@ -41,6 +41,7 @@ extern HOST_WIDE_INT hook_get_alias_set_0     PARAMS ((tree));
 
 extern void lhd_do_nothing PARAMS ((void));
 extern void lhd_do_nothing_t PARAMS ((tree));
+extern void lhd_do_nothing_f PARAMS ((struct function *));
 extern int lhd_decode_option PARAMS ((int, char **));
 extern HOST_WIDE_INT lhd_get_alias_set PARAMS ((tree));
 extern tree lhd_return_tree PARAMS ((tree));
@@ -109,6 +110,12 @@ tree lhd_tree_inlining_convert_parm_for_inlining PARAMS ((tree, tree, tree));
 #define LANG_HOOKS_DECL_PRINTABLE_NAME lhd_decl_printable_name
 #define LANG_HOOKS_SET_YYDEBUG         lhd_set_yydebug
 
+#define LANG_HOOKS_FUNCTION_INIT       lhd_do_nothing_f
+#define LANG_HOOKS_FUNCTION_FREE       lhd_do_nothing_f
+#define LANG_HOOKS_FUNCTION_ENTER_NESTED lhd_do_nothing_f
+#define LANG_HOOKS_FUNCTION_LEAVE_NESTED lhd_do_nothing_f
+#define LANG_HOOKS_FUNCTION_MARK       lhd_do_nothing_f
+
 /* Tree inlining hooks.  */
 #define LANG_HOOKS_TREE_INLINING_WALK_SUBTREES lhd_tree_inlining_walk_subtrees
 #define LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN \
@@ -146,6 +153,14 @@ tree lhd_tree_inlining_convert_parm_for_inlining PARAMS ((tree, tree, tree));
   LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING \
 } \
 
+#define LANG_HOOKS_FUNCTION_INITIALIZER { \
+  LANG_HOOKS_FUNCTION_INIT, \
+  LANG_HOOKS_FUNCTION_FREE, \
+  LANG_HOOKS_FUNCTION_ENTER_NESTED, \
+  LANG_HOOKS_FUNCTION_LEAVE_NESTED, \
+  LANG_HOOKS_FUNCTION_MARK \
+}
+
 /* Tree dump hooks.  */
 int lhd_tree_dump_dump_tree                    PARAMS ((void *, tree));
 int lhd_tree_dump_type_quals                   PARAMS ((tree));
@@ -231,6 +246,7 @@ int lhd_tree_dump_type_quals                        PARAMS ((tree));
   LANG_HOOKS_DECL_PRINTABLE_NAME, \
   LANG_HOOKS_PRINT_ERROR_FUNCTION, \
   LANG_HOOKS_SET_YYDEBUG, \
+  LANG_HOOKS_FUNCTION_INITIALIZER, \
   LANG_HOOKS_TREE_INLINING_INITIALIZER, \
   LANG_HOOKS_TREE_DUMP_INITIALIZER, \
   LANG_HOOKS_DECLS, \
index cc08e465034fd0e330e1a7f9af7ec81b0813c945..0bbb5e33c80a269489355829ea25956e50997f69 100644 (file)
@@ -39,7 +39,7 @@ lhd_do_nothing ()
 {
 }
 
-/* Do nothing.  */
+/* Do nothing (tree).  */
 
 void
 lhd_do_nothing_t (t)
@@ -47,6 +47,14 @@ lhd_do_nothing_t (t)
 {
 }
 
+/* Do nothing (function).  */
+
+void
+lhd_do_nothing_f (f)
+     struct function *f ATTRIBUTE_UNUSED;
+{
+}
+
 /* Do nothing (return the tree node passed).  */
 
 tree
index 5b128a7adaac49d5d7725b9757202e8cba1728a1..4ec27db9217d218ff6a98a47f6fe823987c0322e 100644 (file)
@@ -57,6 +57,26 @@ struct lang_hooks_for_tree_inlining
                                                         union tree_node *));
 };
 
+/* Lang hooks for management of language-specific data or status
+   when entering / leaving functions etc.  */
+struct lang_hooks_for_functions
+{
+  /* Called when entering a function.  */
+  void (*init) PARAMS ((struct function *));
+
+  /* Called when leaving a function.  */
+  void (*free) PARAMS ((struct function *));
+
+  /* Called when entering a nested function.  */
+  void (*enter_nested) PARAMS ((struct function *));
+
+  /* Called when leaving a nested function.  */
+  void (*leave_nested) PARAMS ((struct function *));
+
+  /* Lang-specific function data marking for GC.  */
+  void (*mark) PARAMS ((struct function *));
+};
+
 /* The following hooks are used by tree-dump.c.  */
 
 struct lang_hooks_for_tree_dump
@@ -312,6 +332,9 @@ struct lang_hooks
      warning that the front end does not use such a parser.  */
   void (*set_yydebug) PARAMS ((int));
 
+  /* Function-related language hooks.  */
+  struct lang_hooks_for_functions function;
+
   struct lang_hooks_for_tree_inlining tree_inlining;
   
   struct lang_hooks_for_tree_dump tree_dump;
index fef5196645f16002420fd80b143f8bfb94cd3c6e..e5b160a6eb6e89526df5d10980db09202ffb4760 100644 (file)
@@ -73,6 +73,13 @@ static void objc_post_options                   PARAMS ((void));
 #undef LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL
 #define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL c_warn_unused_global_decl
 
+#undef LANG_HOOKS_FUNCTION_ENTER_NESTED
+#define LANG_HOOKS_FUNCTION_ENTER_NESTED c_push_function_context
+#undef LANG_HOOKS_FUNCTION_LEAVE_NESTED
+#define LANG_HOOKS_FUNCTION_LEAVE_NESTED c_pop_function_context
+#undef LANG_HOOKS_FUNCTION_MARK
+#define LANG_HOOKS_FUNCTION_MARK c_mark_function_context
+
 /* Inlining hooks same as the C front end.  */
 #undef LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN
 #define LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN \