From 4ee9faacece48c8d52326b550e00d54afc97c1db Mon Sep 17 00:00:00 2001 From: David Halter Date: Fri, 13 Jul 2012 15:04:10 +0200 Subject: [PATCH] fixed a bug that made it impossible to load two cbuiltins from the same directory / 2.5 compatibility --- builtin.py | 23 ++++++++++------------- parsing.py | 3 +++ test/run.py | 11 ++++++----- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/builtin.py b/builtin.py index 53f8f581..db271e37 100644 --- a/builtin.py +++ b/builtin.py @@ -81,8 +81,6 @@ class Parser(CachedModule): if not name: name = os.path.basename(path) name = name.rpartition('.')[0] # cut file type (normally .so) - path = os.path.dirname(path) - #print self.name, self.path super(Parser, self).__init__(path=path, name=name) self.sys_path = sys_path @@ -138,23 +136,22 @@ class Parser(CachedModule): # remove class line c = re.sub(r'^[^\n]+', '', code_block) # remove whitespace - c = re.sub(r'^[ ]{4}', '', c, flags=re.MULTILINE) + c = re.compile(r'^[ ]{4}', re.MULTILINE).sub('', c) funcs[name] = process_code(c) else: raise NotImplementedError() return funcs - if not self.path: - try: - name = self.name - if name == '__builtin__' and sys.hexversion < 0x03000000: - name = 'builtins' - f = open(os.path.sep.join(['mixin', name]) + '.py') - except IOError: - return {} - else: - return process_code(f.read()) + try: + name = self.name + if name == '__builtin__' and sys.hexversion < 0x03000000: + name = 'builtins' + f = open(os.path.sep.join(['mixin', name]) + '.py') + except IOError: + return {} + else: + return process_code(f.read()) def _generate_code(self, scope, mixin_funcs, depth=0): """ diff --git a/parsing.py b/parsing.py index cd3c6342..fa37de57 100644 --- a/parsing.py +++ b/parsing.py @@ -957,6 +957,9 @@ class PyFuzzyParser(object): # delete code again, only the parser needs it del self.code + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self.top) + @property def line_nr(self): return self._line_of_tokenize_restart + self._tokenize_line_nr diff --git a/test/run.py b/test/run.py index 767df4cd..f63f5670 100755 --- a/test/run.py +++ b/test/run.py @@ -10,6 +10,11 @@ import functions from _compatibility import unicode, BytesIO only_line = int(sys.argv[2]) if len(sys.argv) > 2 else None +if only_line is not None: + import debug + debug.debug_function = \ + functions.debug.print_to_stdout + debug.ignored_modules = ['parsing', 'builtin'] #functions.set_debug_function(functions.debug.print_to_stdout) def run_completion_test(correct, source, line_nr, line): @@ -109,12 +114,8 @@ def run_test(source): correct = None else: # reset the test, if only one specific test is wanted - if only_line is not None and line_nr != only_line: + if only_line and line_nr != only_line: correct = None - import debug - debug.debug_function = \ - functions.debug.print_to_stdout - debug.ignored_modules = ['parsing', 'builtin'] return tests, fails # completion tests: