Message ID | 1449042984-10609-1-git-send-email-w90p710@gmail.com |
---|---|
State | New |
Headers | show |
On Wed, Dec 02, 2015 at 03:56:24PM +0800, Yang Wei wrote: > The following exception is threw: > Python Exception <class 'NameError'> name 'long' is not defined: > Error occurred in Python command: name 'long' is not defined > > In python3, long is rename to int > > Signed-off-by: Yang Wei <w90p710@gmail.com> > --- > scripts/qemugdb/mtree.py | 17 ++++++++++++----- > 1 file changed, 12 insertions(+), 5 deletions(-) Even in Python 2.4+, int()/long() have been unified to an extent: https://www.python.org/dev/peps/pep-0237/ https://docs.python.org/2/whatsnew/2.4.html If the value is too large for the int() constructor, it returns a long(). Can this patch be simplified to s/\<int\>/long/g ? That way no Python version checks are necessary. > diff --git a/scripts/qemugdb/mtree.py b/scripts/qemugdb/mtree.py > index 06011c3..460d4b6 100644 > --- a/scripts/qemugdb/mtree.py > +++ b/scripts/qemugdb/mtree.py > @@ -16,12 +16,19 @@ > # 'qemu mtree' -- display the memory hierarchy > > import gdb > +import sys > > def isnull(ptr): > return ptr == gdb.Value(0).cast(ptr.type) > > +# PEP 0237: long renamed to int. That is, there is only one built-integral > +# integral type, named int; but it behaves mostly like the old long type. > +# https://docs.python.org/3.3/whatsnew/3.0.html#integers > +def intptr(p): > + return long(p) if sys.version_info.major == 2 else int(p) > + > def int128(p): > - return long(p['lo']) + (long(p['hi']) << 64) > + return intptr(p['lo']) + (intptr(p['hi']) << 64) > > class MtreeCommand(gdb.Command): > '''Display the memory tree hierarchy''' > @@ -40,11 +47,11 @@ class MtreeCommand(gdb.Command): > def process_queue(self): > while self.queue: > ptr = self.queue.pop(0) > - if long(ptr) in self.seen: > + if intptr(ptr) in self.seen: > continue > self.print_item(ptr) > def print_item(self, ptr, offset = gdb.Value(0), level = 0): > - self.seen.add(long(ptr)) > + self.seen.add(intptr(ptr)) > addr = ptr['addr'] > addr += offset > size = int128(ptr['size']) > @@ -58,8 +65,8 @@ class MtreeCommand(gdb.Command): > klass = ' (RAM)' > gdb.write('%s%016x-%016x %s%s (@ %s)\n' > % (' ' * level, > - long(addr), > - long(addr + (size - 1)), > + intptr(addr), > + intptr(addr + (size - 1)), > ptr['name'].string(), > klass, > ptr, > -- > 1.9.1 > >
diff --git a/scripts/qemugdb/mtree.py b/scripts/qemugdb/mtree.py index 06011c3..460d4b6 100644 --- a/scripts/qemugdb/mtree.py +++ b/scripts/qemugdb/mtree.py @@ -16,12 +16,19 @@ # 'qemu mtree' -- display the memory hierarchy import gdb +import sys def isnull(ptr): return ptr == gdb.Value(0).cast(ptr.type) +# PEP 0237: long renamed to int. That is, there is only one built-integral +# integral type, named int; but it behaves mostly like the old long type. +# https://docs.python.org/3.3/whatsnew/3.0.html#integers +def intptr(p): + return long(p) if sys.version_info.major == 2 else int(p) + def int128(p): - return long(p['lo']) + (long(p['hi']) << 64) + return intptr(p['lo']) + (intptr(p['hi']) << 64) class MtreeCommand(gdb.Command): '''Display the memory tree hierarchy''' @@ -40,11 +47,11 @@ class MtreeCommand(gdb.Command): def process_queue(self): while self.queue: ptr = self.queue.pop(0) - if long(ptr) in self.seen: + if intptr(ptr) in self.seen: continue self.print_item(ptr) def print_item(self, ptr, offset = gdb.Value(0), level = 0): - self.seen.add(long(ptr)) + self.seen.add(intptr(ptr)) addr = ptr['addr'] addr += offset size = int128(ptr['size']) @@ -58,8 +65,8 @@ class MtreeCommand(gdb.Command): klass = ' (RAM)' gdb.write('%s%016x-%016x %s%s (@ %s)\n' % (' ' * level, - long(addr), - long(addr + (size - 1)), + intptr(addr), + intptr(addr + (size - 1)), ptr['name'].string(), klass, ptr,
The following exception is threw: Python Exception <class 'NameError'> name 'long' is not defined: Error occurred in Python command: name 'long' is not defined In python3, long is rename to int Signed-off-by: Yang Wei <w90p710@gmail.com> --- scripts/qemugdb/mtree.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-)