From: Phil Muldoon <pmuldoon@redhat.com>
To: Tom Tromey <tromey@redhat.com>
Cc: "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: Re: [patch] [python] Fix Python 3 build and testsuite issues
Date: Tue, 20 Aug 2013 20:32:00 -0000 [thread overview]
Message-ID: <5213D26D.4070003@redhat.com> (raw)
In-Reply-To: <87d2p8gmlo.fsf@fleche.redhat.com>
On 20/08/13 20:59, Tom Tromey wrote:
>>>>>> "Phil" == Phil Muldoon <pmuldoon@redhat.com> writes:
>
> Phil> @@ -236,7 +236,7 @@ class FrameVars(object):
> Phil> # SYM may be a string instead of a symbol in the case of
> Phil> # synthetic local arguments or locals. If that is the case,
> Phil> # always fetch.
> Phil> - if isinstance(sym, basestring):
> Phil> + if isinstance(sym, str):
> Phil> return True
>
> Does this work in all versions?
> I thought perhaps hasattr would be more robust here.
Tested on both 2.7.3 and 3.3.0 on Fedora 18. basestring seems to
originate from Python 2.3 and was retired in 3.0.
http://docs.python.org/2/library/functions.html
basestring()
This abstract type is the superclass for str and unicode. It
cannot be called or instantiated, but it can be used to test
whether an object is an instance of str or
unicode. isinstance(obj, basestring) is equivalent to
isinstance(obj,(str, unicode)).
New in version 2.3.
As str is a subclass to basestring, I find it hard to believe that it
would also not work in Pythons 2.3. All tests pass in GDB with both
Python 2.7.3 and 3.3.
Further the Python what's new guide to 3.0 specifies:
http://docs.python.org/3.0/whatsnew/3.0.html
"The builtin basestring abstract type was removed. Use str instead. The
str and bytes types don't have functionality enough in common
to warrant a shared base class. The 2to3 tool (see below) replaces
every occurrence of basestring with str."
So the 2to3 tool does this as well.
For the hasattr point, I believe the equivalent check is the same in
this version, as the incompatible Python 3 frame filters code. But I
use several methods of gdb.Symbol so which one would we use? Remember
this is not the Symbol/Value like interface that frame_args, and
frame_locals returns, but the actual return of the symbol() function
from that interface. At this point in the code we have already called
that symbol() API and have the object it returned.
See SymValueWrapper class in FrameDecorator.py. This object interface
specifies that it must return either a string, or a gdb.Symbol. I
suppose you could return a Symbol like object, but you would have to
implement pretty much all of the gdb.Symbol methods. This would not
make a great deal of sense. Instead we should make gdb.Symbol
inheritable, so the user can sub-class. This new child class of
gdb.Symbol would still work with the above code as the code makes no
assumptions of the class other than it has the available methods.
>
> Phil> if (py_func != NULL)
> Phil> {
> Phil> - const char *function = NULL;
> Phil> + char *function_to_free = NULL;
> Phil> + const char *function;
>
> Phil> if (gdbpy_is_string (py_func))
> Phil> {
> Phil> - function = PyString_AsString (py_func);
> Phil> + function = function_to_free =
> Phil> + python_string_to_host_string (py_func);
>
> I think it's preferable to declare function_to_free in the innermost
> scope.
Sure thing. Will fix. I will post an updated patch once the
basestring discussion is completed.
Cheers
Phil
next prev parent reply other threads:[~2013-08-20 20:32 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-19 14:50 Phil Muldoon
2013-08-19 16:19 ` Tom Tromey
2013-08-19 16:45 ` Phil Muldoon
2013-08-19 18:34 ` Tom Tromey
2013-08-20 19:43 ` Phil Muldoon
2013-08-20 19:59 ` Tom Tromey
2013-08-20 20:32 ` Phil Muldoon [this message]
2013-08-21 14:29 ` Phil Muldoon
2013-08-21 14:59 ` Tom Tromey
2013-08-21 15:37 ` Paul_Koning
2013-08-21 15:42 ` Tom Tromey
2013-08-21 14:56 ` Tom Tromey
2013-08-22 10:46 ` Phil Muldoon
2013-08-27 15:41 ` Tom Tromey
2013-08-29 10:08 ` Phil Muldoon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5213D26D.4070003@redhat.com \
--to=pmuldoon@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=tromey@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox