* 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.
This commit is contained in:
Paul N. Hilfinger
2006-01-12 08:36:29 +00:00
parent 761ae4d626
commit 03ee6b2e01
4 changed files with 37 additions and 35 deletions

View File

@ -1,3 +1,18 @@
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> 2006-01-11 Mark Kettenis <kettenis@gnu.org>
* remote.c (get_memory_packet_size, set_thread) * remote.c (get_memory_packet_size, set_thread)
@ -41,7 +56,7 @@
2006-01-07 Paul N. Hilfinger <hilfinger@adacore.com> 2006-01-07 Paul N. Hilfinger <hilfinger@adacore.com>
* ada-exp.y, ada-lex.l, ada-typeprint.c: I18n markup. * 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. Editorial: change "can not" => "cannot" throughout.
2006-01-07 Mark Kettenis <kettenis@gnu.org> 2006-01-07 Mark Kettenis <kettenis@gnu.org>

View File

@ -768,7 +768,7 @@ ada_parse (void)
void void
yyerror (char *msg) yyerror (char *msg)
{ {
error (_("A %s in expression, near `%s'."), (msg ? msg : _("error")), lexptr); error (_("Error in expression, near `%s'."), lexptr);
} }
/* The operator name corresponding to operator symbol STRING (adds /* The operator name corresponding to operator symbol STRING (adds

View File

@ -5220,7 +5220,7 @@ ada_tag_type (struct value *val)
struct value * struct value *
ada_value_tag (struct value *val) 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 /* The value of the tag on the object of type TYPE whose contents are
@ -5279,10 +5279,10 @@ ada_tag_name_1 (void *args0)
char *p; char *p;
struct value *val; struct value *val;
args->name = NULL; args->name = NULL;
val = ada_value_struct_elt (args->tag, "tsd", NULL); val = ada_value_struct_elt (args->tag, "tsd", 1);
if (val == NULL) if (val == NULL)
return ada_tag_name_2 (args); 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) if (val == NULL)
return 0; return 0;
read_memory_string (value_as_address (val), name, sizeof (name) - 1); read_memory_string (value_as_address (val), name, sizeof (name) - 1);
@ -5317,7 +5317,7 @@ ada_tag_name_2 (struct tag_args *args)
val = value_ind (value_add (valp, value_from_longest (builtin_type_int, -1))); val = value_ind (value_add (valp, value_from_longest (builtin_type_int, -1)));
if (val == NULL) if (val == NULL)
return 0; return 0;
val = ada_value_struct_elt (val, "expanded_name", NULL); val = ada_value_struct_elt (val, "expanded_name", 1);
if (val == NULL) if (val == NULL)
return 0; return 0;
read_memory_string (value_as_address (val), name, sizeof (name) - 1); read_memory_string (value_as_address (val), name, sizeof (name) - 1);
@ -5823,14 +5823,11 @@ ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
and (recursively) among all members of any wrapper members and (recursively) among all members of any wrapper members
(e.g., '_parent'). (e.g., '_parent').
ERR is a name (for use in error messages) that identifies the class If NO_ERR, then simply return NULL in case of error, rather than
of entity that ARG is supposed to be. ERR may be null, indicating calling error. */
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). */
struct value * 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 type *t, *t1;
struct value *v; struct value *v;
@ -5841,12 +5838,7 @@ ada_value_struct_elt (struct value *arg, char *name, char *err)
{ {
t1 = TYPE_TARGET_TYPE (t); t1 = TYPE_TARGET_TYPE (t);
if (t1 == NULL) if (t1 == NULL)
{ goto BadValue;
if (err == NULL)
return NULL;
else
error (_("Bad value type in a %s."), err);
}
t1 = ada_check_typedef (t1); t1 = ada_check_typedef (t1);
if (TYPE_CODE (t1) == TYPE_CODE_PTR) if (TYPE_CODE (t1) == TYPE_CODE_PTR)
{ {
@ -5859,12 +5851,7 @@ ada_value_struct_elt (struct value *arg, char *name, char *err)
{ {
t1 = TYPE_TARGET_TYPE (t); t1 = TYPE_TARGET_TYPE (t);
if (t1 == NULL) if (t1 == NULL)
{ goto BadValue;
if (err == NULL)
return NULL;
else
error (_("Bad value type in a %s."), err);
}
t1 = ada_check_typedef (t1); t1 = ada_check_typedef (t1);
if (TYPE_CODE (t1) == TYPE_CODE_PTR) if (TYPE_CODE (t1) == TYPE_CODE_PTR)
{ {
@ -5876,13 +5863,7 @@ ada_value_struct_elt (struct value *arg, char *name, char *err)
} }
if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION) if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
{ goto BadValue;
if (err == NULL)
return NULL;
else
error (_("Attempt to extract a component of a value that is not a %s."),
err);
}
if (t1 == t) if (t1 == t)
v = ada_search_struct_field (name, arg, 0, t); v = ada_search_struct_field (name, arg, 0, t);
@ -5918,10 +5899,16 @@ ada_value_struct_elt (struct value *arg, char *name, char *err)
} }
} }
if (v == NULL && err != NULL) if (v != NULL || no_err)
return v;
else
error (_("There is no member named %s."), name); 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. /* Given a type TYPE, look up the type of the component of type named NAME.
@ -8585,7 +8572,7 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
return return
ada_to_fixed_value (unwrap_value ada_to_fixed_value (unwrap_value
(ada_value_struct_elt (ada_value_struct_elt
(arg1, &exp->elts[pc + 2].string, _("record")))); (arg1, &exp->elts[pc + 2].string, 0)));
case OP_TYPE: case OP_TYPE:
/* The value is not supposed to be used. This is here to make it /* The value is not supposed to be used. This is here to make it
easier to accommodate expressions that contain types. */ easier to accommodate expressions that contain types. */

View File

@ -363,7 +363,7 @@ extern int ada_in_variant (LONGEST, struct type *, int);
extern char *ada_variant_discrim_name (struct type *); extern char *ada_variant_discrim_name (struct type *);
extern struct value *ada_value_struct_elt (struct value *, char *, char *); extern struct value *ada_value_struct_elt (struct value *, char *, int);
extern int ada_is_aligner_type (struct type *); extern int ada_is_aligner_type (struct type *);