Skip to content

Commit 9b67c67

Browse files
committed
parse intel fpp operators separately
1 parent 755370e commit 9b67c67

File tree

1 file changed

+36
-29
lines changed

1 file changed

+36
-29
lines changed

fortls/parsers/internal/parser.py

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2044,39 +2044,41 @@ def preprocess_file(
20442044
# For "if" statements all blocks are excluded except the "else" block if present
20452045
# For "ifndef" statements all blocks excluding the first block are excluded
20462046
def eval_pp_if(text, defs: dict = None, pp_parse_intel: bool = False):
2047-
def replace_ops(expr: str, pp_parse_intel: bool):
2047+
def replace_ops(expr: str):
20482048
expr = expr.replace("&&", " and ")
20492049
expr = expr.replace("||", " or ")
20502050
expr = expr.replace("!=", " <> ")
20512051
expr = expr.replace("!", " not ")
20522052
expr = expr.replace(" <> ", " != ")
20532053

2054-
if pp_parse_intel:
2055-
expr = expr.replace("/=", " != ")
2056-
expr = expr.replace(".AND.", " and ")
2057-
expr = expr.replace(".LT.", " < ")
2058-
expr = expr.replace(".GT.", " > ")
2059-
expr = expr.replace(".EQ.", " == ")
2060-
expr = expr.replace(".LE.", " <= ")
2061-
expr = expr.replace(".GE.", " >= ")
2062-
expr = expr.replace(".NE.", " != ")
2063-
expr = expr.replace(".EQV.", " == ")
2064-
expr = expr.replace(".NEQV.", " != ")
2065-
expr = expr.replace(".NOT.", " not ")
2066-
expr = expr.replace(".OR.", " or ")
2067-
expr = expr.replace(".XOR.", " != ") # admittedly a hack...
2068-
expr = expr.replace(".and.", " and ")
2069-
expr = expr.replace(".lt.", " < ")
2070-
expr = expr.replace(".gt.", " > ")
2071-
expr = expr.replace(".eq.", " == ")
2072-
expr = expr.replace(".le.", " <= ")
2073-
expr = expr.replace(".ge.", " >= ")
2074-
expr = expr.replace(".ne.", " != ")
2075-
expr = expr.replace(".eqv.", " == ")
2076-
expr = expr.replace(".neqv.", " != ")
2077-
expr = expr.replace(".not.", " not ")
2078-
expr = expr.replace(".or.", " or ")
2079-
expr = expr.replace(".xor.", " != ") # admittedly a hack...
2054+
return expr
2055+
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...
20802082

20812083
return expr
20822084

@@ -2110,10 +2112,15 @@ def replace_vars(line: str):
21102112

21112113
if defs is None:
21122114
defs = {}
2113-
out_line = replace_defined(text)
2115+
2116+
out_line = text
2117+
if pp_parse_intel:
2118+
out_line = replace_intel_ops(out_line)
2119+
2120+
out_line = replace_defined(out_line)
21142121
out_line = replace_vars(out_line)
21152122
try:
2116-
line_res = eval(replace_ops(out_line, pp_parse_intel))
2123+
line_res = eval(replace_ops(out_line))
21172124
except:
21182125
return False
21192126
else:

0 commit comments

Comments
 (0)