diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 43d4a06638e..84a5193d9a9 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2011-09-08 Jan Kratochvil + + * eval.c (evaluate_subexp_standard) : 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 * gdbthread.h (struct thread_info): Remove fields diff --git a/gdb/eval.c b/gdb/eval.c index c1c02801168..af225c4670a 100644 --- a/gdb/eval.c +++ b/gdb/eval.c @@ -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 0a384e146dd..312b8310d8a 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 cd40c222d37..25e0fc3c25f 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 960384ee21e..5d61a0b0658 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,