summaryrefslogtreecommitdiff
path: root/gcc/c-lang.c
diff options
context:
space:
mode:
authorneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>2001-12-17 22:43:55 +0000
committerneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>2001-12-17 22:43:55 +0000
commit4cfbaf39ebd23c88866edd52097070e46bac189a (patch)
treed63648bac97b145754a00dc4c1d8593cc1d3ae79 /gcc/c-lang.c
parent9938224ec3c3bbe175b5eb1d846a650e49e4bd3d (diff)
downloadgcc-4cfbaf39ebd23c88866edd52097070e46bac189a.tar.gz
* Makefile.in: Update dependencies.
* c-lang.c: Remove unnecessary includes. (deferred_fns, start_cdtor, finish_cdtor, defer_fn): Move to c-objc-common.c. (finish_file): Move body to c_common_finish_file. * c-objc-common.c: Include varray.h and ggc.h. (deferred_fns, start_cdtor, finish_cdtor, defer_fn, expand_deferred_fns, c_objc_common_finish_file): Moved from c-lang.c. (c_objc_common_init): Initialize deferred function array. * c-tree.h (c_objc_common_finish_file, static_ctors, static_dtors): New. objc: * Make-lang.in: Update dependencies. * objc/objc-act.c: Don't include varray.h. (defer_fn, deferred_fns): Move to c-objc-common.c. (objc_init): Similarly for initialization of it. (finish_file): Move some to c-objc-common.c, use c_objc_common_finish_file. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@48134 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/c-lang.c')
-rw-r--r--gcc/c-lang.c129
1 files changed, 2 insertions, 127 deletions
diff --git a/gcc/c-lang.c b/gcc/c-lang.c
index 6e4c158dcb4..497d32af122 100644
--- a/gcc/c-lang.c
+++ b/gcc/c-lang.c
@@ -23,14 +23,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "config.h"
#include "system.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 "varray.h"
#include "langhooks.h"
#include "langhooks-def.h"
@@ -78,8 +71,6 @@ static void c_post_options PARAMS ((void));
/* Each front end provides its own. */
const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
-static varray_type deferred_fns;
-
/* Post-switch processing. */
static void
c_post_options ()
@@ -97,12 +88,7 @@ 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;
+ return c_objc_common_init (filename);
}
/* Used by c-lex.c, but only for objc. */
@@ -157,119 +143,8 @@ lookup_objc_ivar (id)
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;
-{
- 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);
- }
-
- {
- int flags;
- FILE *stream = dump_begin (TDI_all, &flags);
-
- if (stream)
- {
- dump_node (getdecls (), flags & ~TDF_SLIM, stream);
- dump_end (TDI_all, stream);
- }
- }
+ c_objc_common_finish_file ();
}