* ada-lang.c (resolve): Use per-architecture void type instead

of platform-independent one.
	(ada_evaluate_subexp) [STRUCTOP_STRUCT]: Likewise.
	(ada_resolve_function): Reimplement fallback logic to avoid
	explicit reference to builtin_type_void.
This commit is contained in:
Ulrich Weigand 2009-06-29 17:31:24 +00:00
parent 7c964f079e
commit 30b155416b
2 changed files with 23 additions and 18 deletions

View File

@ -1,3 +1,11 @@
2009-06-29 Ulrich Weigand <uweigand@de.ibm.com>
* ada-lang.c (resolve): Use per-architecture void type instead
of platform-independent one.
(ada_evaluate_subexp) [STRUCTOP_STRUCT]: Likewise.
(ada_resolve_function): Reimplement fallback logic to avoid
explicit reference to builtin_type_void.
2009-06-29 Ulrich Weigand <uweigand@de.ibm.com>
* ada-valprint.c (ada_print_scalar): Accept NULL type argument

View File

@ -2586,9 +2586,13 @@ ada_decoded_op_name (enum exp_opcode op)
static void
resolve (struct expression **expp, int void_context_p)
{
int pc;
pc = 0;
resolve_subexp (expp, &pc, 1, void_context_p ? builtin_type_void : NULL);
struct type *context_type = NULL;
int pc = 0;
if (void_context_p)
context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
resolve_subexp (expp, &pc, 1, context_type);
}
/* Resolve the operator of the subexpression beginning at
@ -3094,35 +3098,27 @@ ada_resolve_function (struct ada_symbol_info syms[],
int nsyms, struct value **args, int nargs,
const char *name, struct type *context_type)
{
int fallback;
int k;
int m; /* Number of hits */
struct type *fallback;
struct type *return_type;
return_type = context_type;
if (context_type == NULL)
fallback = builtin_type_void;
else
fallback = NULL;
m = 0;
while (1)
/* In the first pass of the loop, we only accept functions matching
context_type. If none are found, we add a second pass of the loop
where every function is accepted. */
for (fallback = 0; m == 0 && fallback < 2; fallback++)
{
for (k = 0; k < nsyms; k += 1)
{
struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
if (ada_args_match (syms[k].sym, args, nargs)
&& return_match (type, return_type))
&& (fallback || return_match (type, context_type)))
{
syms[m] = syms[k];
m += 1;
}
}
if (m > 0 || return_type == fallback)
break;
else
return_type = fallback;
}
if (m == 0)
@ -9375,7 +9371,8 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
in some extension of the type. Return an object of
"type" void, which will match any formal
(see ada_type_match). */
return value_zero (builtin_type_void, lval_memory);
return value_zero (builtin_type (exp->gdbarch)->builtin_void,
lval_memory);
}
else
type =