@@ -97,6 +97,9 @@ module.exports = grammar({
97
97
[ $ . preproc_ifdef_in_specification_part , $ . program ] ,
98
98
[ $ . preproc_else_in_specification_part , $ . program ] ,
99
99
[ $ . coarray_critical_statement , $ . identifier ] ,
100
+ [ $ . format_statement , $ . identifier ] ,
101
+ [ $ . _inline_if_statement , $ . arithmetic_if_statement , $ . _block_if_statement , $ . identifier ] ,
102
+ [ $ . file_position_statement , $ . identifier ] ,
100
103
] ,
101
104
102
105
rules : {
@@ -1052,7 +1055,6 @@ module.exports = grammar({
1052
1055
_statements : $ => choice (
1053
1056
$ . assignment_statement ,
1054
1057
$ . pointer_association_statement ,
1055
- $ . call_expression ,
1056
1058
$ . subroutine_call ,
1057
1059
$ . keyword_statement ,
1058
1060
$ . if_statement ,
@@ -1077,11 +1079,15 @@ module.exports = grammar({
1077
1079
$ . associate_statement ,
1078
1080
$ . file_position_statement ,
1079
1081
$ . allocate_statement ,
1082
+ $ . deallocate_statement ,
1083
+ $ . nullify_statement ,
1080
1084
$ . entry_statement ,
1081
1085
$ . assign_statement ,
1082
1086
$ . coarray_statement ,
1083
1087
$ . coarray_team_statement ,
1084
1088
$ . coarray_critical_statement ,
1089
+ // Not strictly valid, but can catch extensions and preprocessor macros
1090
+ $ . call_expression ,
1085
1091
) ,
1086
1092
1087
1093
statement_label : $ => prec ( 1 , alias ( $ . _integer_literal , 'statement_label' ) ) ,
@@ -1289,11 +1295,11 @@ module.exports = grammar({
1289
1295
$ . _block_if_statement
1290
1296
) ,
1291
1297
1292
- _inline_if_statement : $ => prec . right ( 2 , seq (
1298
+ _inline_if_statement : $ => seq (
1293
1299
caseInsensitive ( 'if' ) ,
1294
1300
$ . parenthesized_expression ,
1295
1301
$ . _statements
1296
- ) ) ,
1302
+ ) ,
1297
1303
1298
1304
arithmetic_if_statement : $ => prec . right ( seq (
1299
1305
caseInsensitive ( 'if' ) ,
@@ -1565,7 +1571,7 @@ module.exports = grammar({
1565
1571
optional ( $ . _block_label )
1566
1572
) ,
1567
1573
1568
- format_statement : $ => prec ( 1 , seq (
1574
+ format_statement : $ => prec . dynamic ( PREC . CALL , seq (
1569
1575
caseInsensitive ( 'format' ) ,
1570
1576
'(' ,
1571
1577
alias ( $ . _transfer_items , $ . transfer_items ) ,
@@ -1717,9 +1723,19 @@ module.exports = grammar({
1717
1723
) ,
1718
1724
1719
1725
file_position_statement : $ => choice (
1720
- seq ( caseInsensitive ( 'backspace' ) , $ . _file_position_spec ) ,
1721
- seq ( caseInsensitive ( 'endfile' ) , $ . _file_position_spec ) ,
1722
- seq ( caseInsensitive ( 'rewind' ) , $ . _file_position_spec ) ,
1726
+ seq (
1727
+ choice (
1728
+ caseInsensitive ( 'backspace' ) ,
1729
+ caseInsensitive ( 'endfile' ) ,
1730
+ caseInsensitive ( 'flush' ) ,
1731
+ caseInsensitive ( 'rewind' ) ,
1732
+ // Technically not quite right, but will accept valid code,
1733
+ // and too rare to bother being stricter
1734
+ caseInsensitive ( 'wait' ) ,
1735
+ ) ,
1736
+ $ . _file_position_spec ,
1737
+ ) ,
1738
+
1723
1739
// Deleted feature -- not quite file position statement
1724
1740
seq ( caseInsensitive ( 'pause' ) , optional ( $ . string_literal ) ) ,
1725
1741
) ,
@@ -1775,6 +1791,21 @@ module.exports = grammar({
1775
1791
alias ( $ . coarray_index , $ . coarray_size ) ,
1776
1792
) ,
1777
1793
1794
+ deallocate_statement : $ => seq (
1795
+ caseInsensitive ( 'deallocate' ) ,
1796
+ '(' ,
1797
+ commaSep1 ( choice ( $ . identifier , $ . derived_type_member_expression ) ) ,
1798
+ optional ( seq ( ',' , commaSep1 ( $ . keyword_argument ) ) ) ,
1799
+ ')' ,
1800
+ ) ,
1801
+
1802
+ nullify_statement : $ => seq (
1803
+ caseInsensitive ( 'nullify' ) ,
1804
+ '(' ,
1805
+ commaSep1 ( choice ( $ . identifier , $ . derived_type_member_expression ) ) ,
1806
+ ')' ,
1807
+ ) ,
1808
+
1778
1809
// Obsolescent feature
1779
1810
entry_statement : $ => seq (
1780
1811
caseInsensitive ( 'entry' ) ,
@@ -2191,6 +2222,7 @@ module.exports = grammar({
2191
2222
caseInsensitive ( 'device' ) ,
2192
2223
prec ( - 1 , caseInsensitive ( 'dimension' ) ) ,
2193
2224
caseInsensitive ( 'double' ) ,
2225
+ caseInsensitive ( 'else' ) ,
2194
2226
caseInsensitive ( 'elseif' ) ,
2195
2227
caseInsensitive ( 'end' ) ,
2196
2228
caseInsensitive ( 'endif' ) ,
@@ -2200,6 +2232,7 @@ module.exports = grammar({
2200
2232
caseInsensitive ( 'exit' ) ,
2201
2233
caseInsensitive ( 'external' ) ,
2202
2234
caseInsensitive ( 'fail' ) ,
2235
+ caseInsensitive ( 'flush' ) ,
2203
2236
caseInsensitive ( 'form' ) ,
2204
2237
caseInsensitive ( 'format' ) ,
2205
2238
caseInsensitive ( 'go' ) ,
@@ -2233,6 +2266,7 @@ module.exports = grammar({
2233
2266
prec ( - 1 , caseInsensitive ( 'type' ) ) ,
2234
2267
caseInsensitive ( 'unlock' ) ,
2235
2268
caseInsensitive ( 'value' ) ,
2269
+ caseInsensitive ( 'wait' ) ,
2236
2270
prec ( - 1 , caseInsensitive ( 'where' ) ) ,
2237
2271
caseInsensitive ( 'write' ) ,
2238
2272
) ,
0 commit comments