summaryrefslogtreecommitdiff
path: root/numpy/f2py/crackfortran.py
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/f2py/crackfortran.py')
-rwxr-xr-xnumpy/f2py/crackfortran.py11
1 files changed, 10 insertions, 1 deletions
diff --git a/numpy/f2py/crackfortran.py b/numpy/f2py/crackfortran.py
index c3082bbf7..aa4c3bc0a 100755
--- a/numpy/f2py/crackfortran.py
+++ b/numpy/f2py/crackfortran.py
@@ -2037,7 +2037,7 @@ def _eval_length(length,params):
return '(*)'
return _eval_scalar(length,params)
-_is_kind_number = re.compile('\d+_').match
+_is_kind_number = re.compile(r'\d+_').match
def _eval_scalar(value,params):
if _is_kind_number(value):
@@ -2052,6 +2052,13 @@ def _eval_scalar(value,params):
% (msg,value,params.keys()))
return value
+_size_call_sub = re.compile(r'size\s*\((?P<arg1>\w+)\s*[,]').sub
+def two_argument_size_hook(expr):
+ new_expr = _size_call_sub(r'shape(\g<arg1>,-1+', expr)
+ if verbose > 1 and expr!=new_expr:
+ outmess('two_argument_size_hook: mapping %r to %r\n' % (expr, new_expr))
+ return new_expr
+
def analyzevars(block):
global f90modulevars
setmesstext(block)
@@ -2194,6 +2201,7 @@ def analyzevars(block):
if d[:4] == '1 * ': d = d[4:]
if di and di[-4:] == '/(1)': di = di[:-4]
if v: savelindims[d] = v,di
+ d = two_argument_size_hook(d)
vars[n]['dimension'].append(d)
if 'dimension' in vars[n]:
if isintent_c(vars[n]):
@@ -2310,6 +2318,7 @@ def analyzevars(block):
if not vars[n]['depend']: del vars[n]['depend']
if isscalar(vars[n]):
vars[n]['='] = _eval_scalar(vars[n]['='],params)
+ vars[n]['='] = two_argument_size_hook(vars[n]['='])
for n in vars.keys():
if n==block['name']: # n is block name