Skip to content

Commit 6245d85

Browse files
committed
Merge branch 'generic-macro-expansions' into ifort-fpp-fixes
2 parents 9b67c67 + 5cf36e3 commit 6245d85

File tree

9 files changed

+17
-69
lines changed

9 files changed

+17
-69
lines changed

fortls/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,6 @@ def locate_config(root: str) -> str | None:
507507
debug=True,
508508
pp_defs=pp_defs,
509509
include_dirs=include_dirs,
510-
pp_parse_intel=pp_parse_intel,
511510
)
512511
print("\n=========\nObject Tree\n=========\n")
513512
for obj in file_ast.get_scopes():

fortls/langserver.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1324,7 +1324,7 @@ def serve_onChange(self, request: dict):
13241324
# tmp_file.ast.resolve_links(self.obj_tree, self.link_version)
13251325
elif file_obj.preproc:
13261326
file_obj.preprocess(
1327-
pp_defs=self.pp_defs, pp_parse_intel=self.pp_parse_intel
1327+
pp_defs=self.pp_defs,
13281328
)
13291329
self.pp_defs = {**self.pp_defs, **file_obj.pp_defs}
13301330

@@ -1400,7 +1400,6 @@ def update_workspace_file(
14001400
ast_new = file_obj.parse(
14011401
pp_defs=self.pp_defs,
14021402
include_dirs=self.include_dirs,
1403-
pp_parse_intel=self.pp_parse_intel,
14041403
)
14051404
# Add the included read in pp_defs from to the ones specified in the
14061405
# configuration file
@@ -1470,7 +1469,6 @@ def file_init(
14701469
file_ast = file_obj.parse(
14711470
pp_defs=pp_defs,
14721471
include_dirs=include_dirs,
1473-
pp_parse_intel=pp_parse_intel,
14741472
)
14751473
except:
14761474
log.error("Error while parsing file %s", filepath, exc_info=True)

fortls/parsers/internal/parser.py

Lines changed: 3 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,7 +1180,6 @@ def preprocess(
11801180
pp_defs: dict = None,
11811181
include_dirs: set = None,
11821182
debug: bool = False,
1183-
pp_parse_intel: bool = False,
11841183
) -> tuple[list, list]:
11851184
if pp_defs is None:
11861185
pp_defs = {}
@@ -1276,7 +1275,6 @@ def parse(
12761275
pp_defs=pp_defs,
12771276
include_dirs=include_dirs,
12781277
debug=debug,
1279-
pp_parse_intel=pp_parse_intel,
12801278
)
12811279
for pp_reg in pp_skips:
12821280
file_ast.start_ppif(pp_reg[0])
@@ -2053,35 +2051,6 @@ def replace_ops(expr: str):
20532051

20542052
return expr
20552053

2056-
def replace_intel_ops(expr: str):
2057-
expr = expr.replace("/=", " != ")
2058-
expr = expr.replace(".AND.", " && ")
2059-
expr = expr.replace(".LT.", " < ")
2060-
expr = expr.replace(".GT.", " > ")
2061-
expr = expr.replace(".EQ.", " == ")
2062-
expr = expr.replace(".LE.", " <= ")
2063-
expr = expr.replace(".GE.", " >= ")
2064-
expr = expr.replace(".NE.", " != ")
2065-
expr = expr.replace(".EQV.", " == ")
2066-
expr = expr.replace(".NEQV.", " != ")
2067-
expr = expr.replace(".NOT.", "!")
2068-
expr = expr.replace(".OR.", " || ")
2069-
expr = expr.replace(".XOR.", " != ") # admittedly a hack...
2070-
expr = expr.replace(".and.", " && ")
2071-
expr = expr.replace(".lt.", " < ")
2072-
expr = expr.replace(".gt.", " > ")
2073-
expr = expr.replace(".eq.", " == ")
2074-
expr = expr.replace(".le.", " <= ")
2075-
expr = expr.replace(".ge.", " >= ")
2076-
expr = expr.replace(".ne.", " != ")
2077-
expr = expr.replace(".eqv.", " == ")
2078-
expr = expr.replace(".neqv.", " != ")
2079-
expr = expr.replace(".not.", "!")
2080-
expr = expr.replace(".or.", " || ")
2081-
expr = expr.replace(".xor.", " != ") # admittedly a hack...
2082-
2083-
return expr
2084-
20852054
def replace_defined(line: str):
20862055
i0 = 0
20872056
out_line = ""
@@ -2114,9 +2083,6 @@ def replace_vars(line: str):
21142083
defs = {}
21152084

21162085
out_line = text
2117-
if pp_parse_intel:
2118-
out_line = replace_intel_ops(out_line)
2119-
21202086
out_line = replace_defined(out_line)
21212087
out_line = replace_vars(out_line)
21222088
try:
@@ -2153,13 +2119,13 @@ def replace_vars(line: str):
21532119
continue
21542120
# Handle conditional statements
21552121
match = FRegex.PP_REGEX.match(line)
2156-
if match and check_pp_prefix(match.group(1), pp_parse_intel):
2122+
if match and check_pp_prefix(match.group(1)):
21572123
output_file.append(line)
21582124
def_name = None
21592125
if_start = False
21602126
# Opening conditional statements
21612127
if match.group(2).lower() == "if ":
2162-
is_path = eval_pp_if(line[match.end(2) :], defs_tmp, pp_parse_intel)
2128+
is_path = eval_pp_if(line[match.end(2) :], defs_tmp)
21632129
if_start = True
21642130
elif match.group(2).lower() == "ifdef":
21652131
if_start = True
@@ -2195,7 +2161,7 @@ def replace_vars(line: str):
21952161
exc_continue = True
21962162
if pp_stack[-1][0] < 0:
21972163
pp_stack[-1][0] = i + 1
2198-
elif eval_pp_if(line[match.end(2) :], defs_tmp, pp_parse_intel):
2164+
elif eval_pp_if(line[match.end(2) :], defs_tmp):
21992165
pp_stack[-1][1] = i + 1
22002166
pp_skips.append(pp_stack.pop())
22012167
pp_stack_group[-1][1] = True

fortls/regex_patterns.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,20 +124,17 @@ class FortranRegularExpressions:
124124
FREE_FORMAT_TEST: Pattern = compile(r"[ ]{1,4}[a-z]", I)
125125
# Preprocessor matching rules
126126
DEFINED: Pattern = compile(r"defined[ ]*\(?[ ]*([a-z_]\w*)[ ]*\)?", I)
127-
INTEL_FPP_PRE_STR = r"[c!*]DEC\$|[c!*]DIR\$|!MS\$"
128-
INTEL_FPP_PRE: Pattern = compile(f"{INTEL_FPP_PRE_STR}", I)
129127
PP_REGEX: Pattern = compile(
130-
rf"[ ]*(#|{INTEL_FPP_PRE_STR})[ ]*(if |ifdef|ifndef|else|elif|endif)",
128+
r"[ ]*(#)[ ]*(if |ifdef|ifndef|else|elif|endif)",
131129
I,
132130
)
133131
PP_DEF: Pattern = compile(
134-
rf"[ ]*(#|{INTEL_FPP_PRE_STR})[ ]*(define|undef|undefined)"
135-
r"[ ]+(\w+)(\([ ]*([ \w,]*?)[ ]*\))?",
132+
r"[ ]*(#)[ ]*(define|undef|undefined)" r"[ ]+(\w+)(\([ ]*([ \w,]*?)[ ]*\))?",
136133
I,
137134
)
138135
PP_DEF_TEST: Pattern = compile(r"(![ ]*)?defined[ ]*\([ ]*(\w*)[ ]*\)$", I)
139136
PP_INCLUDE: Pattern = compile(r"[ ]*#[ ]*include[ ]+([\"\w\.]*)", I)
140-
PP_ANY: Pattern = compile(rf"(^[ ]*(?:#|{INTEL_FPP_PRE_STR})[ ]*\w*:?\w+)")
137+
PP_ANY: Pattern = compile(r"(^[ ]*(?:#)[ ]*\w*:?\w+)")
141138
# Context matching rules
142139
CALL: Pattern = compile(r"[ ]*CALL[ ]+[\w%]*$", I)
143140
INT_STMNT: Pattern = compile(r"^[ ]*[a-z]*$", I)

test/test_interface.py

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -85,14 +85,14 @@ def test_command_line_code_actions_options():
8585
assert args.enable_code_actions
8686

8787

88-
def unittest_server_init():
88+
def unittest_server_init(conn=None):
8989
from fortls.langserver import LangServer
9090

9191
root = (Path(__file__).parent / "test_source").resolve()
9292
parser = cli("fortls")
9393
args = parser.parse_args("-c f90_config.json".split())
9494

95-
server = LangServer(None, vars(args))
95+
server = LangServer(conn, vars(args))
9696
server.root_path = root
9797
server._load_config_file()
9898

@@ -171,16 +171,11 @@ def test_version_update_pypi():
171171
from packaging import version
172172

173173
from fortls.jsonrpc import JSONRPC2Connection, ReadWriter
174-
from fortls.langserver import LangServer
175-
176-
parser = cli("fortls")
177-
args = parser.parse_args("-c f90_config.json".split())
178-
args = vars(args)
179-
args["disable_autoupdate"] = False
180174

181175
stdin, stdout = sys.stdin.buffer, sys.stdout.buffer
182-
s = LangServer(conn=JSONRPC2Connection(ReadWriter(stdin, stdout)), settings=args)
183-
s.root_path = (Path(__file__).parent / "test_source").resolve()
176+
s, root = unittest_server_init(JSONRPC2Connection(ReadWriter(stdin, stdout)))
177+
s.disable_autoupdate = False
178+
184179
did_update = s._update_version_pypi(test=True)
185180
isconda = os.path.exists(os.path.join(sys.prefix, "conda-meta"))
186181
assert not did_update if isconda else did_update

test/test_preproc.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,8 @@ def check_return(result_array, checks):
4444
string += hover_req(file_path, 30, 23)
4545
file_path = root_dir / "preproc_spacing_arg_defs.F90"
4646
string += hover_req(file_path, 11, 20)
47-
string += hover_req(file_path, 24, 17)
48-
string += hover_req(file_path, 26, 13)
49-
string += hover_req(file_path, 26, 42)
47+
string += hover_req(file_path, 20, 17)
48+
string += hover_req(file_path, 22, 13)
5049
config = str(root_dir / ".pp_conf.json")
5150
errcode, results = run_request(string, ["--config", config])
5251
assert errcode == 0
@@ -76,7 +75,6 @@ def check_return(result_array, checks):
7675
"```fortran90\n#define MAYBEWRAP(PROCEDURE) PROCEDURE\n```",
7776
"```fortran90\nSUBROUTINE test_type_set_test()\n```",
7877
"```fortran90\n#define MACROARGS(x, y) x + y\n```",
79-
"```fortran90\nINTEGER(KIND=4), PARAMETER :: C_LONG = 4\n```",
8078
)
8179
assert len(ref_results) == len(results) - 1
8280
check_return(results[1:], ref_results)

test/test_server.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,10 +198,10 @@ def check_return(result_array):
198198
["test_str2", 13, 5],
199199
["test_sub", 6, 8],
200200
["test_type", 5, 5],
201-
["test_type_set_test", 6, 29],
201+
["test_type_set_test", 6, 25],
202202
["test_vis_mod", 2, 0],
203203
["the_test", 13, 15],
204-
["wrap_test_type_set_test", 6, 37],
204+
["wrap_test_type_set_test", 6, 33],
205205
)
206206
assert len(result_array) == len(objs)
207207
for i, obj in enumerate(objs):

test/test_source/pp/.pp_conf.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,4 @@
88
"incl_suffixes": [".h"],
99
"include_dirs": ["include"],
1010
"pp_defs": { "HAVE_CONTIGUOUS": "" },
11-
"pp_parse_intel": true
1211
}

test/test_source/pp/preproc_spacing_arg_defs.F90

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,7 @@ program preprocessor_spacing_arg_defs
1616
type(test_type) :: the_test
1717
integer :: argtest
1818

19-
!DEC$ IF DEFINED(SPACING_TEST).AND.DEFINED(MACROARGS)
20-
INTEGER (KIND=4), PARAMETER :: C_LONG = 4
21-
!DEC$ ELSE
22-
INTEGER (KIND=4), PARAMETER :: C_LONG = 8
23-
!DEC$ ENDIF
19+
INTEGER (KIND=4), PARAMETER :: C_LONG = 4
2420

2521
call the_test%set_test()
2622

0 commit comments

Comments
 (0)