diff --git a/numpy/f2py/crackfortran.py b/numpy/f2py/crackfortran.py index 94cb64abe035..3ea1888df113 100644 --- a/numpy/f2py/crackfortran.py +++ b/numpy/f2py/crackfortran.py @@ -1489,26 +1489,9 @@ def analyzeline(m, case, line): line = m.group('after').strip() if not line[0] == '/': line = '//' + line + cl = [] - f = 0 - bn = '' - ol = '' - for c in line: - if c == '/': - f = f + 1 - continue - if f >= 3: - bn = bn.strip() - if not bn: - bn = '_BLNK_' - cl.append([bn, ol]) - f = f - 2 - bn = '' - ol = '' - if f % 2: - bn = bn + c - else: - ol = ol + c + [_, bn, ol] = re.split('/', line, maxsplit=2) bn = bn.strip() if not bn: bn = '_BLNK_' diff --git a/numpy/f2py/tests/src/crackfortran/common_with_division.f b/numpy/f2py/tests/src/crackfortran/common_with_division.f new file mode 100644 index 000000000000..4aa12cf6dcee --- /dev/null +++ b/numpy/f2py/tests/src/crackfortran/common_with_division.f @@ -0,0 +1,17 @@ + subroutine common_with_division + integer lmu,lb,lub,lpmin + parameter (lmu=1) + parameter (lb=20) +c crackfortran fails to parse this +c parameter (lub=(lb-1)*lmu+1) +c crackfortran can successfully parse this though + parameter (lub=lb*lmu-lmu+1) + parameter (lpmin=2) + +c crackfortran fails to parse this correctly +c common /mortmp/ ctmp((lub*(lub+1)*(lub+1))/lpmin+1) + + common /mortmp/ ctmp(lub/lpmin+1) + + return + end diff --git a/numpy/f2py/tests/test_crackfortran.py b/numpy/f2py/tests/test_crackfortran.py index ed3588c25475..965a6b0f87e8 100644 --- a/numpy/f2py/tests/test_crackfortran.py +++ b/numpy/f2py/tests/test_crackfortran.py @@ -114,12 +114,16 @@ def incr(x): class TestCrackFortran(util.F2PyTest): # gh-2848: commented lines between parameters in subroutine parameter lists - sources = [util.getpath("tests", "src", "crackfortran", "gh2848.f90")] + sources = [util.getpath("tests", "src", "crackfortran", "gh2848.f90"), + util.getpath("tests", "src", "crackfortran", "common_with_division.f") + ] def test_gh2848(self): r = self.module.gh2848(1, 2) assert r == (1, 2) + def test_common_with_division(self): + assert len(self.module.mortmp.ctmp) == 11 class TestMarkinnerspaces: # gh-14118: markinnerspaces does not handle multiple quotations