+2006-01-12 Paul N. Hilfinger <hilfinger@adacore.com>
+
+ * ada-exp.y (yyerror): Change message to ignore the argument, avoiding
+ translation problems.
+ * ada-lang.c (ada_value_struct_elt): Change interface and handling
+ of errors to avoid translation problem (and less than optimal error
+ messages).
+ (ada_value_tag, ada_tag_name_1, ada_tag_name_2, ada_evaluate_subexp):
+ Use new interface to ada_value_struct_elt.
+ * ada_lang.h (ada_value_struct_elt): Update declaration to new
+ interface.
+
+ * ChangeLog: remove reference to ada-tasks.c from entry of
+ 2006-01-07.
+
2006-01-11 Mark Kettenis <kettenis@gnu.org>
* remote.c (get_memory_packet_size, set_thread)
2006-01-07 Paul N. Hilfinger <hilfinger@adacore.com>
* ada-exp.y, ada-lex.l, ada-typeprint.c: I18n markup.
- * ada-tasks.c, ada-lang.c: I18n markup.
+ * ada-lang.c: I18n markup.
Editorial: change "can not" => "cannot" throughout.
2006-01-07 Mark Kettenis <kettenis@gnu.org>
struct value *
ada_value_tag (struct value *val)
{
- return ada_value_struct_elt (val, "_tag", "record");
+ return ada_value_struct_elt (val, "_tag", 0);
}
/* The value of the tag on the object of type TYPE whose contents are
char *p;
struct value *val;
args->name = NULL;
- val = ada_value_struct_elt (args->tag, "tsd", NULL);
+ val = ada_value_struct_elt (args->tag, "tsd", 1);
if (val == NULL)
return ada_tag_name_2 (args);
- val = ada_value_struct_elt (val, "expanded_name", NULL);
+ val = ada_value_struct_elt (val, "expanded_name", 1);
if (val == NULL)
return 0;
read_memory_string (value_as_address (val), name, sizeof (name) - 1);
val = value_ind (value_add (valp, value_from_longest (builtin_type_int, -1)));
if (val == NULL)
return 0;
- val = ada_value_struct_elt (val, "expanded_name", NULL);
+ val = ada_value_struct_elt (val, "expanded_name", 1);
if (val == NULL)
return 0;
read_memory_string (value_as_address (val), name, sizeof (name) - 1);
and (recursively) among all members of any wrapper members
(e.g., '_parent').
- ERR is a name (for use in error messages) that identifies the class
- of entity that ARG is supposed to be. ERR may be null, indicating
- that on error, the function simply returns NULL, and does not
- throw an error. (FIXME: True only if ARG is a pointer or reference
- at the moment). */
+ If NO_ERR, then simply return NULL in case of error, rather than
+ calling error. */
struct value *
-ada_value_struct_elt (struct value *arg, char *name, char *err)
+ada_value_struct_elt (struct value *arg, char *name, int no_err)
{
struct type *t, *t1;
struct value *v;
{
t1 = TYPE_TARGET_TYPE (t);
if (t1 == NULL)
- {
- if (err == NULL)
- return NULL;
- else
- error (_("Bad value type in a %s."), err);
- }
+ goto BadValue;
t1 = ada_check_typedef (t1);
if (TYPE_CODE (t1) == TYPE_CODE_PTR)
{
{
t1 = TYPE_TARGET_TYPE (t);
if (t1 == NULL)
- {
- if (err == NULL)
- return NULL;
- else
- error (_("Bad value type in a %s."), err);
- }
+ goto BadValue;
t1 = ada_check_typedef (t1);
if (TYPE_CODE (t1) == TYPE_CODE_PTR)
{
}
if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
- {
- if (err == NULL)
- return NULL;
- else
- error (_("Attempt to extract a component of a value that is not a %s."),
- err);
- }
+ goto BadValue;
if (t1 == t)
v = ada_search_struct_field (name, arg, 0, t);
}
}
- if (v == NULL && err != NULL)
+ if (v != NULL || no_err)
+ return v;
+ else
error (_("There is no member named %s."), name);
- return v;
+ BadValue:
+ if (no_err)
+ return NULL;
+ else
+ error (_("Attempt to extract a component of a value that is not a record."));
}
/* Given a type TYPE, look up the type of the component of type named NAME.
return
ada_to_fixed_value (unwrap_value
(ada_value_struct_elt
- (arg1, &exp->elts[pc + 2].string, _("record"))));
+ (arg1, &exp->elts[pc + 2].string, 0)));
case OP_TYPE:
/* The value is not supposed to be used. This is here to make it
easier to accommodate expressions that contain types. */