PR exp/9608:

* c-exp.y (%union) <tvec>: Change type.
	(func_mod): Now uses <tvec> type.
	(exp): Update for tvec change.
	(direct_abs_decl): Push the typelist.
	(func_mod): Return a typelist.
	(nonempty_typelist): Update for tvec change.
	* gdbtypes.c (lookup_function_type_with_arguments): New function.
	* gdbtypes.h (lookup_function_type_with_arguments): Declare.
	* parse.c (pop_type_list): New function.
	(push_typelist): New function.
	(follow_types): Handle tp_function_with_arguments.
	* parser-defs.h (type_ptr): New typedef.  Define a VEC.
	(enum type_pieces) <tp_function_with_arguments>: New constant.
	(union type_stack_elt) <typelist_val>: New field.
	(push_typelist): Declare.
testsuite
	* gdb.base/whatis.exp: Add regression test.
This commit is contained in:
Tom Tromey
2012-07-06 14:47:00 +00:00
parent fcde5961eb
commit 71918a863f
8 changed files with 115 additions and 17 deletions

View File

@@ -462,6 +462,25 @@ lookup_function_type (struct type *type)
return make_function_type (type, (struct type **) 0);
}
/* Given a type TYPE and argument types, return the appropriate
function type. */
struct type *
lookup_function_type_with_arguments (struct type *type,
int nparams,
struct type **param_types)
{
struct type *fn = make_function_type (type, (struct type **) 0);
int i;
TYPE_NFIELDS (fn) = nparams;
TYPE_FIELDS (fn) = TYPE_ZALLOC (fn, nparams * sizeof (struct field));
for (i = 0; i < nparams; ++i)
TYPE_FIELD_TYPE (fn, i) = param_types[i];
return fn;
}
/* Identify address space identifier by name --
return the integer flag defined in gdbtypes.h. */
extern int