@@ -7,8 +7,15 @@ import '../scanner/token.dart';
77import 'parser_impl.dart' ;
88
99class DirectiveContext {
10+ /// Whether the `enhanced-parts` feature is enabled.
11+ final bool enableFeatureEnhancedParts;
12+
1013 DirectiveState state = DirectiveState .Unknown ;
1114
15+ DirectiveContext ({
16+ required this .enableFeatureEnhancedParts,
17+ });
18+
1219 void checkScriptTag (Parser parser, Token token) {
1320 if (state == DirectiveState .Unknown ) {
1421 state = DirectiveState .Script ;
@@ -26,32 +33,42 @@ class DirectiveContext {
2633 }
2734
2835 void checkExport (Parser parser, Token token) {
29- if (state.index <= DirectiveState .ImportAndExport .index) {
30- state = DirectiveState .ImportAndExport ;
31- return ;
32- }
33- // Recovery
34- if (state == DirectiveState .Part ) {
35- parser.reportRecoverableError (token, messageExportAfterPart);
36- } else if (state == DirectiveState .PartOf ) {
37- parser.reportRecoverableError (token, messageNonPartOfDirectiveInPart);
38- } else {
39- parser.reportRecoverableError (token, messageDirectiveAfterDeclaration);
36+ switch (state) {
37+ case DirectiveState .Unknown :
38+ case DirectiveState .Script :
39+ case DirectiveState .Library :
40+ case DirectiveState .ImportAndExport :
41+ state = DirectiveState .ImportAndExport ;
42+ case DirectiveState .Part :
43+ parser.reportRecoverableError (token, messageExportAfterPart);
44+ case DirectiveState .PartOf :
45+ if (enableFeatureEnhancedParts) {
46+ state = DirectiveState .ImportAndExport ;
47+ } else {
48+ parser.reportRecoverableError (token, messageNonPartOfDirectiveInPart);
49+ }
50+ case DirectiveState .Declarations :
51+ parser.reportRecoverableError (token, messageDirectiveAfterDeclaration);
4052 }
4153 }
4254
4355 void checkImport (Parser parser, Token token) {
44- if (state.index <= DirectiveState .ImportAndExport .index) {
45- state = DirectiveState .ImportAndExport ;
46- return ;
47- }
48- // Recovery
49- if (state == DirectiveState .Part ) {
50- parser.reportRecoverableError (token, messageImportAfterPart);
51- } else if (state == DirectiveState .PartOf ) {
52- parser.reportRecoverableError (token, messageNonPartOfDirectiveInPart);
53- } else {
54- parser.reportRecoverableError (token, messageDirectiveAfterDeclaration);
56+ switch (state) {
57+ case DirectiveState .Unknown :
58+ case DirectiveState .Script :
59+ case DirectiveState .Library :
60+ case DirectiveState .ImportAndExport :
61+ state = DirectiveState .ImportAndExport ;
62+ case DirectiveState .Part :
63+ parser.reportRecoverableError (token, messageImportAfterPart);
64+ case DirectiveState .PartOf :
65+ if (enableFeatureEnhancedParts) {
66+ state = DirectiveState .ImportAndExport ;
67+ } else {
68+ parser.reportRecoverableError (token, messageNonPartOfDirectiveInPart);
69+ }
70+ case DirectiveState .Declarations :
71+ parser.reportRecoverableError (token, messageDirectiveAfterDeclaration);
5572 }
5673 }
5774
@@ -71,15 +88,21 @@ class DirectiveContext {
7188 }
7289
7390 void checkPart (Parser parser, Token token) {
74- if (state.index <= DirectiveState .Part .index) {
75- state = DirectiveState .Part ;
76- return ;
77- }
78- // Recovery
79- if (state == DirectiveState .PartOf ) {
80- parser.reportRecoverableError (token, messageNonPartOfDirectiveInPart);
81- } else {
82- parser.reportRecoverableError (token, messageDirectiveAfterDeclaration);
91+ switch (state) {
92+ case DirectiveState .Unknown :
93+ case DirectiveState .Script :
94+ case DirectiveState .Library :
95+ case DirectiveState .ImportAndExport :
96+ case DirectiveState .Part :
97+ state = DirectiveState .Part ;
98+ case DirectiveState .PartOf :
99+ if (enableFeatureEnhancedParts) {
100+ state = DirectiveState .ImportAndExport ;
101+ } else {
102+ parser.reportRecoverableError (token, messageNonPartOfDirectiveInPart);
103+ }
104+ case DirectiveState .Declarations :
105+ parser.reportRecoverableError (token, messageDirectiveAfterDeclaration);
83106 }
84107 }
85108
0 commit comments