From 085ea43714e8f551d30840b0e60c7cc235ec53ff Mon Sep 17 00:00:00 2001 From: Pearu Peterson Date: Wed, 5 Jul 2006 09:49:16 +0000 Subject: Working on Fortran analyzer. --- numpy/f2py/lib/parsefortran.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'numpy/f2py/lib/parsefortran.py') 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(): -- cgit v1.2.1