1
0
forked from VimPlug/jedi

fix fast_parser problems with asserts

This commit is contained in:
David Halter
2012-12-15 21:27:09 +01:00
parent 2b579eb09b
commit 3aae532374
3 changed files with 12 additions and 5 deletions

View File

@@ -21,10 +21,14 @@ class Module(parsing.Simple, parsing.Module):
parsers. """
self.cache = {}
def _get(self, name, operation, *args, **kwargs):
def _get(self, name, operation, execute=False, *args, **kwargs):
key = (name, args, frozenset(kwargs.items()))
if key not in self.cache:
objs = (getattr(p.module, name)(*args, **kwargs) for p in self.parsers)
if execute:
objs = (getattr(p.module, name)(*args, **kwargs)
for p in self.parsers)
else:
objs = (getattr(p.module, name) for p in self.parsers)
self.cache[key] = reduce(operation, objs)
return self.cache[key]
@@ -44,7 +48,7 @@ class Module(parsing.Simple, parsing.Module):
}
if name in operators:
return lambda *args, **kwargs: self._get(name, operators[name],
*args, **kwargs)
True, *args, **kwargs)
elif name in properties:
return self._get(name, properties[name])
else:
@@ -172,7 +176,8 @@ class FastParser(use_metaclass(CachedFastParser)):
def _parse(self, code):
""" :type code: str """
r = r'(?:\n(?:def|class|@.*?\n(?:def|class))|^).*?(?=\n(?:def|class|@)|$)'
r = r'(?:\n(?:def|class|@.*?\n(?:def|class))|^).*?' \
r'(?=\n(?:def|class|@)|$)'
parts = re.findall(r, code, re.DOTALL)
line_offset = 0