Skip to content

Commit ea5c601

Browse files
authored
Merge pull request #513 from stfc/512_f2008_import_bug
(Closes #512) fix for circular import when importing fparser.two.Fortran2008
2 parents beffc28 + 89facde commit ea5c601

3 files changed

Lines changed: 58 additions & 6 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ Modifications by (in alphabetical order):
2222
* P. Vitt, University of Siegen, Germany
2323
* A. Voysey, UK Met Office
2424

25+
19/06/2026 PR #513 for #512. Fix circular import in Fortran2008.
26+
2527
## Release 0.2.3 (11/06/2026) ##
2628

2729
09/06/2026 PR #498 for #390 by adding support for linemarkers in parsed

src/fparser/two/Fortran2008/label_do_stmt_r816.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# -----------------------------------------------------------------------------
22
# BSD 3-Clause License
33
#
4-
# Copyright (c) 2023, Science and Technology Facilities Council.
4+
# Copyright (c) 2023-2026, Science and Technology Facilities Council.
55
# All rights reserved.
66
#
77
# Redistribution and use in source and binary forms, with or without
@@ -37,12 +37,12 @@
3737
label-do-stmt is [ do-construct-name : ] DO label [ loop-control ]
3838
3939
The only difference to F2003 rule R828 is that we force this rule to
40-
use the F2008 version of loop-control
40+
use the F2008 version of loop-control.
4141
4242
"""
4343

4444
from fparser.two.Fortran2003 import Label_Do_Stmt as Label_Do_Stmt_2003
45-
from fparser.two.Fortran2008 import Loop_Control
45+
from fparser.two.Fortran2008.loop_control_r818 import Loop_Control
4646

4747

4848
class Label_Do_Stmt(Label_Do_Stmt_2003):
@@ -52,10 +52,8 @@ class Label_Do_Stmt(Label_Do_Stmt_2003):
5252
"""
5353

5454
@staticmethod
55-
def loop_control_cls():
55+
def loop_control_cls() -> Loop_Control:
5656
"""
5757
:returns: Fortran2008 Loop_Control class.
58-
:rtype: :py:class:`fparser.two.Fortran2008.Loop_Control`
59-
6058
"""
6159
return Loop_Control
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Copyright (c) 2026 Science and Technology Facilities Council
2+
3+
# All rights reserved.
4+
5+
# Modifications made as part of the fparser project are distributed
6+
# under the following license:
7+
8+
# Redistribution and use in source and binary forms, with or without
9+
# modification, are permitted provided that the following conditions are
10+
# met:
11+
12+
# 1. Redistributions of source code must retain the above copyright
13+
# notice, this list of conditions and the following disclaimer.
14+
15+
# 2. Redistributions in binary form must reproduce the above copyright
16+
# notice, this list of conditions and the following disclaimer in the
17+
# documentation and/or other materials provided with the distribution.
18+
19+
# 3. Neither the name of the copyright holder nor the names of its
20+
# contributors may be used to endorse or promote products derived from
21+
# this software without specific prior written permission.
22+
23+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27+
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30+
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31+
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34+
35+
import sys
36+
import subprocess
37+
38+
"""Tests for the Fortran2008 module as a whole."""
39+
40+
41+
def test_fortran2008_import_without_fortran2003_first():
42+
"""
43+
Check that `from fparser.two import Fortran2008` works in a
44+
fresh interpreter, i.e. without Fortran2003 having been
45+
imported first (which previously masked a circular import bug).
46+
"""
47+
result = subprocess.run(
48+
[sys.executable, "-c", "from fparser.two import Fortran2008"],
49+
capture_output=True,
50+
text=True,
51+
)
52+
assert result.returncode == 0, result.stderr

0 commit comments

Comments
 (0)