Commit c2a37c55 by Bernd Schmidt Committed by Bernd Schmidt

define_function cleanup

From-SVN: r29360
parent 40c1bf53
1999-09-12 Bernd Schmidt <bernds@cygnus.co.uk>
* cp-tree.h (auto_function, define_function): Adjust prototypes.
* decl.c (define_function): Lose FUNCTION_CODE arg. All callers
changed.
(auto_function): Likewise, for CODE arg.
Move code to set DECL_BUILT_IN and DECL_FUNCTION_CODE to...
(builtin_function): ... here.
1999-09-11 Mark Mitchell <mark@codesourcery.com> 1999-09-11 Mark Mitchell <mark@codesourcery.com>
* cp-tree.def (CLEANUP_STMT): New node. * cp-tree.def (CLEANUP_STMT): New node.
......
...@@ -3177,12 +3177,12 @@ extern tree namespace_ancestor PROTO((tree, tree)); ...@@ -3177,12 +3177,12 @@ extern tree namespace_ancestor PROTO((tree, tree));
extern tree unqualified_namespace_lookup PROTO((tree, int, tree *)); extern tree unqualified_namespace_lookup PROTO((tree, int, tree *));
extern int lookup_using_namespace PROTO((tree, tree, tree, tree, int, tree *)); extern int lookup_using_namespace PROTO((tree, tree, tree, tree, int, tree *));
extern int qualified_lookup_using_namespace PROTO((tree, tree, tree, int)); extern int qualified_lookup_using_namespace PROTO((tree, tree, tree, int));
extern tree auto_function PROTO((tree, tree, enum built_in_function)); extern tree auto_function PROTO((tree, tree));
extern void init_decl_processing PROTO((void)); extern void init_decl_processing PROTO((void));
extern int init_type_desc PROTO((void)); extern int init_type_desc PROTO((void));
extern tree define_function extern tree define_function PROTO((const char *, tree,
PROTO((const char *, tree, enum built_in_function, void (*) (tree),
void (*) (tree), const char *)); const char *));
extern tree check_tag_decl PROTO((tree)); extern tree check_tag_decl PROTO((tree));
extern void shadow_tag PROTO((tree)); extern void shadow_tag PROTO((tree));
extern tree groktypename PROTO((tree)); extern tree groktypename PROTO((tree));
......
...@@ -5947,12 +5947,12 @@ push_overloaded_decl_1 (x) ...@@ -5947,12 +5947,12 @@ push_overloaded_decl_1 (x)
__inline __inline
#endif #endif
tree tree
auto_function (name, type, code) auto_function (name, type)
tree name, type; tree name, type;
enum built_in_function code; enum built_in_function;
{ {
return define_function return define_function
(IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1, (IDENTIFIER_POINTER (name), type, push_overloaded_decl_1,
IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type), IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
0))); 0)));
} }
...@@ -6309,16 +6309,15 @@ init_decl_processing () ...@@ -6309,16 +6309,15 @@ init_decl_processing ()
newtype = build_exception_variant newtype = build_exception_variant
(ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1)); (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
deltype = build_exception_variant (void_ftype_ptr, empty_except_spec); deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
auto_function (ansi_opname[(int) NEW_EXPR], newtype, NOT_BUILT_IN); auto_function (ansi_opname[(int) NEW_EXPR], newtype);
auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype, NOT_BUILT_IN); auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype);
global_delete_fndecl global_delete_fndecl = auto_function (ansi_opname[(int) DELETE_EXPR],
= auto_function (ansi_opname[(int) DELETE_EXPR], deltype, NOT_BUILT_IN); deltype);
auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype, NOT_BUILT_IN); auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype);
} }
abort_fndecl abort_fndecl
= define_function ("__pure_virtual", void_ftype, = define_function ("__pure_virtual", void_ftype, 0, 0);
NOT_BUILT_IN, 0, 0);
/* Perform other language dependent initializations. */ /* Perform other language dependent initializations. */
init_class_processing (); init_class_processing ();
...@@ -6401,17 +6400,14 @@ lang_print_error_function (file) ...@@ -6401,17 +6400,14 @@ lang_print_error_function (file)
/* Make a definition for a builtin function named NAME and whose data type /* Make a definition for a builtin function named NAME and whose data type
is TYPE. TYPE should be a function type with argument types. is TYPE. TYPE should be a function type with argument types.
FUNCTION_CODE tells later passes how to compile calls to this function.
See tree.h for its possible values.
If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME, If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
the name to be called if we can't opencode the function. */ the name to be called if we can't opencode the function. */
tree tree
define_function (name, type, function_code, pfn, library_name) define_function (name, type, pfn, library_name)
const char *name; const char *name;
tree type; tree type;
enum built_in_function function_code;
void (*pfn) PROTO((tree)); void (*pfn) PROTO((tree));
const char *library_name; const char *library_name;
{ {
...@@ -6430,14 +6426,15 @@ define_function (name, type, function_code, pfn, library_name) ...@@ -6430,14 +6426,15 @@ define_function (name, type, function_code, pfn, library_name)
if (library_name) if (library_name)
DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name); DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
make_function_rtl (decl); make_function_rtl (decl);
if (function_code != NOT_BUILT_IN)
{
DECL_BUILT_IN (decl) = 1;
DECL_FUNCTION_CODE (decl) = function_code;
}
return decl; return decl;
} }
/* Wrapper around define_function, for the benefit of
c_common_nodes_and_builtins.
FUNCTION_CODE tells later passes how to compile calls to this function.
See tree.h for its possible values. */
tree tree
builtin_function (name, type, code, libname) builtin_function (name, type, code, libname)
const char *name; const char *name;
...@@ -6445,7 +6442,14 @@ builtin_function (name, type, code, libname) ...@@ -6445,7 +6442,14 @@ builtin_function (name, type, code, libname)
enum built_in_function code; enum built_in_function code;
const char *libname; const char *libname;
{ {
return define_function (name, type, code, (void (*) PROTO((tree)))pushdecl, libname); tree decl = define_function (name, type, (void (*) PROTO((tree)))pushdecl,
libname);
if (code != NOT_BUILT_IN)
{
DECL_BUILT_IN (decl) = 1;
DECL_FUNCTION_CODE (decl) = code;
}
return decl;
} }
/* When we call finish_struct for an anonymous union, we create /* When we call finish_struct for an anonymous union, we create
...@@ -7906,9 +7910,7 @@ destroy_local_static (decl) ...@@ -7906,9 +7910,7 @@ destroy_local_static (decl)
= define_function ("atexit", = define_function ("atexit",
build_function_type (void_type_node, build_function_type (void_type_node,
pfvlist), pfvlist),
NOT_BUILT_IN, /*pfn=*/0, NULL_PTR);
/*pfn=*/0,
NULL_PTR);
mark_used (atexit_fndecl); mark_used (atexit_fndecl);
atexit_node = default_conversion (atexit_fndecl); atexit_node = default_conversion (atexit_fndecl);
pop_lang_context (); pop_lang_context ();
......
...@@ -164,8 +164,7 @@ init_exception_processing () ...@@ -164,8 +164,7 @@ init_exception_processing ()
if (flag_honor_std) if (flag_honor_std)
push_namespace (get_identifier ("std")); push_namespace (get_identifier ("std"));
terminate_node = auto_function (get_identifier ("terminate"), terminate_node = auto_function (get_identifier ("terminate"), vtype);
vtype, NOT_BUILT_IN);
TREE_THIS_VOLATILE (terminate_node) = 1; TREE_THIS_VOLATILE (terminate_node) = 1;
if (flag_honor_std) if (flag_honor_std)
pop_namespace (); pop_namespace ();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment