@@ -123,7 +123,7 @@ import {
123123 ImportDeclaration,
124124 ImportEqualsDeclaration,
125125 ImportOrExportSpecifier,
126- ImportPhase ,
126+ ImportPhaseModifier ,
127127 ImportSpecifier,
128128 ImportTypeAssertionContainer,
129129 ImportTypeNode,
@@ -8368,30 +8368,29 @@ namespace Parser {
83688368 identifier = parseIdentifier();
83698369 }
83708370
8371- let isTypeOnly = false;
8372- let phase = ImportPhase.Evaluation;
8371+ let phaseModifier: ImportPhaseModifier | undefined = undefined;
83738372 if (
83748373 identifier?.escapedText === "type" &&
83758374 (token() !== SyntaxKind.FromKeyword || isIdentifier() && lookAhead(nextTokenIsFromKeywordOrEqualsToken)) &&
83768375 (isIdentifier() || tokenAfterImportDefinitelyProducesImportDeclaration())
83778376 ) {
8378- isTypeOnly = true ;
8377+ phaseModifier = SyntaxKind.TypeKeyword ;
83798378 identifier = isIdentifier() ? parseIdentifier() : undefined;
83808379 }
83818380 else if (identifier?.escapedText === "defer" && token() !== SyntaxKind.FromKeyword) {
8382- phase = ImportPhase.Defer ;
8381+ phaseModifier = SyntaxKind.DeferKeyword ;
83838382 identifier = undefined;
83848383 if (isIdentifier()) {
83858384 parseErrorAtCurrentToken(Diagnostics.Default_imports_aren_t_allowed_for_deferred_imports);
83868385 identifier = parseIdentifier();
83878386 }
83888387 }
83898388
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 );
83928391 }
83938392
8394- const importClause = tryParseImportClause(identifier, afterImportPos, isTypeOnly , /*skipJsDocLeadingAsterisks*/ undefined, phase );
8393+ const importClause = tryParseImportClause(identifier, afterImportPos, phaseModifier , /*skipJsDocLeadingAsterisks*/ undefined);
83958394 const moduleSpecifier = parseModuleSpecifier();
83968395 const attributes = tryParseImportAttributes();
83978396
@@ -8400,7 +8399,7 @@ namespace Parser {
84008399 return withJSDoc(finishNode(node, pos), hasJSDoc);
84018400 }
84028401
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) {
84048403 // ImportDeclaration:
84058404 // import ImportClause from ModuleSpecifier ;
84068405 // import ModuleSpecifier;
@@ -8410,7 +8409,7 @@ namespace Parser {
84108409 token() === SyntaxKind.AsteriskToken || // import *
84118410 token() === SyntaxKind.OpenBraceToken // import {
84128411 ) {
8413- importClause = parseImportClause(identifier, pos, isTypeOnly , skipJsDocLeadingAsterisks, phase );
8412+ importClause = parseImportClause(identifier, pos, phaseModifier , skipJsDocLeadingAsterisks);
84148413 parseExpected(SyntaxKind.FromKeyword);
84158414 }
84168415 return importClause;
@@ -8476,7 +8475,7 @@ namespace Parser {
84768475 return finished;
84778476 }
84788477
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 ) {
84808479 // ImportClause:
84818480 // ImportedDefaultBinding
84828481 // NameSpaceImport
@@ -8496,15 +8495,15 @@ namespace Parser {
84968495 namedBindings = parseNamespaceImport();
84978496 }
84988497 else {
8499- if (phase === ImportPhase.Defer ) {
8498+ if (phaseModifier === SyntaxKind.DeferKeyword ) {
85008499 parseErrorAtCurrentToken(Diagnostics.Named_imports_aren_t_allowed_for_deferred_imports);
85018500 }
85028501 namedBindings = parseNamedImportsOrExports(SyntaxKind.NamedImports);
85038502 }
85048503 if (skipJsDocLeadingAsterisks) scanner.setSkipJsDocLeadingAsterisks(false);
85058504 }
85068505
8507- return finishNode(factory.createImportClause(isTypeOnly , identifier, namedBindings, phase ), pos);
8506+ return finishNode(factory.createImportClause(phaseModifier , identifier, namedBindings), pos);
85088507 }
85098508
85108509 function parseModuleReference() {
@@ -9538,7 +9537,7 @@ namespace Parser {
95389537 identifier = parseIdentifier();
95399538 }
95409539
9541- const importClause = tryParseImportClause(identifier, afterImportTagPos, /*isTypeOnly*/ true , /*skipJsDocLeadingAsterisks*/ true, ImportPhase.Evaluation );
9540+ const importClause = tryParseImportClause(identifier, afterImportTagPos, SyntaxKind.TypeKeyword , /*skipJsDocLeadingAsterisks*/ true);
95429541 const moduleSpecifier = parseModuleSpecifier();
95439542 const attributes = tryParseImportAttributes();
95449543
0 commit comments