# tabs by a single space.
import re
text = re.sub("[ \t]+", " ", text)
- hash = new_md5(text).hexdigest()
+ hash = new_md5(text.encode("ASCII")).hexdigest()
return hash
def open_pickled_lexicon(expected_hash):
'UNAME_VERSION', 'UNAME_MACHINE')
for name, value in zip(names, platform.uname()):
benv.declare(name, value)
- import __builtin__
+ import __builtin__ as builtins
names = ('False', 'True',
'abs', 'bool', 'chr', 'cmp', 'complex', 'dict', 'divmod', 'enumerate',
'float', 'hash', 'hex', 'int', 'len', 'list', 'long', 'map', 'max', 'min',
'oct', 'ord', 'pow', 'range', 'reduce', 'repr', 'round', 'slice', 'str',
'sum', 'tuple', 'xrange', 'zip')
for name in names:
- benv.declare(name, getattr(__builtin__, name))
+ try:
+ benv.declare(name, getattr(builtins, name))
+ except AttributeError:
+ # ignore, likely Py3
+ pass
denv = CompileTimeScope(benv)
return denv
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
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
"""
def __init__(self, filename):
self.filename = filename
+ self._cmp_name = filename
def get_lines(self):
return Utils.open_source_file(self.filename)
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
sy = systring
else:
systring = EncodedString(systring)
- systring.encoding = self.source_encoding
self.sy = sy
self.systring = systring
if False: # debug_scanner: