From fd13c88bee76c7f5a349cac1fec97ebe59b9c588 Mon Sep 17 00:00:00 2001 From: palves Date: Tue, 29 Dec 2009 01:49:14 +0000 Subject: [PATCH] * ax-gdb.c (gen_expr) : Lookup `this' in the context of the tracepoint, not of the selected frame and language. --- gdb/ChangeLog | 5 +++++ gdb/ax-gdb.c | 21 +++++---------------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e1115bccb3..101f7e06e6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2009-12-28 Pedro Alves + + * ax-gdb.c (gen_expr) : Lookup `this' in the context of + the tracepoint, not of the selected frame and language. + 2009-12-23 Stan Shebs * ax-gdb.c (gen_expr): Handle OP_THIS. diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c index a1c3d6e69e..a64658dd21 100644 --- a/gdb/ax-gdb.c +++ b/gdb/ax-gdb.c @@ -1762,30 +1762,19 @@ gen_expr (struct expression *exp, union exp_element **pc, case OP_THIS: { - char *name; - struct frame_info *frame; + char *this_name; struct symbol *func, *sym; struct block *b; - name = current_language->la_name_of_this; - if (!name) - error (_("no `this' in current language")); - - frame = get_selected_frame (_("no frame selected")); - - func = get_frame_function (frame); - if (!func) - error (_("no `%s' in nameless context"), name); - + func = block_linkage_function (block_for_pc (ax->scope)); + this_name = language_def (SYMBOL_LANGUAGE (func))->la_name_of_this; b = SYMBOL_BLOCK_VALUE (func); - if (dict_empty (BLOCK_DICT (b))) - error (_("no args, no `%s' in block"), name); /* 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, NULL, VAR_DOMAIN); + sym = lookup_block_symbol (b, this_name, NULL, VAR_DOMAIN); if (!sym) - error (_("no `%s' found"), name); + error (_("no `%s' found"), this_name); gen_var_ref (exp->gdbarch, ax, value, sym); (*pc) += 2; -- 2.11.0