@@ -249,8 +249,9 @@ TYPE_CONTEXT_PARSER("PROGRAM statement"_en_US,
249
249
250
250
// R1403 end-program-stmt -> END [PROGRAM [program-name]]
251
251
TYPE_CONTEXT_PARSER(" END PROGRAM statement" _en_US,
252
- construct<EndProgramStmt>(recovery(
253
- " END PROGRAM" >> maybe (name) || bareEnd, progUnitEndStmtErrorRecovery)))
252
+ construct<EndProgramStmt>(
253
+ recovery (" END" >> defaulted (" PROGRAM" >> maybe (name)) / atEndOfStmt,
254
+ progUnitEndStmtErrorRecovery)))
254
255
255
256
// R1404 module ->
256
257
// module-stmt [specification-part] [module-subprogram-part]
@@ -266,8 +267,9 @@ TYPE_CONTEXT_PARSER(
266
267
267
268
// R1406 end-module-stmt -> END [MODULE [module-name]]
268
269
TYPE_CONTEXT_PARSER(" END MODULE statement" _en_US,
269
- construct<EndModuleStmt>(recovery(
270
- " END MODULE" >> maybe (name) || bareEnd, progUnitEndStmtErrorRecovery)))
270
+ construct<EndModuleStmt>(
271
+ recovery (" END" >> defaulted (" MODULE" >> maybe (name)) / atEndOfStmt,
272
+ progUnitEndStmtErrorRecovery)))
271
273
272
274
// R1407 module-subprogram-part -> contains-stmt [module-subprogram]...
273
275
TYPE_CONTEXT_PARSER(" module subprogram part" _en_US,
@@ -334,7 +336,7 @@ TYPE_PARSER(construct<ParentIdentifier>(name, maybe(":" >> name)))
334
336
// R1419 end-submodule-stmt -> END [SUBMODULE [submodule-name]]
335
337
TYPE_CONTEXT_PARSER(" END SUBMODULE statement" _en_US,
336
338
construct<EndSubmoduleStmt>(
337
- recovery (" END SUBMODULE" >> maybe (name) || bareEnd ,
339
+ recovery (" END" >> defaulted ( " SUBMODULE" >> maybe (name)) / atEndOfStmt ,
338
340
progUnitEndStmtErrorRecovery)))
339
341
340
342
// R1420 block-data -> block-data-stmt [specification-part] end-block-data-stmt
@@ -350,7 +352,7 @@ TYPE_CONTEXT_PARSER("BLOCK DATA statement"_en_US,
350
352
// R1422 end-block-data-stmt -> END [BLOCK DATA [block-data-name]]
351
353
TYPE_CONTEXT_PARSER(" END BLOCK DATA statement" _en_US,
352
354
construct<EndBlockDataStmt>(
353
- recovery (" END BLOCK DATA" >> maybe (name) || bareEnd ,
355
+ recovery (" END" >> defaulted ( " BLOCK DATA" >> maybe (name)) / atEndOfStmt ,
354
356
progUnitEndStmtErrorRecovery)))
355
357
356
358
// R1501 interface-block ->
@@ -564,8 +566,9 @@ TYPE_PARSER(construct<Suffix>(
564
566
" RESULT" >> parenthesized (name), maybe(languageBindingSpec)))
565
567
566
568
// R1533 end-function-stmt -> END [FUNCTION [function-name]]
567
- TYPE_PARSER(construct<EndFunctionStmt>(recovery(
568
- " END FUNCTION" >> maybe (name) || bareEnd, progUnitEndStmtErrorRecovery)))
569
+ TYPE_PARSER(construct<EndFunctionStmt>(
570
+ recovery (" END" >> defaulted (" FUNCTION" >> maybe (name)) / atEndOfStmt,
571
+ progUnitEndStmtErrorRecovery)))
569
572
570
573
// R1534 subroutine-subprogram ->
571
574
// subroutine-stmt [specification-part] [execution-part]
@@ -591,8 +594,9 @@ TYPE_PARSER(
591
594
TYPE_PARSER(construct<DummyArg>(name) || construct<DummyArg>(star))
592
595
593
596
// R1537 end-subroutine-stmt -> END [SUBROUTINE [subroutine-name]]
594
- TYPE_PARSER(construct<EndSubroutineStmt>(recovery(
595
- " END SUBROUTINE" >> maybe(name) || bareEnd, progUnitEndStmtErrorRecovery)))
597
+ TYPE_PARSER(construct<EndSubroutineStmt>(
598
+ recovery(" END" >> defaulted(" SUBROUTINE" >> maybe(name)) / atEndOfStmt,
599
+ progUnitEndStmtErrorRecovery)))
596
600
597
601
// R1538 separate-module-subprogram ->
598
602
// mp-subprogram-stmt [specification-part] [execution-part]
@@ -609,7 +613,7 @@ TYPE_CONTEXT_PARSER("MODULE PROCEDURE statement"_en_US,
609
613
// R1540 end-mp-subprogram-stmt -> END [PROCEDURE [procedure-name]]
610
614
TYPE_CONTEXT_PARSER(" END PROCEDURE statement" _en_US,
611
615
construct<EndMpSubprogramStmt>(
612
- recovery(" END PROCEDURE" >> maybe(name) || bareEnd ,
616
+ recovery(" END" >> defaulted( " PROCEDURE" >> maybe(name)) / atEndOfStmt ,
613
617
progUnitEndStmtErrorRecovery)))
614
618
615
619
// R1541 entry-stmt -> ENTRY entry-name [( [dummy-arg-list] ) [suffix]]
0 commit comments