diff options
Diffstat (limited to 'numpy/f2py/crackfortran.py')
-rwxr-xr-x | numpy/f2py/crackfortran.py | 11 |
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 |