Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
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


  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