* 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>
* remote.c (get_memory_packet_size, set_thread)
@ -41,7 +56,7 @@
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>

View File

@ -768,7 +768,7 @@ ada_parse (void)
void
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

View File

@ -5220,7 +5220,7 @@ ada_tag_type (struct value *val)
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
@ -5279,10 +5279,10 @@ ada_tag_name_1 (void *args0)
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);
@ -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)));
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);
@ -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
(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;
@ -5841,12 +5838,7 @@ ada_value_struct_elt (struct value *arg, char *name, char *err)
{
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)
{
@ -5859,12 +5851,7 @@ ada_value_struct_elt (struct value *arg, char *name, char *err)
{
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)
{
@ -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 (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);
@ -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);
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.
@ -8585,7 +8572,7 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
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. */

View File

@ -363,7 +363,7 @@ extern int ada_in_variant (LONGEST, struct type *, int);
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 *);