@@ -123,7 +123,7 @@ import {
123
123
ImportDeclaration,
124
124
ImportEqualsDeclaration,
125
125
ImportOrExportSpecifier,
126
- ImportPhase ,
126
+ ImportPhaseModifier ,
127
127
ImportSpecifier,
128
128
ImportTypeAssertionContainer,
129
129
ImportTypeNode,
@@ -8368,30 +8368,29 @@ namespace Parser {
8368
8368
identifier = parseIdentifier();
8369
8369
}
8370
8370
8371
- let isTypeOnly = false;
8372
- let phase = ImportPhase.Evaluation;
8371
+ let phaseModifier: ImportPhaseModifier | undefined;
8373
8372
if (
8374
8373
identifier?.escapedText === "type" &&
8375
8374
(token() !== SyntaxKind.FromKeyword || isIdentifier() && lookAhead(nextTokenIsFromKeywordOrEqualsToken)) &&
8376
8375
(isIdentifier() || tokenAfterImportDefinitelyProducesImportDeclaration())
8377
8376
) {
8378
- isTypeOnly = true ;
8377
+ phaseModifier = SyntaxKind.TypeKeyword ;
8379
8378
identifier = isIdentifier() ? parseIdentifier() : undefined;
8380
8379
}
8381
8380
else if (identifier?.escapedText === "defer" && token() !== SyntaxKind.FromKeyword) {
8382
- phase = ImportPhase.Defer ;
8381
+ phaseModifier = SyntaxKind.DeferKeyword ;
8383
8382
identifier = undefined;
8384
8383
if (isIdentifier()) {
8385
8384
parseErrorAtCurrentToken(Diagnostics.Default_imports_aren_t_allowed_for_deferred_imports);
8386
8385
identifier = parseIdentifier();
8387
8386
}
8388
8387
}
8389
8388
8390
- if (identifier && !tokenAfterImportedIdentifierDefinitelyProducesImportDeclaration() && phase !== ImportPhase.Defer ) {
8391
- return parseImportEqualsDeclaration(pos, hasJSDoc, modifiers, identifier, isTypeOnly );
8389
+ if (identifier && !tokenAfterImportedIdentifierDefinitelyProducesImportDeclaration() && phaseModifier !== SyntaxKind.DeferKeyword ) {
8390
+ return parseImportEqualsDeclaration(pos, hasJSDoc, modifiers, identifier, phaseModifier === SyntaxKind.TypeKeyword );
8392
8391
}
8393
8392
8394
- const importClause = tryParseImportClause(identifier, afterImportPos, isTypeOnly , /*skipJsDocLeadingAsterisks*/ undefined, phase );
8393
+ const importClause = tryParseImportClause(identifier, afterImportPos, phaseModifier , /*skipJsDocLeadingAsterisks*/ undefined);
8395
8394
const moduleSpecifier = parseModuleSpecifier();
8396
8395
const attributes = tryParseImportAttributes();
8397
8396
@@ -8400,7 +8399,7 @@ namespace Parser {
8400
8399
return withJSDoc(finishNode(node, pos), hasJSDoc);
8401
8400
}
8402
8401
8403
- function tryParseImportClause(identifier: Identifier | undefined, pos: number, isTypeOnly: boolean , skipJsDocLeadingAsterisks = false, phase: ImportPhase ) {
8402
+ function tryParseImportClause(identifier: Identifier | undefined, pos: number, phaseModifier: undefined | ImportPhaseModifier , skipJsDocLeadingAsterisks = false) {
8404
8403
// ImportDeclaration:
8405
8404
// import ImportClause from ModuleSpecifier ;
8406
8405
// import ModuleSpecifier;
@@ -8410,7 +8409,7 @@ namespace Parser {
8410
8409
token() === SyntaxKind.AsteriskToken || // import *
8411
8410
token() === SyntaxKind.OpenBraceToken // import {
8412
8411
) {
8413
- importClause = parseImportClause(identifier, pos, isTypeOnly , skipJsDocLeadingAsterisks, phase );
8412
+ importClause = parseImportClause(identifier, pos, phaseModifier , skipJsDocLeadingAsterisks);
8414
8413
parseExpected(SyntaxKind.FromKeyword);
8415
8414
}
8416
8415
return importClause;
@@ -8476,7 +8475,7 @@ namespace Parser {
8476
8475
return finished;
8477
8476
}
8478
8477
8479
- function parseImportClause(identifier: Identifier | undefined, pos: number, isTypeOnly: boolean, skipJsDocLeadingAsterisks: boolean, phase: ImportPhase ) {
8478
+ function parseImportClause(identifier: Identifier | undefined, pos: number, phaseModifier: undefined | ImportPhaseModifier, skipJsDocLeadingAsterisks: boolean ) {
8480
8479
// ImportClause:
8481
8480
// ImportedDefaultBinding
8482
8481
// NameSpaceImport
@@ -8496,15 +8495,15 @@ namespace Parser {
8496
8495
namedBindings = parseNamespaceImport();
8497
8496
}
8498
8497
else {
8499
- if (phase === ImportPhase.Defer ) {
8498
+ if (phaseModifier === SyntaxKind.DeferKeyword ) {
8500
8499
parseErrorAtCurrentToken(Diagnostics.Named_imports_aren_t_allowed_for_deferred_imports);
8501
8500
}
8502
8501
namedBindings = parseNamedImportsOrExports(SyntaxKind.NamedImports);
8503
8502
}
8504
8503
if (skipJsDocLeadingAsterisks) scanner.setSkipJsDocLeadingAsterisks(false);
8505
8504
}
8506
8505
8507
- return finishNode(factory.createImportClause(isTypeOnly , identifier, namedBindings, phase ), pos);
8506
+ return finishNode(factory.createImportClause(phaseModifier , identifier, namedBindings), pos);
8508
8507
}
8509
8508
8510
8509
function parseModuleReference() {
@@ -9538,7 +9537,7 @@ namespace Parser {
9538
9537
identifier = parseIdentifier();
9539
9538
}
9540
9539
9541
- const importClause = tryParseImportClause(identifier, afterImportTagPos, /*isTypeOnly*/ true , /*skipJsDocLeadingAsterisks*/ true, ImportPhase.Evaluation );
9540
+ const importClause = tryParseImportClause(identifier, afterImportTagPos, SyntaxKind.TypeKeyword , /*skipJsDocLeadingAsterisks*/ true);
9542
9541
const moduleSpecifier = parseModuleSpecifier();
9543
9542
const attributes = tryParseImportAttributes();
9544
9543
0 commit comments