summaryrefslogtreecommitdiff
path: root/numpy/f2py/lib/parsefortran.py
diff options
context:
space:
mode:
authorPearu Peterson <pearu.peterson@gmail.com>2006-07-05 09:49:16 +0000
committerPearu Peterson <pearu.peterson@gmail.com>2006-07-05 09:49:16 +0000
commit085ea43714e8f551d30840b0e60c7cc235ec53ff (patch)
tree679c98e64cb69c09d1a58eed61ccb39e54c9ede8 /numpy/f2py/lib/parsefortran.py
parentf72e5a81b1242f1d350b4a738393d085b4dba86b (diff)
downloadnumpy-085ea43714e8f551d30840b0e60c7cc235ec53ff.tar.gz
Working on Fortran analyzer.
Diffstat (limited to 'numpy/f2py/lib/parsefortran.py')
-rw-r--r--numpy/f2py/lib/parsefortran.py20
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():