diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2011-09-08 14:54:20 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2011-09-08 14:54:20 +0000 |
commit | 85bc8cb7855e8ae9ba6e207ed557f849479c41c0 (patch) | |
tree | b2872e91b9fc08816489b7f7d4d35df9d09a541f | |
parent | 48b07401829970b4ad18ccc9ebd7be9894d26642 (diff) | |
download | gdb-85bc8cb7855e8ae9ba6e207ed557f849479c41c0.zip gdb-85bc8cb7855e8ae9ba6e207ed557f849479c41c0.tar.gz gdb-85bc8cb7855e8ae9ba6e207ed557f849479c41c0.tar.bz2 |
gdb/
* eval.c (evaluate_subexp_standard) <OP_THIS>: Update the value_of_this
caller to value_of_this.
* p-exp.y: Update the value_of_this caller to value_of_this_silent.
Twice.
* valops.c (value_of_this): Remove parameter complain and variable ret.
Update function comment. Never return NULL by this code.
(value_of_this_silent): New function.
* value.h (value_of_this): Remove parameter complain.
(value_of_this_silent): New declaration.
-rw-r--r-- | gdb/ChangeLog | 12 | ||||
-rw-r--r-- | gdb/eval.c | 2 | ||||
-rw-r--r-- | gdb/p-exp.y | 4 | ||||
-rw-r--r-- | gdb/valops.c | 48 | ||||
-rw-r--r-- | gdb/value.h | 5 |
5 files changed, 40 insertions, 31 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 43d4a06..84a5193 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2011-09-08 Jan Kratochvil <jan.kratochvil@redhat.com> + + * eval.c (evaluate_subexp_standard) <OP_THIS>: Update the value_of_this + caller to value_of_this. + * p-exp.y: Update the value_of_this caller to value_of_this_silent. + Twice. + * valops.c (value_of_this): Remove parameter complain and variable ret. + Update function comment. Never return NULL by this code. + (value_of_this_silent): New function. + * value.h (value_of_this): Remove parameter complain. + (value_of_this_silent): New declaration. + 2011-09-07 Yao Qi <yao@codesourcery.com> * gdbthread.h (struct thread_info): Remove fields @@ -2830,7 +2830,7 @@ evaluate_subexp_standard (struct type *expect_type, case OP_THIS: (*pos) += 1; - return value_of_this (exp->language_defn, 1); + return value_of_this (exp->language_defn); case OP_TYPE: /* The value is not supposed to be used. This is here to make it diff --git a/gdb/p-exp.y b/gdb/p-exp.y index 0a384e1..312b831 100644 --- a/gdb/p-exp.y +++ b/gdb/p-exp.y @@ -612,7 +612,7 @@ exp : THIS write_exp_elt_opcode (OP_THIS); write_exp_elt_opcode (OP_THIS); /* We need type of this. */ - this_val = value_of_this (parse_language, 0); + this_val = value_of_this_silent (parse_language); if (this_val) this_type = value_type (this_val); else @@ -760,7 +760,7 @@ variable: name_not_typename write_exp_string ($1.stoken); write_exp_elt_opcode (STRUCTOP_PTR); /* We need type of this. */ - this_val = value_of_this (parse_language, 0); + this_val = value_of_this_silent (parse_language); if (this_val) this_type = value_type (this_val); else diff --git a/gdb/valops.c b/gdb/valops.c index cd40c22..25e0fc3 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -3600,49 +3600,45 @@ value_full_object (struct value *argp, } -/* Return the value of the local variable, if one exists. - Flag COMPLAIN signals an error if the request is made in an - inappropriate context. */ +/* Return the value of the local variable, if one exists. Throw error + otherwise, such as if the request is made in an inappropriate context. */ struct value * -value_of_this (const struct language_defn *lang, int complain) +value_of_this (const struct language_defn *lang) { struct symbol *sym; struct block *b; - struct value * ret; struct frame_info *frame; if (!lang->la_name_of_this) - { - if (complain) - error (_("no `this' in current language")); - return 0; - } + error (_("no `this' in current language")); - if (complain) - frame = get_selected_frame (_("no frame selected")); - else - { - frame = deprecated_safe_get_selected_frame (); - if (frame == 0) - return 0; - } + frame = get_selected_frame (_("no frame selected")); b = get_frame_block (frame, NULL); sym = lookup_language_this (lang, b); if (sym == NULL) + error (_("current stack frame does not contain a variable named `%s'"), + lang->la_name_of_this); + + return read_var_value (sym, frame); +} + +/* Return the value of the local variable, if one exists. Return NULL + otherwise. Never throw error. */ + +struct value * +value_of_this_silent (const struct language_defn *lang) +{ + struct value *ret = NULL; + volatile struct gdb_exception except; + + TRY_CATCH (except, RETURN_MASK_ERROR) { - if (complain) - error (_("current stack frame does not contain a variable named `%s'"), - lang->la_name_of_this); - else - return NULL; + ret = value_of_this (lang); } - ret = read_var_value (sym, frame); - if (ret == 0 && complain) - error (_("`%s' argument unreadable"), lang->la_name_of_this); return ret; } diff --git a/gdb/value.h b/gdb/value.h index 960384e..5d61a0b 100644 --- a/gdb/value.h +++ b/gdb/value.h @@ -717,8 +717,9 @@ extern int value_logical_not (struct value *arg1); /* C++ */ -extern struct value *value_of_this (const struct language_defn *lang, - int complain); +extern struct value *value_of_this (const struct language_defn *lang); + +extern struct value *value_of_this_silent (const struct language_defn *lang); extern struct value *value_x_binop (struct value *arg1, struct value *arg2, enum exp_opcode op, |