[rfc][17/37] Eliminate builtin_type_ macros: Ada pos_atr result type

uweigand
2008-08-31T17:52:24Z

[-- Attachment #1: diff-type-adapos --]
[-- Type: text/plain, Size: 3792 bytes --]

Hello,

the value_pos_atr uses a hard-coded builtin_type_int as the type
of its result value. This patch adds a TYPE parameter instead
and pushes the choice of result type up to the callers.

Bye,
Ulrich

ChangeLog:

* ada-lang.c (value_pos_atr): Add TYPE argument. Use it as
result type instead of builtin_type_int.
(value_subscript_packed): Use pos_atr instead of value_pos_atr.
(ada_value_subscript): Update call to value_pos_atr.
(ada_value_ptr_subscript): Likewise.
(ada_evaluate_subexp): Likewise.

Index: gdb-head/gdb/ada-lang.c
===================================================================
--- gdb-head.orig/gdb/ada-lang.c
+++ gdb-head/gdb/ada-lang.c
@@ -212,7 +212,7 @@ static struct value *ada_coerce_ref (str

static LONGEST pos_atr (struct value *);

-static struct value *value_pos_atr (struct value *);
+static struct value *value_pos_atr (struct type *, struct value *);

static struct value *value_val_atr (struct type *, struct value *);

@@ -1968,7 +1968,7 @@ value_subscript_packed (struct value *ar
lowerbound = upperbound = 0;
}

- idx = value_as_long (value_pos_atr (ind[i]));
+ idx = pos_atr (ind[i]);
if (idx < lowerbound || idx > upperbound)
lim_warning (_("packed array index %ld out of bounds"), (long) idx);
bits = TYPE_FIELD_BITSIZE (elt_type, 0);
@@ -2344,7 +2344,7 @@ ada_value_subscript (struct value *arr,
{
if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
error (_("too many subscripts (%d expected)"), k);
- elt = value_subscript (elt, value_pos_atr (ind[k]));
+ elt = value_subscript (elt, value_pos_atr (builtin_type_int32, ind[k]));
}
return elt;
}
@@ -2369,7 +2369,7 @@ ada_value_ptr_subscript (struct value *a
arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
value_copy (arr));
get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
- idx = value_pos_atr (ind[k]);
+ idx = value_pos_atr (builtin_type_int32, ind[k]);
if (lwb != 0)
idx = value_binop (idx, value_from_longest (value_type (idx), lwb),
BINOP_SUB);
@@ -7660,9 +7660,9 @@ pos_atr (struct value *arg)
}

static struct value *
-value_pos_atr (struct value *arg)
+value_pos_atr (struct type *type, struct value *arg)
{
- return value_from_longest (builtin_type_int, pos_atr (arg));
+ return value_from_longest (type, pos_atr (arg));
}

/* Evaluate the TYPE'VAL attribute applied to ARG. */
@@ -9101,19 +9101,21 @@ ada_evaluate_subexp (struct type *expect
arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
if (noside == EVAL_SKIP)
goto nosideret;
- else if (noside == EVAL_AVOID_SIDE_EFFECTS)
- return value_zero (builtin_type_int, not_lval);
+ type = builtin_type (exp->gdbarch)->builtin_int;
+ if (noside == EVAL_AVOID_SIDE_EFFECTS)
+ return value_zero (type, not_lval);
else
- return value_pos_atr (arg1);
+ return value_pos_atr (type, arg1);

case OP_ATR_SIZE:
arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
if (noside == EVAL_SKIP)
goto nosideret;
- else if (noside == EVAL_AVOID_SIDE_EFFECTS)
- return value_zero (builtin_type_int, not_lval);
+ type = builtin_type (exp->gdbarch)->builtin_int;
+ if (noside == EVAL_AVOID_SIDE_EFFECTS)
+ return value_zero (type, not_lval);
else
- return value_from_longest (builtin_type_int,
+ return value_from_longest (type,
TARGET_CHAR_BIT
* TYPE_LENGTH (value_type (arg1)));