From 8fce6199bf973a03b9f3125264b048b266321d62 Mon Sep 17 00:00:00 2001 From: Stefan Behnel Date: Fri, 24 Apr 2009 08:43:55 +0200 Subject: [PATCH] fix some 'python2.6 -3' warnings --- Cython/Compiler/ControlFlow.py | 8 +++++++- Cython/Compiler/Optimize.py | 5 +++++ Cython/Compiler/Scanning.py | 24 ++++++++++++++++++++++++ Cython/Plex/Lexicons.py | 9 ++++++--- Cython/Shadow.py | 4 ++-- Cython/Utils.py | 12 ++++++------ tests/run/consts.pyx | 4 ++-- 7 files changed, 52 insertions(+), 14 deletions(-) diff --git a/Cython/Compiler/ControlFlow.py b/Cython/Compiler/ControlFlow.py index 80d32eb5..670fdc31 100644 --- a/Cython/Compiler/ControlFlow.py +++ b/Cython/Compiler/ControlFlow.py @@ -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): diff --git a/Cython/Compiler/Optimize.py b/Cython/Compiler/Optimize.py index c90af1cc..9551f358 100644 --- a/Cython/Compiler/Optimize.py +++ b/Cython/Compiler/Optimize.py @@ -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 diff --git a/Cython/Compiler/Scanning.py b/Cython/Compiler/Scanning.py index d5eae3b6..a6c1accc 100644 --- a/Cython/Compiler/Scanning.py +++ b/Cython/Compiler/Scanning.py @@ -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 diff --git a/Cython/Plex/Lexicons.py b/Cython/Plex/Lexicons.py index 905c6c50..e6cea052 100644 --- a/Cython/Plex/Lexicons.py +++ b/Cython/Plex/Lexicons.py @@ -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) diff --git a/Cython/Shadow.py b/Cython/Shadow.py index 1fe9dc19..2b81aec1 100644 --- a/Cython/Shadow.py +++ b/Cython/Shadow.py @@ -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: diff --git a/Cython/Utils.py b/Cython/Utils.py index b3b2b357..9361948c 100644 --- a/Cython/Utils.py +++ b/Cython/Utils.py @@ -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... diff --git a/tests/run/consts.pyx b/tests/run/consts.pyx index 5b40e908..5312de86 100644 --- a/tests/run/consts.pyx +++ b/tests/run/consts.pyx @@ -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) -- 2.26.2