From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5037 invoked by alias); 18 Sep 2009 22:26:41 -0000 Mailing-List: contact archer-help@sourceware.org; run by ezmlm Sender: Precedence: bulk List-Post: List-Help: List-Subscribe: List-Id: Received: (qmail 5026 invoked by uid 22791); 18 Sep 2009 22:26:40 -0000 X-SWARE-Spam-Status: No, hits=-0.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_32,J_CHICKENPOX_36,J_CHICKENPOX_42,J_CHICKENPOX_44,J_CHICKENPOX_45,J_CHICKENPOX_48,J_CHICKENPOX_65,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: sourceware.org From: Tom Tromey To: Project Archer Subject: [python] make FrameWrapper a real wrapper CC: Alexander Larsson Reply-To: tromey@redhat.com Date: Fri, 18 Sep 2009 22:26:00 -0000 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2009-q3/txt/msg00235.txt.bz2 I'm checking this in on the python branch. This changes FrameWrapper so that it never directly calls a method on self.frame. Instead, it relies on __getattr__ to do the right thing. This is nice because it means you can subclass FrameWrapper and intercept any of these calls. I think this should eliminate one reason for monkey-patching the frame code in the glib printers: https://bugzilla.gnome.org/show_bug.cgi?id=595619#c1 Alex, does this actually help? Tom 2009-09-18 Tom Tromey * python/lib/gdb/FrameWrapper.py: Don't directly reference self.frame. diff --git a/gdb/python/lib/gdb/FrameWrapper.py b/gdb/python/lib/gdb/FrameWrapper.py index 39f8246..b790a54 100644 --- a/gdb/python/lib/gdb/FrameWrapper.py +++ b/gdb/python/lib/gdb/FrameWrapper.py @@ -30,7 +30,7 @@ class FrameWrapper: stream.write (sym.print_name + "=") try: - val = self.frame.read_var (sym) + val = self.read_var (sym) if val != None: val = str (val) # FIXME: would be nice to have a more precise exception here. @@ -75,21 +75,21 @@ class FrameWrapper: # FIXME: this should probably just be a method on gdb.Frame. # But then we need stream wrappers. def describe (self, stream, full): - if self.frame.type () == gdb.DUMMY_FRAME: + if self.type () == gdb.DUMMY_FRAME: stream.write (" \n") - elif self.frame.type () == gdb.SIGTRAMP_FRAME: + elif self.type () == gdb.SIGTRAMP_FRAME: stream.write (" \n") else: - sal = self.frame.find_sal () - pc = self.frame.pc () - name = self.frame.name () + sal = self.find_sal () + pc = self.pc () + name = self.name () if not name: name = "??" if pc != sal.pc or not sal.symtab: stream.write (" 0x%08x in" % pc) stream.write (" " + name + " (") - func = self.frame.function () + func = self.function () self.print_frame_args (stream, func) stream.write (")") @@ -98,7 +98,7 @@ class FrameWrapper: stream.write (" at " + sal.symtab.filename) stream.write (":" + str (sal.line)) - if not self.frame.name () or (not sal.symtab or not sal.symtab.filename): + if not self.name () or (not sal.symtab or not sal.symtab.filename): lib = gdb.solib_address (pc) if lib: stream.write (" from " + lib)