diff options
author | Tom Tromey <tromey@redhat.com> | 2011-06-17 20:46:46 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2011-06-17 20:46:46 +0000 |
commit | 73020efaf1860119c3775d1efd3e896ef0da2753 (patch) | |
tree | 468dd1be4661391b5ab2ba1f3407467b507e1103 /gdb/valops.c | |
parent | a03c034dadca211c0c179497907a776a84b024f7 (diff) | |
download | gdb-73020efaf1860119c3775d1efd3e896ef0da2753.tar.gz |
* valops.c (value_of_this): Use lookup_language_this.
* symtab.h (lookup_language_this): Declare.
* symtab.c (lookup_language_this): New function.
(lookup_symbol_aux): Use lookup_language_this.
* ax-gdb.c (gen_expr) <OP_THIS>: Use lookup_language_this.
Diffstat (limited to 'gdb/valops.c')
-rw-r--r-- | gdb/valops.c | 31 |
1 files changed, 6 insertions, 25 deletions
diff --git a/gdb/valops.c b/gdb/valops.c index 9b3b90a7506..f5458ef946d 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -3603,13 +3603,12 @@ value_full_object (struct value *argp, struct value * value_of_this (const struct language_defn *lang, int complain) { - struct symbol *func, *sym; + struct symbol *sym; struct block *b; struct value * ret; struct frame_info *frame; - const char *name = lang->la_name_of_this; - if (!name) + if (!lang->la_name_of_this) { if (complain) error (_("no `this' in current language")); @@ -3625,39 +3624,21 @@ value_of_this (const struct language_defn *lang, int complain) return 0; } - func = get_frame_function (frame); - if (!func) - { - if (complain) - error (_("no `%s' in nameless context"), name); - else - return 0; - } + b = get_frame_block (frame, NULL); - b = SYMBOL_BLOCK_VALUE (func); - if (dict_empty (BLOCK_DICT (b))) - { - if (complain) - error (_("no args, no `%s'"), name); - else - return 0; - } - - /* Calling lookup_block_symbol is necessary to get the LOC_REGISTER - symbol instead of the LOC_ARG one (if both exist). */ - sym = lookup_block_symbol (b, name, VAR_DOMAIN); + sym = lookup_language_this (lang, b); if (sym == NULL) { if (complain) error (_("current stack frame does not contain a variable named `%s'"), - name); + lang->la_name_of_this); else return NULL; } ret = read_var_value (sym, frame); if (ret == 0 && complain) - error (_("`%s' argument unreadable"), name); + error (_("`%s' argument unreadable"), lang->la_name_of_this); return ret; } |