forked from Imagelibrary/binutils-gdb
* 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:
@@ -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>
|
2009-06-29 Ulrich Weigand <uweigand@de.ibm.com>
|
||||||
|
|
||||||
* ada-valprint.c (ada_print_scalar): Accept NULL type argument
|
* ada-valprint.c (ada_print_scalar): Accept NULL type argument
|
||||||
|
|||||||
@@ -2586,9 +2586,13 @@ ada_decoded_op_name (enum exp_opcode op)
|
|||||||
static void
|
static void
|
||||||
resolve (struct expression **expp, int void_context_p)
|
resolve (struct expression **expp, int void_context_p)
|
||||||
{
|
{
|
||||||
int pc;
|
struct type *context_type = NULL;
|
||||||
pc = 0;
|
int pc = 0;
|
||||||
resolve_subexp (expp, &pc, 1, void_context_p ? builtin_type_void : NULL);
|
|
||||||
|
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
|
/* 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,
|
int nsyms, struct value **args, int nargs,
|
||||||
const char *name, struct type *context_type)
|
const char *name, struct type *context_type)
|
||||||
{
|
{
|
||||||
|
int fallback;
|
||||||
int k;
|
int k;
|
||||||
int m; /* Number of hits */
|
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;
|
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)
|
for (k = 0; k < nsyms; k += 1)
|
||||||
{
|
{
|
||||||
struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
|
struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
|
||||||
|
|
||||||
if (ada_args_match (syms[k].sym, args, nargs)
|
if (ada_args_match (syms[k].sym, args, nargs)
|
||||||
&& return_match (type, return_type))
|
&& (fallback || return_match (type, context_type)))
|
||||||
{
|
{
|
||||||
syms[m] = syms[k];
|
syms[m] = syms[k];
|
||||||
m += 1;
|
m += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (m > 0 || return_type == fallback)
|
|
||||||
break;
|
|
||||||
else
|
|
||||||
return_type = fallback;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m == 0)
|
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
|
in some extension of the type. Return an object of
|
||||||
"type" void, which will match any formal
|
"type" void, which will match any formal
|
||||||
(see ada_type_match). */
|
(see ada_type_match). */
|
||||||
return value_zero (builtin_type_void, lval_memory);
|
return value_zero (builtin_type (exp->gdbarch)->builtin_void,
|
||||||
|
lval_memory);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
type =
|
type =
|
||||||
|
|||||||
Reference in New Issue
Block a user