* stub-objc.c (objc_build_method_signature): Update the stub
implementation to accept and ignore additional parameter.
* c-parser.c (c_parser_objc_method_decl): Reorgnize to pass
the value of ellipsis to objc_build_method_signature instead
of setting TREE_OVERFLOW on the parms TREE_LIST node.
* objc-act.h (METHOD_ADD_ARGS_ELLIPSIS_P): New macro for accessing
this field of an objc method decl.
* objc-act.c (build_method_decl): Take an additional "ellipsis"
argument, and set METHOD_ADD_ARGS_ELLIPSIS_P as appropriate.
(objc_build_method_signature): Accept additional "ellipsis"
argument and pass it to build_method_decl.
(get_arg_type_list, start_method_def, gen_method_decl): Use
the new METHOD_ADD_ARGS_ELLIPSIS_P instead of examining the
TREE_OVERFLOW field of a TREE_LIST node.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@98528
138bc75d-0d04-0410-961f-
82ee72b054a4
+2005-04-21 Roger Sayle <roger@eyesopen.com>
+
+ * c-common.h (objc_build_method_signature): Update prototype.
+ * stub-objc.c (objc_build_method_signature): Update the stub
+ implementation to accept and ignore additional parameter.
+ * c-parser.c (c_parser_objc_method_decl): Reorgnize to pass
+ the value of ellipsis to objc_build_method_signature instead
+ of setting TREE_OVERFLOW on the parms TREE_LIST node.
+
2005-04-21 Geoffrey Keating <geoffk@apple.com>
* config/rs6000/rs6000-protos.h (rs6000_emit_sync): New.
extern void objc_finish_implementation (void);
extern void objc_set_visibility (int);
extern void objc_set_method_type (enum tree_code);
-extern tree objc_build_method_signature (tree, tree, tree);
+extern tree objc_build_method_signature (tree, tree, tree, bool);
extern void objc_add_method_declaration (tree);
extern void objc_start_method_definition (tree);
extern void objc_finish_method_definition (tree);
tree type = NULL_TREE;
tree sel;
tree parms = NULL_TREE;
+ bool ellipsis = false;
+
if (c_parser_next_token_is (parser, CPP_OPEN_PAREN))
{
c_parser_consume_token (parser);
{
tree tsel = sel;
tree list = NULL_TREE;
- bool ellipsis;
while (true)
{
tree atype = NULL_TREE, id, keyworddecl;
method parameters follow the C syntax, and may include '...'
to denote a variable number of arguments. */
parms = make_node (TREE_LIST);
- ellipsis = false;
while (c_parser_next_token_is (parser, CPP_COMMA))
{
struct c_parm *parm;
parms = chainon (parms,
build_tree_list (NULL_TREE, grokparm (parm)));
}
- TREE_OVERFLOW (parms) = ellipsis;
sel = list;
}
- return objc_build_method_signature (type, sel, parms);
+ return objc_build_method_signature (type, sel, parms, ellipsis);
}
/* Parse an objc-type-name.
+2005-04-21 Roger Sayle <roger@eyesopen.com>
+
+ * objc-act.h (METHOD_ADD_ARGS_ELLIPSIS_P): New macro for accessing
+ this field of an objc method decl.
+ * objc-act.c (build_method_decl): Take an additional "ellipsis"
+ argument, and set METHOD_ADD_ARGS_ELLIPSIS_P as appropriate.
+ (objc_build_method_signature): Accept additional "ellipsis"
+ argument and pass it to build_method_decl.
+ (get_arg_type_list, start_method_def, gen_method_decl): Use
+ the new METHOD_ADD_ARGS_ELLIPSIS_P instead of examining the
+ TREE_OVERFLOW field of a TREE_LIST node.
+
2005-04-20 Joseph S. Myers <joseph@codesourcery.com>
PR c/12913
static void objc_start_function (tree, tree, tree, struct c_arg_info *);
#endif
static tree start_protocol (enum tree_code, tree, tree);
-static tree build_method_decl (enum tree_code, tree, tree, tree);
+static tree build_method_decl (enum tree_code, tree, tree, tree, bool);
static tree objc_add_method (tree, tree, int);
static tree add_instance_variable (tree, int, tree);
static tree build_ivar_reference (tree);
}
tree
-objc_build_method_signature (tree rettype, tree selector, tree optparms)
+objc_build_method_signature (tree rettype, tree selector,
+ tree optparms, bool ellipsis)
{
- return build_method_decl (objc_inherit_code, rettype, selector, optparms);
+ return build_method_decl (objc_inherit_code, rettype, selector,
+ optparms, ellipsis);
}
void
static tree
build_method_decl (enum tree_code code, tree ret_type, tree selector,
- tree add_args)
+ tree add_args, bool ellipsis)
{
tree method_decl;
METHOD_SEL_NAME (method_decl) = build_keyword_selector (selector);
METHOD_SEL_ARGS (method_decl) = selector;
METHOD_ADD_ARGS (method_decl) = add_args;
+ METHOD_ADD_ARGS_ELLIPSIS_P (method_decl) = ellipsis;
}
else
{
chainon (arglist, build_tree_list (NULL_TREE, arg_type));
}
- if (!TREE_OVERFLOW (METHOD_ADD_ARGS (meth)))
+ if (!METHOD_ADD_ARGS_ELLIPSIS_P (meth))
goto lack_of_ellipsis;
}
else
objc_push_parm (TREE_VALUE (akey));
}
- if (TREE_OVERFLOW (METHOD_ADD_ARGS (method)))
+ if (METHOD_ADD_ARGS_ELLIPSIS_P (method))
have_ellipsis = 1;
}
chain = TREE_CHAIN (chain);
}
- if (TREE_OVERFLOW (METHOD_ADD_ARGS (method)))
+ if (METHOD_ADD_ARGS_ELLIPSIS_P (method))
strcat (errbuf, ", ...");
}
}
#define METHOD_SEL_NAME(DECL) ((DECL)->decl.name)
#define METHOD_SEL_ARGS(DECL) ((DECL)->decl.arguments)
#define METHOD_ADD_ARGS(DECL) ((DECL)->decl.result)
+#define METHOD_ADD_ARGS_ELLIPSIS_P(DECL) ((DECL)->decl.lang_flag_0)
#define METHOD_DEFINITION(DECL) ((DECL)->decl.initial)
#define METHOD_ENCODING(DECL) ((DECL)->decl.context)
tree
objc_build_method_signature (tree ARG_UNUSED (rettype),
tree ARG_UNUSED (selectors),
- tree ARG_UNUSED (optparms))
+ tree ARG_UNUSED (optparms),
+ bool ARG_UNUSED (ellipsis))
{
return 0;
}