diff options
author | Pearu Peterson <pearu.peterson@gmail.com> | 2010-12-02 22:04:10 +0200 |
---|---|---|
committer | Pearu Peterson <pearu.peterson@gmail.com> | 2010-12-02 22:29:17 +0200 |
commit | 67ed62e086f8979fa2c49e60ba5c89a3e8feae41 (patch) | |
tree | 890c863c4a1956251915c1091848e65483842f08 | |
parent | c0e1c0000f27b55dfd5aa4b1674a8c1b6ac38c36 (diff) | |
download | numpy-67ed62e086f8979fa2c49e60ba5c89a3e8feae41.tar.gz |
BUG: Fix ticket 1679.
-rwxr-xr-x | numpy/f2py/crackfortran.py | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/numpy/f2py/crackfortran.py b/numpy/f2py/crackfortran.py index 032901af9..1858353c5 100755 --- a/numpy/f2py/crackfortran.py +++ b/numpy/f2py/crackfortran.py @@ -695,7 +695,7 @@ def appenddecl(decl,decl2,force=1): return decl selectpattern=re.compile(r'\s*(?P<this>(@\(@.*?@\)@|[*][\d*]+|[*]\s*@\(@.*?@\)@|))(?P<after>.*)\Z',re.I) -nameargspattern=re.compile(r'\s*(?P<name>\b[\w$]+\b)\s*(@\(@\s*(?P<args>[\w\s,]*)\s*@\)@|)\s*(result(\s*@\(@\s*(?P<result>\b[\w$]+\b)\s*@\)@|))*\s*\Z',re.I) +nameargspattern=re.compile(r'\s*(?P<name>\b[\w$]+\b)\s*(@\(@\s*(?P<args>[\w\s,]*)\s*@\)@|)\s*((result(\s*@\(@\s*(?P<result>\b[\w$]+\b)\s*@\)@|))|(bind\s*@\(@\s*(?P<bind>.*)\s*@\)@))*\s*\Z',re.I) callnameargspattern=re.compile(r'\s*(?P<name>\b[\w$]+\b)\s*@\(@\s*(?P<args>.*)\s*@\)@\s*\Z',re.I) real16pattern = re.compile(r'([-+]?(?:\d+(?:\.\d*)?|\d*\.\d+))[dD]((?:[-+]?\d+)?)') real8pattern = re.compile(r'([-+]?((?:\d+(?:\.\d*)?|\d*\.\d+))[eE]((?:[-+]?\d+)?)|(\d+\.\d*))') @@ -710,10 +710,12 @@ def _is_intent_callback(vdecl): def _resolvenameargspattern(line): line = markouterparen(line) m1=nameargspattern.match(line) - if m1: return m1.group('name'),m1.group('args'),m1.group('result') + if m1: + return m1.group('name'),m1.group('args'),m1.group('result'), m1.group('bind') m1=callnameargspattern.match(line) - if m1: return m1.group('name'),m1.group('args'),None - return None,[],None + if m1: + return m1.group('name'),m1.group('args'),None, None + return None,[],None, None def analyzeline(m,case,line): global groupcounter,groupname,groupcache,grouplist,filepositiontext,\ @@ -742,7 +744,7 @@ def analyzeline(m,case,line): block = block.lower() if re.match(r'block\s*data',block,re.I): block='block data' if re.match(r'python\s*module',block,re.I): block='python module' - name,args,result = _resolvenameargspattern(m.group('after')) + name,args,result,bind = _resolvenameargspattern(m.group('after')) if name is None: if block=='block data': name = '_BLOCK_DATA_' @@ -778,7 +780,8 @@ def analyzeline(m,case,line): if f77modulename and neededmodule==-1 and groupcounter<=1: neededmodule=groupcounter+2 needmodule=1 - needinterface=1 + if block != 'interface': + needinterface=1 # Create new block(s) groupcounter=groupcounter+1 groupcache[groupcounter]={} @@ -869,7 +872,7 @@ def analyzeline(m,case,line): del grouplist[groupcounter] groupcounter=groupcounter-1 # end interface elif case=='entry': - name,args,result=_resolvenameargspattern(m.group('after')) + name,args,result,bind=_resolvenameargspattern(m.group('after')) if name is not None: if args: args=rmbadname([x.strip() for x in markoutercomma(args).split('@,@')]) |