Fix xmethod Python so that it works with Python 3

Message ID CAGyQ6gxsj1g_C3f87YJSj7VGZZeuob58qZhTbBXDuD3LB6AgvA@mail.gmail.com
State Committed
Headers

Commit Message

Siva Chandra Reddy Aug. 5, 2014, 3:43 p.m. UTC
  Attached is a patch which fixes few misses in my original xmethods
patch which do not work with Python 3.

Tested with Python 2.7.3 and Python 3.2.3.

ChangeLog

2014-08-05  Siva Chandra Reddy  <sivachandra@google.com>

    gdb/

        * python/lib/gdb/command/xmethods.py (set_xm_status1): Use the
        'items' methods instead of 'iteritems' method on dictionaries.

    gdb/testsuite/

        * gdb.python/py-xmethods.py (A_getarrayind)
        (E_method_char_worker.__call__, E_method_int_worker.__call__):
        Use 'print' with function call syntax.
        (E_method_matcher.match): Fix tab vs space indentation mixup.
  

Comments

Joel Brobecker Aug. 5, 2014, 5:30 p.m. UTC | #1
> 2014-08-05  Siva Chandra Reddy  <sivachandra@google.com>
> 
>     gdb/
> 
>         * python/lib/gdb/command/xmethods.py (set_xm_status1): Use the
>         'items' methods instead of 'iteritems' method on dictionaries.
> 
>     gdb/testsuite/
> 
>         * gdb.python/py-xmethods.py (A_getarrayind)
>         (E_method_char_worker.__call__, E_method_int_worker.__call__):
>         Use 'print' with function call syntax.
>         (E_method_matcher.match): Fix tab vs space indentation mixup.

Perhaps worth porting to the 7.8 branch if approved? I checked
the Python 2.4 documentation, and I think it shows that dict
types support the "items" method, so no backward compatibility
issue with old versions, I think.

One nit (multiple occurences) below:

> diff --git a/gdb/python/lib/gdb/command/xmethods.py b/gdb/python/lib/gdb/command/xmethods.py
> index 55cc81f..206313e 100644
> --- a/gdb/python/lib/gdb/command/xmethods.py
> +++ b/gdb/python/lib/gdb/command/xmethods.py
> @@ -140,7 +140,7 @@ def print_xm_info(xm_dict, name_re):
>  
>  def set_xm_status1(xm_dict, name_re, status):
>      """Set the status (enabled/disabled) of a dictionary of xmethods."""
> -    for locus_str, matchers in xm_dict.iteritems():
> +    for locus_str, matchers in xm_dict.items():
>          for matcher in matchers:
>              if not name_re:
>                  # If the name regex is missing, then set the status of the
> diff --git a/gdb/testsuite/gdb.python/py-xmethods.py b/gdb/testsuite/gdb.python/py-xmethods.py
> index 6fecf2b..26df3de 100644
> --- a/gdb/testsuite/gdb.python/py-xmethods.py
> +++ b/gdb/testsuite/gdb.python/py-xmethods.py
> @@ -40,7 +40,7 @@ def A_geta(obj):
>  
>  
>  def A_getarrayind(obj, index):
> -  print 'From Python <A_getarrayind>:'
> +  print ('From Python <A_getarrayind>:')

No space before '(' in Python calls.
  

Patch

diff --git a/gdb/python/lib/gdb/command/xmethods.py b/gdb/python/lib/gdb/command/xmethods.py
index 55cc81f..206313e 100644
--- a/gdb/python/lib/gdb/command/xmethods.py
+++ b/gdb/python/lib/gdb/command/xmethods.py
@@ -140,7 +140,7 @@  def print_xm_info(xm_dict, name_re):
 
 def set_xm_status1(xm_dict, name_re, status):
     """Set the status (enabled/disabled) of a dictionary of xmethods."""
-    for locus_str, matchers in xm_dict.iteritems():
+    for locus_str, matchers in xm_dict.items():
         for matcher in matchers:
             if not name_re:
                 # If the name regex is missing, then set the status of the
diff --git a/gdb/testsuite/gdb.python/py-xmethods.py b/gdb/testsuite/gdb.python/py-xmethods.py
index 6fecf2b..26df3de 100644
--- a/gdb/testsuite/gdb.python/py-xmethods.py
+++ b/gdb/testsuite/gdb.python/py-xmethods.py
@@ -40,7 +40,7 @@  def A_geta(obj):
 
 
 def A_getarrayind(obj, index):
-  print 'From Python <A_getarrayind>:'
+  print ('From Python <A_getarrayind>:')
   return obj['array'][index]
 
 
@@ -61,7 +61,7 @@  class E_method_char_worker(XMethodWorker):
         return gdb.lookup_type('char')
 
     def __call__(self, obj, arg):
-        print 'From Python <E_method_char>'
+        print ('From Python <E_method_char>')
         return None
 
 
@@ -73,7 +73,7 @@  class E_method_int_worker(XMethodWorker):
         return gdb.lookup_type('int')
 
     def __call__(self, obj, arg):
-        print 'From Python <E_method_int>'
+        print ('From Python <E_method_int>')
         return None
 
 
@@ -86,7 +86,7 @@  class E_method_matcher(XMethodMatcher):
         class_tag = class_type.unqualified().tag
         if not re.match('^dop::E$', class_tag):
             return None
-	if not re.match('^method$', method_name):
+        if not re.match('^method$', method_name):
             return None
         workers = []
         if self.methods[0].enabled: