diff options
author | Pearu Peterson <pearu.peterson@gmail.com> | 2006-07-05 09:49:16 +0000 |
---|---|---|
committer | Pearu Peterson <pearu.peterson@gmail.com> | 2006-07-05 09:49:16 +0000 |
commit | 085ea43714e8f551d30840b0e60c7cc235ec53ff (patch) | |
tree | 679c98e64cb69c09d1a58eed61ccb39e54c9ede8 /numpy/f2py/lib/parsefortran.py | |
parent | f72e5a81b1242f1d350b4a738393d085b4dba86b (diff) | |
download | numpy-085ea43714e8f551d30840b0e60c7cc235ec53ff.tar.gz |
Working on Fortran analyzer.
Diffstat (limited to 'numpy/f2py/lib/parsefortran.py')
-rw-r--r-- | numpy/f2py/lib/parsefortran.py | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/numpy/f2py/lib/parsefortran.py b/numpy/f2py/lib/parsefortran.py index 314bbfa24..00b53f0b0 100644 --- a/numpy/f2py/lib/parsefortran.py +++ b/numpy/f2py/lib/parsefortran.py @@ -21,8 +21,19 @@ from utils import AnalyzeError class FortranParser: + cache = {} + def __init__(self, reader): self.reader = reader + if self.cache.has_key(reader.id): + parser = self.cache[reader.id] + self.block = parser.block + self.is_analyzed = parser.is_analyzed + self.block.show_message('using cached %s' % (reader.id)) + else: + self.cache[reader.id] = self + self.block = None + self.is_analyzed = False return def get_item(self): @@ -37,6 +48,8 @@ class FortranParser: return def parse(self): + if self.block is not None: + return try: block = self.block = BeginSource(self) except KeyboardInterrupt: @@ -55,12 +68,19 @@ class FortranParser: return def analyze(self): + if self.is_analyzed: + return + if self.block is None: + self.reader.show_message('Nothing to analyze.') + return + try: self.block.analyze() except AnalyzeError: pass except: raise + self.is_analyzed = True return def test_pyf(): |