Skip to content

Commit b7ed36e

Browse files
authored
Merge pull request stadelmanma#143 from stadelmanma/fix-more-identifier-keyword-clashes
Fix more keyword/identifier clashes
2 parents 1e7c2a8 + 4bef32b commit b7ed36e

File tree

6 files changed

+580212
-565131
lines changed

6 files changed

+580212
-565131
lines changed

grammar.js

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)