diff options
-rw-r--r-- | gdb/ChangeLog | 17 | ||||
-rw-r--r-- | gdb/ada-exp.y | 2 | ||||
-rw-r--r-- | gdb/ada-lang.c | 51 | ||||
-rw-r--r-- | gdb/ada-lang.h | 2 |
4 files changed, 37 insertions, 35 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a70dd02..31aa05c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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> diff --git a/gdb/ada-exp.y b/gdb/ada-exp.y index c45e201..ae02907 100644 --- a/gdb/ada-exp.y +++ b/gdb/ada-exp.y @@ -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 diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 023f984..cc63e0a 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -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. */ diff --git a/gdb/ada-lang.h b/gdb/ada-lang.h index a2114a8..9905909 100644 --- a/gdb/ada-lang.h +++ b/gdb/ada-lang.h @@ -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 *); |