@@ -97,6 +97,9 @@ module.exports = grammar({
9797 [ $ . preproc_ifdef_in_specification_part , $ . program ] ,
9898 [ $ . preproc_else_in_specification_part , $ . program ] ,
9999 [ $ . coarray_critical_statement , $ . identifier ] ,
100+ [ $ . format_statement , $ . identifier ] ,
101+ [ $ . _inline_if_statement , $ . arithmetic_if_statement , $ . _block_if_statement , $ . identifier ] ,
102+ [ $ . file_position_statement , $ . identifier ] ,
100103 ] ,
101104
102105 rules : {
@@ -1052,7 +1055,6 @@ module.exports = grammar({
10521055 _statements : $ => choice (
10531056 $ . assignment_statement ,
10541057 $ . pointer_association_statement ,
1055- $ . call_expression ,
10561058 $ . subroutine_call ,
10571059 $ . keyword_statement ,
10581060 $ . if_statement ,
@@ -1077,11 +1079,15 @@ module.exports = grammar({
10771079 $ . associate_statement ,
10781080 $ . file_position_statement ,
10791081 $ . allocate_statement ,
1082+ $ . deallocate_statement ,
1083+ $ . nullify_statement ,
10801084 $ . entry_statement ,
10811085 $ . assign_statement ,
10821086 $ . coarray_statement ,
10831087 $ . coarray_team_statement ,
10841088 $ . coarray_critical_statement ,
1089+ // Not strictly valid, but can catch extensions and preprocessor macros
1090+ $ . call_expression ,
10851091 ) ,
10861092
10871093 statement_label : $ => prec ( 1 , alias ( $ . _integer_literal , 'statement_label' ) ) ,
@@ -1289,11 +1295,11 @@ module.exports = grammar({
12891295 $ . _block_if_statement
12901296 ) ,
12911297
1292- _inline_if_statement : $ => prec . right ( 2 , seq (
1298+ _inline_if_statement : $ => seq (
12931299 caseInsensitive ( 'if' ) ,
12941300 $ . parenthesized_expression ,
12951301 $ . _statements
1296- ) ) ,
1302+ ) ,
12971303
12981304 arithmetic_if_statement : $ => prec . right ( seq (
12991305 caseInsensitive ( 'if' ) ,
@@ -1565,7 +1571,7 @@ module.exports = grammar({
15651571 optional ( $ . _block_label )
15661572 ) ,
15671573
1568- format_statement : $ => prec ( 1 , seq (
1574+ format_statement : $ => prec . dynamic ( PREC . CALL , seq (
15691575 caseInsensitive ( 'format' ) ,
15701576 '(' ,
15711577 alias ( $ . _transfer_items , $ . transfer_items ) ,
@@ -1717,9 +1723,19 @@ module.exports = grammar({
17171723 ) ,
17181724
17191725 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+
17231739 // Deleted feature -- not quite file position statement
17241740 seq ( caseInsensitive ( 'pause' ) , optional ( $ . string_literal ) ) ,
17251741 ) ,
@@ -1775,6 +1791,21 @@ module.exports = grammar({
17751791 alias ( $ . coarray_index , $ . coarray_size ) ,
17761792 ) ,
17771793
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+
17781809 // Obsolescent feature
17791810 entry_statement : $ => seq (
17801811 caseInsensitive ( 'entry' ) ,
@@ -2191,6 +2222,7 @@ module.exports = grammar({
21912222 caseInsensitive ( 'device' ) ,
21922223 prec ( - 1 , caseInsensitive ( 'dimension' ) ) ,
21932224 caseInsensitive ( 'double' ) ,
2225+ caseInsensitive ( 'else' ) ,
21942226 caseInsensitive ( 'elseif' ) ,
21952227 caseInsensitive ( 'end' ) ,
21962228 caseInsensitive ( 'endif' ) ,
@@ -2200,6 +2232,7 @@ module.exports = grammar({
22002232 caseInsensitive ( 'exit' ) ,
22012233 caseInsensitive ( 'external' ) ,
22022234 caseInsensitive ( 'fail' ) ,
2235+ caseInsensitive ( 'flush' ) ,
22032236 caseInsensitive ( 'form' ) ,
22042237 caseInsensitive ( 'format' ) ,
22052238 caseInsensitive ( 'go' ) ,
@@ -2233,6 +2266,7 @@ module.exports = grammar({
22332266 prec ( - 1 , caseInsensitive ( 'type' ) ) ,
22342267 caseInsensitive ( 'unlock' ) ,
22352268 caseInsensitive ( 'value' ) ,
2269+ caseInsensitive ( 'wait' ) ,
22362270 prec ( - 1 , caseInsensitive ( 'where' ) ) ,
22372271 caseInsensitive ( 'write' ) ,
22382272 ) ,
0 commit comments