aboutsummaryrefslogtreecommitdiff
path: root/gcc/langhooks.h
diff options
context:
space:
mode:
authorNeil Booth <neil@cat.daikokuya.demon.co.uk>2001-11-06 21:12:14 +0000
committerNeil Booth <neil@gcc.gnu.org>2001-11-06 21:12:14 +0000
commitd23c55c28c57c7e60d3fa9a0b252b9a1229c99fc (patch)
treee218294f121610ce23014b4b8954bac5d7230fd8 /gcc/langhooks.h
parent80f9249adae5fd98b349c0c72d8eb43f21ec44e9 (diff)
downloadgcc-d23c55c28c57c7e60d3fa9a0b252b9a1229c99fc.zip
gcc-d23c55c28c57c7e60d3fa9a0b252b9a1229c99fc.tar.gz
gcc-d23c55c28c57c7e60d3fa9a0b252b9a1229c99fc.tar.bz2
Clean up langhooks
* alias.c:: Include langhooks.h. * emit-rtl.c: Similarly. * toplev.c: Similarly. * tree-inline.c: Similarly. * langhooks-def.h: New, the old langhooks.h. Give the default hooks a common prefix. * langhooks.h: Contents extracted from toplev.h. * toplev.h: Move langhook stuff to langhooks.h. * langhooks.c: Give default hooks a common prefix. * c-lang.c: Include langhooks-def.h. * ada/misc.c: Similarly. * cp/cp-lang.c: Similarly. * f/com.c: Similarly. * java/lang.c: Similarly. * objc/objc-act.c: Similarly. * Makefile.in: Update. * ada/Makefile.in: Similarly. * cp/Make-lang.in: Similarly. * f/Make-lang.in: Similarly. * java/Make-lang.in: Similarly. * objc/Make-lang.in: Similarly. From-SVN: r46813
Diffstat (limited to 'gcc/langhooks.h')
-rw-r--r--gcc/langhooks.h158
1 files changed, 69 insertions, 89 deletions
diff --git a/gcc/langhooks.h b/gcc/langhooks.h
index d844cdb..2f97b7a 100644
--- a/gcc/langhooks.h
+++ b/gcc/langhooks.h
@@ -1,6 +1,5 @@
-/* Default macros to initialize the lang_hooks data structure.
+/* The lang_hooks data structure.
Copyright 2001 Free Software Foundation, Inc.
- Contributed by Alexandre Oliva <aoliva@redhat.com>
This file is part of GNU CC.
@@ -22,92 +21,73 @@ Boston, MA 02111-1307, USA. */
#ifndef GCC_LANG_HOOKS_H
#define GCC_LANG_HOOKS_H
-/* Provide a hook routine for alias sets that always returns 1. This is
- used by languages that haven't deal with alias sets yet. */
-extern HOST_WIDE_INT hook_get_alias_set_0 PARAMS ((tree));
-
-/* Note to creators of new hooks:
-
- The macros in this file should NOT be surrounded by a
- #ifdef...#endif pair, since this file declares the defaults. Each
- front end overrides any hooks it wishes to, in the file containing
- its struct lang_hooks, AFTER including this file. */
-
-/* See toplev.h for the definition and documentation of each hook. */
-
-extern void lang_hook_default_do_nothing PARAMS ((void));
-extern int lang_hook_default_decode_option PARAMS ((int, char **));
-extern HOST_WIDE_INT lang_hook_default_get_alias_set PARAMS ((tree));
-extern void lang_hook_default_clear_binding_stack PARAMS ((void));
-
-#define LANG_HOOKS_INIT lang_hook_default_do_nothing
-#define LANG_HOOKS_FINISH lang_hook_default_do_nothing
-#define LANG_HOOKS_CLEAR_BINDING_STACK lang_hook_default_clear_binding_stack
-#define LANG_HOOKS_INIT_OPTIONS lang_hook_default_do_nothing
-#define LANG_HOOKS_DECODE_OPTION lang_hook_default_decode_option
-#define LANG_HOOKS_POST_OPTIONS lang_hook_default_do_nothing
-#define LANG_HOOKS_GET_ALIAS_SET lang_hook_default_get_alias_set
-
-#define LANG_HOOKS_HONOR_READONLY false
-
-/* Declarations of default tree inlining hooks. */
-tree tree_inlining_default_hook_walk_subtrees PARAMS ((tree *, int *,
- walk_tree_fn,
- void *,
- void *));
-int tree_inlining_default_hook_cannot_inline_tree_fn PARAMS ((tree *));
-int tree_inlining_default_hook_disregard_inline_limits PARAMS ((tree));
-tree tree_inlining_default_hook_add_pending_fn_decls PARAMS ((void *,
- tree));
-int tree_inlining_default_hook_tree_chain_matters_p PARAMS ((tree));
-int tree_inlining_default_hook_auto_var_in_fn_p PARAMS ((tree, tree));
-tree tree_inlining_default_hook_copy_res_decl_for_inlining PARAMS ((tree, tree,
- tree,
- void *,
- int *,
- void *));
-int tree_inlining_default_hook_anon_aggr_type_p PARAMS ((tree));
-
-/* Tree inlining hooks. */
-#define LANG_HOOKS_TREE_INLINING_WALK_SUBTREES \
- tree_inlining_default_hook_walk_subtrees
-#define LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN \
- tree_inlining_default_hook_cannot_inline_tree_fn
-#define LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS \
- tree_inlining_default_hook_disregard_inline_limits
-#define LANG_HOOKS_TREE_INLINING_ADD_PENDING_FN_DECLS \
- tree_inlining_default_hook_add_pending_fn_decls
-#define LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P \
- tree_inlining_default_hook_tree_chain_matters_p
-#define LANG_HOOKS_TREE_INLINING_AUTO_VAR_IN_FN_P \
- tree_inlining_default_hook_auto_var_in_fn_p
-#define LANG_HOOKS_TREE_INLINING_COPY_RES_DECL_FOR_INLINING \
- tree_inlining_default_hook_copy_res_decl_for_inlining
-#define LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P \
- tree_inlining_default_hook_anon_aggr_type_p
-
-#define LANG_HOOKS_TREE_INLINING_INITIALIZER { \
- LANG_HOOKS_TREE_INLINING_WALK_SUBTREES, \
- LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN, \
- LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS, \
- LANG_HOOKS_TREE_INLINING_ADD_PENDING_FN_DECLS, \
- LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P, \
- LANG_HOOKS_TREE_INLINING_AUTO_VAR_IN_FN_P, \
- LANG_HOOKS_TREE_INLINING_COPY_RES_DECL_FOR_INLINING, \
- LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P \
-} \
-
-/* The whole thing. The structure is defined in toplev.h. */
-#define LANG_HOOKS_INITIALIZER { \
- LANG_HOOKS_INIT, \
- LANG_HOOKS_FINISH, \
- LANG_HOOKS_CLEAR_BINDING_STACK, \
- LANG_HOOKS_INIT_OPTIONS, \
- LANG_HOOKS_DECODE_OPTION, \
- LANG_HOOKS_POST_OPTIONS, \
- LANG_HOOKS_GET_ALIAS_SET, \
- LANG_HOOKS_HONOR_READONLY, \
- LANG_HOOKS_TREE_INLINING_INITIALIZER \
-}
+/* The following hooks are documented in langhooks.c. Must not be
+ NULL. */
+
+struct lang_hooks_for_tree_inlining
+{
+ union tree_node *(*walk_subtrees) PARAMS ((union tree_node **, int *,
+ union tree_node *(*)
+ (union tree_node **,
+ int *, void *),
+ void *, void *));
+ int (*cannot_inline_tree_fn) PARAMS ((union tree_node **));
+ int (*disregard_inline_limits) PARAMS ((union tree_node *));
+ union tree_node *(*add_pending_fn_decls) PARAMS ((void *,
+ union tree_node *));
+ int (*tree_chain_matters_p) PARAMS ((union tree_node *));
+ int (*auto_var_in_fn_p) PARAMS ((union tree_node *, union tree_node *));
+ union tree_node *(*copy_res_decl_for_inlining) PARAMS ((union tree_node *,
+ union tree_node *,
+ union tree_node *,
+ void *, int *,
+ void *));
+ int (*anon_aggr_type_p) PARAMS ((union tree_node *));
+};
+
+/* Language-specific hooks. See langhooks-def.h for defaults. */
+
+struct lang_hooks
+{
+ /* Called first, to initialize the front end. */
+ void (*init) PARAMS ((void));
+
+ /* Called last, as a finalizer. */
+ void (*finish) PARAMS ((void));
+
+ /* Called immediately after parsing to clear the binding stack. */
+ void (*clear_binding_stack) PARAMS ((void));
+
+ /* Called to initialize options, before any calls to decode_option. */
+ void (*init_options) PARAMS ((void));
+
+ /* Function called with an option vector as argument, to decode a
+ single option (typically starting with -f or -W or +). It should
+ return the number of command-line arguments it uses if it handles
+ the option, or 0 and not complain if it does not recognise the
+ option. If this function returns a negative number, then its
+ absolute value is the number of command-line arguments used, but,
+ in addition, no language-independent option processing should be
+ done for this option. */
+ int (*decode_option) PARAMS ((int, char **));
+
+ /* Called when all command line options have been processed. */
+ void (*post_options) PARAMS ((void));
+
+ /* Called to obtain the alias set to be used for an expression or type.
+ Returns -1 if the language does nothing special for it. */
+ HOST_WIDE_INT (*get_alias_set) PARAMS ((tree));
+
+ /* Nonzero if TYPE_READONLY and TREE_READONLY should always be honored. */
+ bool honor_readonly;
+
+ struct lang_hooks_for_tree_inlining tree_inlining;
+
+ /* Whenever you add entries here, make sure you adjust langhooks.h
+ and langhooks.c accordingly. */
+};
+
+/* Each front end provides its own. */
+extern struct lang_hooks lang_hooks;
#endif /* GCC_LANG_HOOKS_H */