aboutsummaryrefslogtreecommitdiff
path: root/gcc/objc/objc-gnu-runtime-abi-01.c
diff options
context:
space:
mode:
authorNathan Froyd <froydnj@codesourcery.com>2011-05-06 01:37:00 +0000
committerNathan Froyd <froydnj@gcc.gnu.org>2011-05-06 01:37:00 +0000
commit6174da1b28176c4879ec55581325b4648fc72096 (patch)
tree06eefaee175f6f613c49a5e5b8325691f5b90bdc /gcc/objc/objc-gnu-runtime-abi-01.c
parent9eb21cfca6bdbc70fe9deab875a93a8217a20434 (diff)
downloadgcc-6174da1b28176c4879ec55581325b4648fc72096.zip
gcc-6174da1b28176c4879ec55581325b4648fc72096.tar.gz
gcc-6174da1b28176c4879ec55581325b4648fc72096.tar.bz2
don't use build_function_type in the ObjC/C++ frontends
don't use build_function_type in the ObjC/C++ frontends * objc-runtime-shared-support.h (get_arg_type_list): Delete. (build_function_type_for_method): Declare. * objc-runtime-hooks.h (struct _objc_runtime_hooks_r): Change type of get_arg_type_base_list field. * objc-act.h (OBJC_VOID_AT_END): Delete. * objc-act.c (get_arg_type_list): Delete. (build_function_type_for_method): New function. (objc_decl_method_attributes): Call build_function_type_for_method. (really_start_method): Likewise. * objc-gnu-runtime-abi-01.c (gnu_runtime_abi_01_get_type_arg_list_base): Change prototype and adjust function accordingly. Update header comment. (build_objc_method_call): Call build_function_type_for_method. * objc-next-runtime-abi-01.c (next_runtime_abi_01_get_type_arg_list_base): Change prototype and adjust function accordingly. Update header comment. (build_objc_method_call): Call build_function_type_for_method. * objc-next-runtime-abi-02.c (next_runtime_abi_02_get_type_arg_list_base): Change prototype and adjust function accordingly. Update header comment. (objc_copy_to_temp_side_effect_params): Take fntype instead of a typelist. Use function_args_iterator for traversing fntype. (build_v2_build_objc_method_call): Adjust call to it. Call build_function_type_for_method From-SVN: r173465
Diffstat (limited to 'gcc/objc/objc-gnu-runtime-abi-01.c')
-rw-r--r--gcc/objc/objc-gnu-runtime-abi-01.c37
1 files changed, 19 insertions, 18 deletions
diff --git a/gcc/objc/objc-gnu-runtime-abi-01.c b/gcc/objc/objc-gnu-runtime-abi-01.c
index 863f7d6..d21f2e9 100644
--- a/gcc/objc/objc-gnu-runtime-abi-01.c
+++ b/gcc/objc/objc-gnu-runtime-abi-01.c
@@ -103,7 +103,8 @@ static tree gnu_runtime_abi_01_get_class_super_ref (location_t, struct imp_entry
static tree gnu_runtime_abi_01_get_category_super_ref (location_t, struct imp_entry *, bool);
static tree gnu_runtime_abi_01_receiver_is_class_object (tree);
-static tree gnu_runtime_abi_01_get_arg_type_list_base (tree, int, int);
+static void gnu_runtime_abi_01_get_arg_type_list_base (VEC(tree,gc) **, tree,
+ int, int);
static tree gnu_runtime_abi_01_build_objc_method_call (location_t, tree, tree,
tree, tree, tree, int);
@@ -577,27 +578,28 @@ gnu_runtime_abi_01_get_class_reference (tree ident)
return build_function_call (input_location, objc_get_class_decl, params);
}
-/* Used by get_arg_type_list.
- Return the types for receiver & _cmd at the start of a method argument list.
- context is either METHOD_DEF or METHOD_REF, saying whether we are trying
- to define a method or call one. superflag says this is for a send to super.
- meth may be NULL, in the case that there is no prototype. */
+/* Used by build_function_type_for_method. Append the types for
+ receiver & _cmd at the start of a method argument list to ARGTYPES.
+ CONTEXT is either METHOD_DEF or METHOD_REF, saying whether we are
+ trying to define a method or call one. SUPERFLAG says this is for a
+ send to super. METH may be NULL, in the case that there is no
+ prototype. */
-static tree
-gnu_runtime_abi_01_get_arg_type_list_base (tree meth, int context,
+static void
+gnu_runtime_abi_01_get_arg_type_list_base (VEC(tree,gc) **argtypes, tree meth,
+ int context,
int superflag ATTRIBUTE_UNUSED)
{
- tree arglist;
+ tree receiver_type;
- /* Receiver type. */
if (context == METHOD_DEF && TREE_CODE (meth) == INSTANCE_METHOD_DECL)
- arglist = build_tree_list (NULL_TREE, objc_instance_type);
+ receiver_type = objc_instance_type;
else
- arglist = build_tree_list (NULL_TREE, objc_object_type);
+ receiver_type = objc_object_type;
+ VEC_safe_push (tree, gc, *argtypes, receiver_type);
/* Selector type - will eventually change to `int'. */
- chainon (arglist, build_tree_list (NULL_TREE, objc_selector_type));
- return arglist;
+ VEC_safe_push (tree, gc, *argtypes, objc_selector_type);
}
/* Unused for GNU runtime. */
@@ -672,10 +674,9 @@ build_objc_method_call (location_t loc, int super_flag, tree method_prototype,
= (method_prototype
? TREE_VALUE (TREE_TYPE (method_prototype))
: objc_object_type);
-
- tree method_param_types =
- get_arg_type_list (method_prototype, METHOD_REF, super_flag);
- tree ftype = build_function_type (ret_type, method_param_types);
+ tree ftype
+ = build_function_type_for_method (ret_type, method_prototype,
+ METHOD_REF, super_flag);
tree sender_cast;
tree method, t;