Commit 6174da1b by Nathan Froyd Committed by Nathan Froyd

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
parent 9eb21cfc
2011-05-05 Nathan Froyd <froydnj@codesourcery.com>
* 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
2011-05-05 Joseph Myers <joseph@codesourcery.com> 2011-05-05 Joseph Myers <joseph@codesourcery.com>
* objc-act.c (objc_start_method_definition): Add parameter expr. * objc-act.c (objc_start_method_definition): Add parameter expr.
......
...@@ -5043,8 +5043,9 @@ objc_decl_method_attributes (tree *node, tree attributes, int flags) ...@@ -5043,8 +5043,9 @@ objc_decl_method_attributes (tree *node, tree attributes, int flags)
(by setting TREE_DEPRECATED and TREE_THIS_VOLATILE) so there (by setting TREE_DEPRECATED and TREE_THIS_VOLATILE) so there
is nothing to do. */ is nothing to do. */
tree saved_type = TREE_TYPE (*node); tree saved_type = TREE_TYPE (*node);
TREE_TYPE (*node) = build_function_type TREE_TYPE (*node)
(TREE_VALUE (saved_type), get_arg_type_list (*node, METHOD_REF, 0)); = build_function_type_for_method (TREE_VALUE (saved_type), *node,
METHOD_REF, 0);
decl_attributes (node, filtered_attributes, flags); decl_attributes (node, filtered_attributes, flags);
METHOD_TYPE_ATTRIBUTES (*node) = TYPE_ATTRIBUTES (TREE_TYPE (*node)); METHOD_TYPE_ATTRIBUTES (*node) = TYPE_ATTRIBUTES (TREE_TYPE (*node));
TREE_TYPE (*node) = saved_type; TREE_TYPE (*node) = saved_type;
...@@ -5057,60 +5058,66 @@ objc_method_decl (enum tree_code opcode) ...@@ -5057,60 +5058,66 @@ objc_method_decl (enum tree_code opcode)
return opcode == INSTANCE_METHOD_DECL || opcode == CLASS_METHOD_DECL; return opcode == INSTANCE_METHOD_DECL || opcode == CLASS_METHOD_DECL;
} }
/* Used by `build_objc_method_call'. Return an argument list for /* Return a function type for METHOD with RETURN_TYPE. CONTEXT is
method METH. CONTEXT is either METHOD_DEF or METHOD_REF, saying either METHOD_DEF or METHOD_REF, indicating whether we are defining a
whether we are trying to define a method or call one. SUPERFLAG method or calling one. SUPER_FLAG indicates whether this is a send
says this is for a send to super; this makes a difference for the to super; this makes a difference for the NeXT calling sequence in
NeXT calling sequence in which the lookup and the method call are which the lookup and the method call are done together. If METHOD is
done together. If METH is null, user-defined arguments (i.e., NULL, user-defined arguments (i.e., beyond self and _cmd) shall be
beyond self and _cmd) shall be represented by `...'. */ represented as varargs. */
tree tree
get_arg_type_list (tree meth, int context, int superflag) build_function_type_for_method (tree return_type, tree method,
int context, bool super_flag)
{ {
tree arglist, akey; VEC(tree,gc) *argtypes = make_tree_vector ();
tree t, ftype;
bool is_varargs = false;
/* Receiver & _cmd types are runtime-dependent. */ (*runtime.get_arg_type_list_base) (&argtypes, method, context, super_flag);
arglist = (*runtime.get_arg_type_list_base) (meth, context, superflag);
/* No actual method prototype given -- assume that remaining arguments /* No actual method prototype given; remaining args passed as varargs. */
are `...'. */ if (method == NULL_TREE)
if (!meth) {
return arglist; is_varargs = true;
goto build_ftype;
}
/* Build a list of argument types. */ for (t = METHOD_SEL_ARGS (method); t; t = DECL_CHAIN (t))
for (akey = METHOD_SEL_ARGS (meth); akey; akey = DECL_CHAIN (akey))
{ {
tree arg_type = TREE_VALUE (TREE_TYPE (akey)); tree arg_type = TREE_VALUE (TREE_TYPE (t));
/* Decay argument types for the underlying C function as appropriate. */ /* Decay argument types for the underlying C function as
appropriate. */
arg_type = objc_decay_parm_type (arg_type); arg_type = objc_decay_parm_type (arg_type);
chainon (arglist, build_tree_list (NULL_TREE, arg_type)); VEC_safe_push (tree, gc, argtypes, arg_type);
} }
if (METHOD_ADD_ARGS (meth)) if (METHOD_ADD_ARGS (method))
{ {
for (akey = TREE_CHAIN (METHOD_ADD_ARGS (meth)); for (t = TREE_CHAIN (METHOD_ADD_ARGS (method));
akey; akey = TREE_CHAIN (akey)) t; t = TREE_CHAIN (t))
{ {
tree arg_type = TREE_TYPE (TREE_VALUE (akey)); tree arg_type = TREE_TYPE (TREE_VALUE (t));
arg_type = objc_decay_parm_type (arg_type); arg_type = objc_decay_parm_type (arg_type);
chainon (arglist, build_tree_list (NULL_TREE, arg_type)); VEC_safe_push (tree, gc, argtypes, arg_type);
} }
if (!METHOD_ADD_ARGS_ELLIPSIS_P (meth)) if (METHOD_ADD_ARGS_ELLIPSIS_P (method))
goto lack_of_ellipsis; is_varargs = true;
} }
build_ftype:
if (is_varargs)
ftype = build_varargs_function_type_vec (return_type, argtypes);
else else
{ ftype = build_function_type_vec (return_type, argtypes);
lack_of_ellipsis:
chainon (arglist, OBJC_VOID_AT_END);
}
return arglist; release_tree_vector (argtypes);
return ftype;
} }
static tree static tree
...@@ -8700,9 +8707,7 @@ really_start_method (tree method, ...@@ -8700,9 +8707,7 @@ really_start_method (tree method,
push_lang_context (lang_name_c); push_lang_context (lang_name_c);
#endif #endif
meth_type meth_type = build_function_type_for_method (ret_type, method, METHOD_DEF, 0);
= build_function_type (ret_type,
get_arg_type_list (method, METHOD_DEF, 0));
objc_start_function (method_id, meth_type, NULL_TREE, parmlist); objc_start_function (method_id, meth_type, NULL_TREE, parmlist);
/* Set self_decl from the first argument. */ /* Set self_decl from the first argument. */
......
...@@ -665,8 +665,6 @@ typedef enum string_section ...@@ -665,8 +665,6 @@ typedef enum string_section
#define OBJC_MODIFIER_TRANSIENT 0x00000200 #define OBJC_MODIFIER_TRANSIENT 0x00000200
#define OBJC_MODIFIER_NONE_SPECIFIED 0x80000000 #define OBJC_MODIFIER_NONE_SPECIFIED 0x80000000
#define OBJC_VOID_AT_END void_list_node
/* Exception handling constructs. We begin by having the parser do most /* Exception handling constructs. We begin by having the parser do most
of the work and passing us blocks. of the work and passing us blocks.
This allows us to handle different exceptions implementations. */ This allows us to handle different exceptions implementations. */
......
...@@ -103,7 +103,8 @@ static tree gnu_runtime_abi_01_get_class_super_ref (location_t, struct imp_entry ...@@ -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_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_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, static tree gnu_runtime_abi_01_build_objc_method_call (location_t, tree, tree,
tree, tree, tree, int); tree, tree, tree, int);
...@@ -577,27 +578,28 @@ gnu_runtime_abi_01_get_class_reference (tree ident) ...@@ -577,27 +578,28 @@ gnu_runtime_abi_01_get_class_reference (tree ident)
return build_function_call (input_location, objc_get_class_decl, params); return build_function_call (input_location, objc_get_class_decl, params);
} }
/* Used by get_arg_type_list. /* Used by build_function_type_for_method. Append the types for
Return the types for receiver & _cmd at the start of a method argument list. 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 CONTEXT is either METHOD_DEF or METHOD_REF, saying whether we are
to define a method or call one. superflag says this is for a send to super. trying to define a method or call one. SUPERFLAG says this is for a
meth may be NULL, in the case that there is no prototype. */ send to super. METH may be NULL, in the case that there is no
prototype. */
static tree static void
gnu_runtime_abi_01_get_arg_type_list_base (tree meth, int context, gnu_runtime_abi_01_get_arg_type_list_base (VEC(tree,gc) **argtypes, tree meth,
int context,
int superflag ATTRIBUTE_UNUSED) int superflag ATTRIBUTE_UNUSED)
{ {
tree arglist; tree receiver_type;
/* Receiver type. */
if (context == METHOD_DEF && TREE_CODE (meth) == INSTANCE_METHOD_DECL) 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 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'. */ /* Selector type - will eventually change to `int'. */
chainon (arglist, build_tree_list (NULL_TREE, objc_selector_type)); VEC_safe_push (tree, gc, *argtypes, objc_selector_type);
return arglist;
} }
/* Unused for GNU runtime. */ /* Unused for GNU runtime. */
...@@ -672,10 +674,9 @@ build_objc_method_call (location_t loc, int super_flag, tree method_prototype, ...@@ -672,10 +674,9 @@ build_objc_method_call (location_t loc, int super_flag, tree method_prototype,
= (method_prototype = (method_prototype
? TREE_VALUE (TREE_TYPE (method_prototype)) ? TREE_VALUE (TREE_TYPE (method_prototype))
: objc_object_type); : objc_object_type);
tree ftype
tree method_param_types = = build_function_type_for_method (ret_type, method_prototype,
get_arg_type_list (method_prototype, METHOD_REF, super_flag); METHOD_REF, super_flag);
tree ftype = build_function_type (ret_type, method_param_types);
tree sender_cast; tree sender_cast;
tree method, t; tree method, t;
......
...@@ -123,7 +123,8 @@ static tree next_runtime_abi_01_get_class_super_ref (location_t, struct imp_entr ...@@ -123,7 +123,8 @@ static tree next_runtime_abi_01_get_class_super_ref (location_t, struct imp_entr
static tree next_runtime_abi_01_get_category_super_ref (location_t, struct imp_entry *, bool); static tree next_runtime_abi_01_get_category_super_ref (location_t, struct imp_entry *, bool);
static tree next_runtime_abi_01_receiver_is_class_object (tree); static tree next_runtime_abi_01_receiver_is_class_object (tree);
static tree next_runtime_abi_01_get_arg_type_list_base (tree, int, int); static void next_runtime_abi_01_get_arg_type_list_base (VEC(tree,gc) **, tree,
int, int);
static tree next_runtime_abi_01_build_objc_method_call (location_t, tree, tree, static tree next_runtime_abi_01_build_objc_method_call (location_t, tree, tree,
tree, tree, tree, int); tree, tree, tree, int);
static bool next_runtime_abi_01_setup_const_string_class_decl (void); static bool next_runtime_abi_01_setup_const_string_class_decl (void);
...@@ -721,28 +722,29 @@ next_runtime_abi_01_get_class_reference (tree ident) ...@@ -721,28 +722,29 @@ next_runtime_abi_01_get_class_reference (tree ident)
} }
} }
/* Used by get_arg_type_list. /* Used by build_function_type_for_method. Append the types for
Return the types for receiver & _cmd at the start of a method argument list. 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 CONTEXT is either METHOD_DEF or METHOD_REF, saying whether we are
to define a method or call one. superflag says this is for a send to super. trying to define a method or call one. SUPERFLAG says this is for a
meth may be NULL, in the case that there is no prototype. */ send to super. METH may be NULL, in the case that there is no
prototype. */
static tree static void
next_runtime_abi_01_get_arg_type_list_base (tree meth, int context, int superflag) next_runtime_abi_01_get_arg_type_list_base (VEC(tree,gc) **argtypes, tree meth,
int context, int superflag)
{ {
tree arglist; tree receiver_type;
/* Receiver type. */
if (superflag) if (superflag)
arglist = build_tree_list (NULL_TREE, objc_super_type); receiver_type = objc_super_type;
else if (context == METHOD_DEF && TREE_CODE (meth) == INSTANCE_METHOD_DECL) else 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 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'. */ /* Selector type - will eventually change to `int'. */
chainon (arglist, build_tree_list (NULL_TREE, objc_selector_type)); VEC_safe_push (tree, gc, *argtypes, objc_selector_type);
return arglist;
} }
static tree static tree
...@@ -828,10 +830,8 @@ build_objc_method_call (location_t loc, int super_flag, tree method_prototype, ...@@ -828,10 +830,8 @@ build_objc_method_call (location_t loc, int super_flag, tree method_prototype,
= (method_prototype = (method_prototype
? TREE_VALUE (TREE_TYPE (method_prototype)) ? TREE_VALUE (TREE_TYPE (method_prototype))
: objc_object_type); : objc_object_type);
tree ftype = build_function_type_for_method (ret_type, method_prototype,
tree method_param_types = METHOD_REF, super_flag);
get_arg_type_list (method_prototype, METHOD_REF, super_flag);
tree ftype = build_function_type (ret_type, method_param_types);
if (method_prototype && METHOD_TYPE_ATTRIBUTES (method_prototype)) if (method_prototype && METHOD_TYPE_ATTRIBUTES (method_prototype))
ftype = build_type_attribute_variant (ftype, ftype = build_type_attribute_variant (ftype,
......
...@@ -213,7 +213,8 @@ static tree next_runtime_abi_02_get_class_super_ref (location_t, struct imp_entr ...@@ -213,7 +213,8 @@ static tree next_runtime_abi_02_get_class_super_ref (location_t, struct imp_entr
static tree next_runtime_abi_02_get_category_super_ref (location_t, struct imp_entry *, bool); static tree next_runtime_abi_02_get_category_super_ref (location_t, struct imp_entry *, bool);
static tree next_runtime_abi_02_receiver_is_class_object (tree); static tree next_runtime_abi_02_receiver_is_class_object (tree);
static tree next_runtime_abi_02_get_arg_type_list_base (tree, int, int); static void next_runtime_abi_02_get_arg_type_list_base (VEC(tree,gc) **, tree,
int, int);
static tree next_runtime_abi_02_build_objc_method_call (location_t, tree, tree, static tree next_runtime_abi_02_build_objc_method_call (location_t, tree, tree,
tree, tree, tree, int); tree, tree, tree, int);
static bool next_runtime_abi_02_setup_const_string_class_decl (void); static bool next_runtime_abi_02_setup_const_string_class_decl (void);
...@@ -1098,31 +1099,32 @@ next_runtime_abi_02_get_class_reference (tree ident) ...@@ -1098,31 +1099,32 @@ next_runtime_abi_02_get_class_reference (tree ident)
} }
} }
/* Used by get_arg_type_list. /* Used by build_function_type_for_method. Append the types for
Return the types for receiver & _cmd at the start of a method receiver & _cmd at the start of a method argument list to ARGTYPES.
argument list. context is either METHOD_DEF or METHOD_REF, saying CONTEXT is either METHOD_DEF or METHOD_REF, saying whether we are
whether we are trying to define a method or call one. superflag trying to define a method or call one. SUPERFLAG says this is for a
says this is for a send to super. meth may be NULL, in the case send to super. METH may be NULL, in the case that there is no
that there is no prototype. */ prototype. */
static tree static void
next_runtime_abi_02_get_arg_type_list_base (tree meth, int context, int superflag) next_runtime_abi_02_get_arg_type_list_base (VEC(tree,gc) **argtypes, tree meth,
int context, int superflag)
{ {
tree arglist; tree receiver_type;
/* Receiver type. */
if (superflag) if (superflag)
arglist = build_tree_list (NULL_TREE, objc_super_type); receiver_type = objc_super_type;
else if (context == METHOD_DEF && TREE_CODE (meth) == INSTANCE_METHOD_DECL) else 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 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'. */ /* Selector type - will eventually change to `int'. */
chainon (arglist, build_tree_list (NULL_TREE, VEC_safe_push (tree, gc, *argtypes,
(superflag ? objc_v2_super_selector_type (superflag
: objc_v2_selector_type))); ? objc_v2_super_selector_type
return arglist; : objc_v2_selector_type));
} }
/* TODO: Merge this with the message refs. */ /* TODO: Merge this with the message refs. */
...@@ -1539,23 +1541,26 @@ next_runtime_abi_02_receiver_is_class_object (tree receiver) ...@@ -1539,23 +1541,26 @@ next_runtime_abi_02_receiver_is_class_object (tree receiver)
return NULL_TREE; return NULL_TREE;
} }
/* Assign all arguments in VALUES which have side-effect to a /* Assign all arguments in VALUES which have side-effect to a temporary
temporary and replaced that argument in VALUES list with the and replaced that argument in VALUES list with the temporary. The
temporary. TYPELIST is the list of argument types. */ arguments will be passed to a function with FNTYPE. */
static tree static tree
objc_copy_to_temp_side_effect_params (tree typelist, tree values) objc_copy_to_temp_side_effect_params (tree fntype, tree values)
{ {
tree valtail, typetail; tree valtail;
function_args_iterator iter;
/* Skip over receiver and the &_msf_ref types. */ /* Skip over receiver and the &_msf_ref types. */
gcc_assert (TREE_CHAIN (typelist)); function_args_iter_init (&iter, fntype);
typetail = TREE_CHAIN (TREE_CHAIN (typelist)); function_args_iter_next (&iter);
function_args_iter_next (&iter);
for (valtail = values; valtail; for (valtail = values; valtail;
valtail = TREE_CHAIN (valtail), typetail = TREE_CHAIN (typetail)) valtail = TREE_CHAIN (valtail), function_args_iter_next (&iter))
{ {
tree value = TREE_VALUE (valtail); tree value = TREE_VALUE (valtail);
tree type = typetail ? TREE_VALUE (typetail) : NULL_TREE; tree type = function_args_iter_cond (&iter);
if (type == NULL_TREE) if (type == NULL_TREE)
break; break;
if (!TREE_SIDE_EFFECTS (value)) if (!TREE_SIDE_EFFECTS (value))
...@@ -1583,10 +1588,8 @@ build_v2_build_objc_method_call (int super_flag, tree method_prototype, ...@@ -1583,10 +1588,8 @@ build_v2_build_objc_method_call (int super_flag, tree method_prototype,
= (method_prototype = (method_prototype
? TREE_VALUE (TREE_TYPE (method_prototype)) ? TREE_VALUE (TREE_TYPE (method_prototype))
: objc_object_type); : objc_object_type);
tree method_param_types = get_arg_type_list (method_prototype, tree ftype = build_function_type_for_method (ret_type, method_prototype,
METHOD_REF, super_flag); METHOD_REF, super_flag);
tree ftype = build_function_type (ret_type, method_param_types);
tree sender_cast; tree sender_cast;
if (method_prototype && METHOD_TYPE_ATTRIBUTES (method_prototype)) if (method_prototype && METHOD_TYPE_ATTRIBUTES (method_prototype))
...@@ -1596,7 +1599,7 @@ build_v2_build_objc_method_call (int super_flag, tree method_prototype, ...@@ -1596,7 +1599,7 @@ build_v2_build_objc_method_call (int super_flag, tree method_prototype,
sender_cast = build_pointer_type (ftype); sender_cast = build_pointer_type (ftype);
if (check_for_nil) if (check_for_nil)
method_params = objc_copy_to_temp_side_effect_params (method_param_types, method_params = objc_copy_to_temp_side_effect_params (ftype,
method_params); method_params);
/* Get &message_ref_t.messenger. */ /* Get &message_ref_t.messenger. */
......
...@@ -75,7 +75,7 @@ typedef struct _objc_runtime_hooks_r ...@@ -75,7 +75,7 @@ typedef struct _objc_runtime_hooks_r
/* Receiver is class Object, check runtime-specific. */ /* Receiver is class Object, check runtime-specific. */
tree (*receiver_is_class_object) (tree); tree (*receiver_is_class_object) (tree);
/* Get the start of a method argument type list (receiver, _cmd). */ /* Get the start of a method argument type list (receiver, _cmd). */
tree (*get_arg_type_list_base) (tree, int, int); void (*get_arg_type_list_base) (VEC(tree,gc) **, tree, int, int);
/* Build method call. */ /* Build method call. */
tree (*build_objc_method_call) (location_t, tree, tree, tree, tree, tree, int); tree (*build_objc_method_call) (location_t, tree, tree, tree, tree, tree, int);
......
...@@ -49,7 +49,8 @@ extern void objc_start_function (tree, tree, tree, struct c_arg_info *); ...@@ -49,7 +49,8 @@ extern void objc_start_function (tree, tree, tree, struct c_arg_info *);
extern struct c_arg_info *objc_get_parm_info (int, tree); extern struct c_arg_info *objc_get_parm_info (int, tree);
#endif #endif
extern void objc_push_parm (tree); extern void objc_push_parm (tree);
extern tree get_arg_type_list (tree, int, int);
extern tree build_function_type_for_method (tree, tree, int, bool);
/* Stuff that should be migrated to shared support (or some v1-only file). */ /* Stuff that should be migrated to shared support (or some v1-only file). */
extern void build_super_template (void); extern void build_super_template (void);
......
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