fix some 'python2.6 -3' warnings
authorStefan Behnel <scoder@users.berlios.de>
Fri, 24 Apr 2009 06:43:55 +0000 (08:43 +0200)
committerStefan Behnel <scoder@users.berlios.de>
Fri, 24 Apr 2009 06:43:55 +0000 (08:43 +0200)
Cython/Compiler/ControlFlow.py
Cython/Compiler/Optimize.py
Cython/Compiler/Scanning.py
Cython/Plex/Lexicons.py
Cython/Shadow.py
Cython/Utils.py
tests/run/consts.pyx

index 80d32eb5cb1904fbc2d152f0ed66a6fbe63eedc8..670fdc3151e0c045070b4961fa97c4f0f475f568 100644 (file)
@@ -13,7 +13,13 @@ import bisect, sys
 # redesigned. It doesn't take return, raise, continue, or break into 
 # account. 
 
-_END_POS = ((unichr(sys.maxunicode)*10),())
+from Cython.Compiler.Scanning import StringSourceDescriptor
+try:
+    _END_POS = (StringSourceDescriptor(unichr(sys.maxunicode)*10, ''),
+                sys.maxint, sys.maxint)
+except AttributeError: # Py3
+    _END_POS = (StringSourceDescriptor(unichr(sys.maxunicode)*10, ''),
+                sys.maxsize, sys.maxsize)
 
 class ControlFlow(object):
 
index c90af1ccee6f66f1469f2901ebb0ee6f31a3322e..9551f358a50fced335b8aa08e913b6f49bb7ea20 100644 (file)
@@ -13,6 +13,11 @@ from StringEncoding import EncodedString
 from Errors import error
 from ParseTreeTransforms import SkipDeclarations
 
+try:
+    reduce
+except NameError:
+    from functools import reduce
+
 #def unwrap_node(node):
 #    while isinstance(node, ExprNodes.PersistentNode):
 #        node = node.arg
index d5eae3b6e405d15b7616885b81ac612c4cc8341d..a6c1accc9899c73d91c267a365c8afd089bfb89a 100644 (file)
@@ -232,6 +232,7 @@ class SourceDescriptor(object):
     A SourceDescriptor should be considered immutable.
     """
     _escaped_description = None
+    _cmp_name = ''
     def __str__(self):
         assert False # To catch all places where a descriptor is used directly as a filename
     
@@ -241,6 +242,27 @@ class SourceDescriptor(object):
                 self.get_description().encode('ASCII', 'replace').decode("ASCII")
         return self._escaped_description
 
+    def __gt__(self, other):
+        # this is only used to provide some sort of order
+        try:
+            return self._cmp_name > other._cmp_name
+        except AttributeError:
+            return False
+
+    def __lt__(self, other):
+        # this is only used to provide some sort of order
+        try:
+            return self._cmp_name < other._cmp_name
+        except AttributeError:
+            return False
+
+    def __le__(self, other):
+        # this is only used to provide some sort of order
+        try:
+            return self._cmp_name <= other._cmp_name
+        except AttributeError:
+            return False
+
 class FileSourceDescriptor(SourceDescriptor):
     """
     Represents a code source. A code source is a more generic abstraction
@@ -251,6 +273,7 @@ class FileSourceDescriptor(SourceDescriptor):
     """
     def __init__(self, filename):
         self.filename = filename
+        self._cmp_name = filename
     
     def get_lines(self):
         return Utils.open_source_file(self.filename)
@@ -278,6 +301,7 @@ class StringSourceDescriptor(SourceDescriptor):
     def __init__(self, name, code):
         self.name = name
         self.codelines = [x + "\n" for x in code.split("\n")]
+        self._cmp_name = name
     
     def get_lines(self):
         return self.codelines
index 905c6c50f166c1fdbca3b0819f81645f9697fc00..e6cea0528deceb35b0733fb7f7f2d02ad4d3a5fa 100644 (file)
@@ -164,10 +164,13 @@ class Lexicon(object):
       #    token_number, "Pattern can match 0 input symbols")
       if isinstance(action_spec, Actions.Action):
         action = action_spec
-      elif callable(action_spec):
-        action = Actions.Call(action_spec)
       else:
-        action = Actions.Return(action_spec)
+        try:
+          action_spec.__call__
+        except AttributeError:
+          action = Actions.Return(action_spec)
+        else:
+          action = Actions.Call(action_spec)
       final_state = machine.new_state()
       re.build_machine(machine, initial_state, final_state, 
                        match_bol = 1, nocase = 0)
index 1fe9dc19a540b8539d439cc5d87b5d6305245ce8..2b81aec109531a929a527482603539a9fb5fd8de 100644 (file)
@@ -23,7 +23,7 @@ def cmod(a, b):
 # Emulated language constructs
 
 def cast(type, arg):
-    if callable(type):
+    if hasattr(type, '__call__'):
         return type(arg)
     else:
         return arg
@@ -35,7 +35,7 @@ def address(arg):
     return pointer(type(arg))([arg])
     
 def declare(type=None, value=None, **kwds):
-    if type and callable(type):
+    if type is not None and hasattr(type, '__call__'):
         if value:
             return type(value)
         else:
index b3b2b357ffbe5ff5c6db068ec786341926ba3c71..9361948c7a1d844dc2ae96fbe74370d1f681245c 100644 (file)
@@ -110,18 +110,18 @@ class UtilityCode(object):
     def write_init_code(self, writer, pos):
         if not self.init:
             return
-        if callable(self.init):
-            self.init(writer, pos)
-        else:
+        if isinstance(self.init, basestring):
             writer.put(self.init)
+        else:
+            self.init(writer, pos)
 
     def write_cleanup_code(self, writer, pos):
         if not self.cleanup:
             return
-        if callable(self.cleanup):
-            self.cleanup(writer, pos)
-        else:
+        if isinstance(self.cleanup, basestring):
             writer.put(self.cleanup)
+        else:
+            self.cleanup(writer, pos)
     
     def specialize(self, pyrex_type=None, **data):
         # Dicts aren't hashable...
index 5b40e90822220813a177c3473d6e83e209631865..5312de867225e362f39ce0373a30cd185943ac6a 100644 (file)
@@ -16,7 +16,7 @@ True
 True
 >>> mul() == 1*60*1000
 True
->>> arithm() == 9*2+3*8/6-10
+>>> arithm() == 9*2+3*8//6-10
 True
 >>> parameters() == _func(-1 -2, - (-3+4), 1*2*3)
 True
@@ -52,7 +52,7 @@ def mul():
     return 1*60*1000
 
 def arithm():
-    return 9*2+3*8/6-10
+    return 9*2+3*8//6-10
 
 def parameters():
     return _func(-1 -2, - (-3+4), 1*2*3)