@@ -1444,13 +1444,16 @@ namespace ts {
1444
1444
token ( ) === SyntaxKind . NumericLiteral ;
1445
1445
}
1446
1446
1447
- function parsePropertyNameWorker ( allowComputedPropertyNames : boolean ) : PropertyName {
1447
+ function parsePropertyNameWorker ( allowComputedPropertyNames : boolean , computedNameIsNonEmitting : boolean ) : PropertyName {
1448
1448
if ( token ( ) === SyntaxKind . StringLiteral || token ( ) === SyntaxKind . NumericLiteral ) {
1449
1449
const node = < StringLiteral | NumericLiteral > parseLiteralNode ( ) ;
1450
1450
node . text = internIdentifier ( node . text ) ;
1451
1451
return node ;
1452
1452
}
1453
1453
if ( allowComputedPropertyNames && token ( ) === SyntaxKind . OpenBracketToken ) {
1454
+ if ( computedNameIsNonEmitting ) {
1455
+ return doInsideOfContext ( NodeFlags . InNonEmittingExpression , parseComputedPropertyName ) ;
1456
+ }
1454
1457
return parseComputedPropertyName ( ) ;
1455
1458
}
1456
1459
if ( token ( ) === SyntaxKind . PrivateIdentifier ) {
@@ -1459,8 +1462,8 @@ namespace ts {
1459
1462
return parseIdentifierName ( ) ;
1460
1463
}
1461
1464
1462
- function parsePropertyName ( ) : PropertyName {
1463
- return parsePropertyNameWorker ( /*allowComputedPropertyNames*/ true ) ;
1465
+ function parsePropertyName ( computedNameIsNonEmitting : boolean ) : PropertyName {
1466
+ return parsePropertyNameWorker ( /*allowComputedPropertyNames*/ true , computedNameIsNonEmitting ) ;
1464
1467
}
1465
1468
1466
1469
function parseComputedPropertyName ( ) : ComputedPropertyName {
@@ -2563,7 +2566,7 @@ namespace ts {
2563
2566
function parseTypeQuery ( ) : TypeQueryNode {
2564
2567
const node = < TypeQueryNode > createNode ( SyntaxKind . TypeQuery ) ;
2565
2568
parseExpected ( SyntaxKind . TypeOfKeyword ) ;
2566
- node . exprName = parseEntityName ( /*allowReservedWords*/ true ) ;
2569
+ node . exprName = doInsideOfContext ( NodeFlags . InNonEmittingExpression , ( ) => parseEntityName ( /*allowReservedWords*/ true ) ) ;
2567
2570
return finishNode ( node ) ;
2568
2571
}
2569
2572
@@ -2814,7 +2817,7 @@ namespace ts {
2814
2817
}
2815
2818
2816
2819
function parsePropertyOrMethodSignature ( node : PropertySignature | MethodSignature ) : PropertySignature | MethodSignature {
2817
- node . name = parsePropertyName ( ) ;
2820
+ node . name = parsePropertyName ( /*computedNameIsNonEmitting*/ true ) ;
2818
2821
node . questionToken = parseOptionalToken ( SyntaxKind . QuestionToken ) ;
2819
2822
if ( token ( ) === SyntaxKind . OpenParenToken || token ( ) === SyntaxKind . LessThanToken ) {
2820
2823
node . kind = SyntaxKind . MethodSignature ;
@@ -3362,10 +3365,7 @@ namespace ts {
3362
3365
function parseType ( ) : TypeNode {
3363
3366
// The rules about 'yield' only apply to actual code/expression contexts. They don't
3364
3367
// apply to 'type' contexts. So we disable these parameters here before moving on.
3365
- return doOutsideOfContext (
3366
- NodeFlags . TypeExcludesFlags ,
3367
- ( ) => doInsideOfContext ( NodeFlags . InNonEmittingNode , parseTypeWorker )
3368
- ) ;
3368
+ return doOutsideOfContext ( NodeFlags . TypeExcludesFlags , parseTypeWorker ) ;
3369
3369
}
3370
3370
3371
3371
function parseTypeWorker ( noConditionalTypes ?: boolean ) : TypeNode {
@@ -5002,7 +5002,7 @@ namespace ts {
5002
5002
5003
5003
const asteriskToken = parseOptionalToken ( SyntaxKind . AsteriskToken ) ;
5004
5004
const tokenIsIdentifier = isIdentifier ( ) ;
5005
- node . name = parsePropertyName ( ) ;
5005
+ node . name = parsePropertyName ( /*computedNameIsNonEmitting*/ false ) ;
5006
5006
// Disallowing of optional property assignments and definite assignment assertion happens in the grammar checker.
5007
5007
( < MethodDeclaration > node ) . questionToken = parseOptionalToken ( SyntaxKind . QuestionToken ) ;
5008
5008
( < MethodDeclaration > node ) . exclamationToken = parseOptionalToken ( SyntaxKind . ExclamationToken ) ;
@@ -5712,9 +5712,9 @@ namespace ts {
5712
5712
case SyntaxKind . ClassKeyword :
5713
5713
return parseClassDeclaration ( < ClassDeclaration > node ) ;
5714
5714
case SyntaxKind . InterfaceKeyword :
5715
- return doInsideOfContext ( NodeFlags . InNonEmittingNode , ( ) => parseInterfaceDeclaration ( < InterfaceDeclaration > node ) ) ;
5715
+ return parseInterfaceDeclaration ( < InterfaceDeclaration > node ) ;
5716
5716
case SyntaxKind . TypeKeyword :
5717
- return doInsideOfContext ( NodeFlags . InNonEmittingNode , ( ) => parseTypeAliasDeclaration ( < TypeAliasDeclaration > node ) ) ;
5717
+ return parseTypeAliasDeclaration ( < TypeAliasDeclaration > node ) ;
5718
5718
case SyntaxKind . EnumKeyword :
5719
5719
return parseEnumDeclaration ( < EnumDeclaration > node ) ;
5720
5720
case SyntaxKind . GlobalKeyword :
@@ -5779,7 +5779,7 @@ namespace ts {
5779
5779
const node = < BindingElement > createNode ( SyntaxKind . BindingElement ) ;
5780
5780
node . dotDotDotToken = parseOptionalToken ( SyntaxKind . DotDotDotToken ) ;
5781
5781
const tokenIsIdentifier = isIdentifier ( ) ;
5782
- const propertyName = parsePropertyName ( ) ;
5782
+ const propertyName = parsePropertyName ( /*computedNameIsNonEmitting*/ false ) ;
5783
5783
if ( tokenIsIdentifier && token ( ) !== SyntaxKind . ColonToken ) {
5784
5784
node . name = < Identifier > propertyName ;
5785
5785
}
@@ -5953,12 +5953,8 @@ namespace ts {
5953
5953
5954
5954
function parsePropertyOrMethodDeclaration ( node : PropertyDeclaration | MethodDeclaration ) : PropertyDeclaration | MethodDeclaration {
5955
5955
const asteriskToken = parseOptionalToken ( SyntaxKind . AsteriskToken ) ;
5956
- if ( node . modifiers && some ( node . modifiers , isAbstractModifier ) ) {
5957
- node . name = doInsideOfContext ( NodeFlags . InNonEmittingNode , parsePropertyName ) ;
5958
- }
5959
- else {
5960
- node . name = parsePropertyName ( ) ;
5961
- }
5956
+ const isAbstract = ! ! node . modifiers && some ( node . modifiers , isAbstractModifier ) ;
5957
+ node . name = parsePropertyName ( isAbstract ) ;
5962
5958
5963
5959
// Note: this is not legal as per the grammar. But we allow it in the parser and
5964
5960
// report an error in the grammar checker.
@@ -5971,7 +5967,7 @@ namespace ts {
5971
5967
5972
5968
function parseAccessorDeclaration ( node : AccessorDeclaration , kind : AccessorDeclaration [ "kind" ] ) : AccessorDeclaration {
5973
5969
node . kind = kind ;
5974
- node . name = parsePropertyName ( ) ;
5970
+ node . name = parsePropertyName ( /*computedNameIsNonEmitting*/ false ) ;
5975
5971
fillSignature ( SyntaxKind . ColonToken , SignatureFlags . None , node ) ;
5976
5972
node . body = parseFunctionBlockOrSemicolon ( SignatureFlags . None ) ;
5977
5973
return finishNode ( node ) ;
@@ -6277,7 +6273,7 @@ namespace ts {
6277
6273
// or any time an integer literal initializer is encountered.
6278
6274
function parseEnumMember ( ) : EnumMember {
6279
6275
const node = < EnumMember > createNodeWithJSDoc ( SyntaxKind . EnumMember ) ;
6280
- node . name = parsePropertyName ( ) ;
6276
+ node . name = parsePropertyName ( /*computedNameIsNonEmitting*/ false ) ;
6281
6277
node . initializer = allowInAnd ( parseInitializer ) ;
6282
6278
return finishNode ( node ) ;
6283
6279
}
@@ -6396,35 +6392,23 @@ namespace ts {
6396
6392
( isIdentifier ( ) || tokenAfterImportDefinitelyProducesImportDeclaration ( ) )
6397
6393
) {
6398
6394
isTypeOnly = true ;
6399
- identifier = isIdentifier ( ) ? doInsideOfContext ( NodeFlags . InNonEmittingNode , parseIdentifier ) : undefined ;
6400
- node . flags |= NodeFlags . InNonEmittingNode ;
6395
+ identifier = isIdentifier ( ) ? parseIdentifier ( ) : undefined ;
6401
6396
}
6402
6397
6403
6398
if ( identifier && ! tokenAfterImportedIdentifierDefinitelyProducesImportDeclaration ( ) ) {
6404
6399
return parseImportEqualsDeclaration ( < ImportEqualsDeclaration > node , identifier , isTypeOnly ) ;
6405
6400
}
6406
6401
6407
6402
// Import statement
6408
- if ( isTypeOnly ) {
6409
- return doInsideOfContext (
6410
- NodeFlags . InNonEmittingNode ,
6411
- ( ) => parseImportDeclarationRest ( node as ImportDeclaration , afterImportPos , identifier , isTypeOnly )
6412
- ) ;
6413
- }
6414
-
6415
- return parseImportDeclarationRest ( node as ImportDeclaration , afterImportPos , identifier , isTypeOnly ) ;
6416
- }
6417
-
6418
- function parseImportDeclarationRest ( node : ImportDeclaration , afterImportPos : number , name : Identifier | undefined , isTypeOnly : boolean ) : ImportDeclaration {
6419
6403
node . kind = SyntaxKind . ImportDeclaration ;
6420
6404
// ImportDeclaration:
6421
6405
// import ImportClause from ModuleSpecifier ;
6422
6406
// import ModuleSpecifier;
6423
- if ( name || // import id
6407
+ if ( identifier || // import id
6424
6408
token ( ) === SyntaxKind . AsteriskToken || // import *
6425
6409
token ( ) === SyntaxKind . OpenBraceToken // import {
6426
6410
) {
6427
- ( < ImportDeclaration > node ) . importClause = parseImportClause ( name , afterImportPos , isTypeOnly ) ;
6411
+ ( < ImportDeclaration > node ) . importClause = parseImportClause ( identifier , afterImportPos , isTypeOnly ) ;
6428
6412
parseExpected ( SyntaxKind . FromKeyword ) ;
6429
6413
}
6430
6414
@@ -6587,9 +6571,6 @@ namespace ts {
6587
6571
function parseExportDeclaration ( node : ExportDeclaration ) : ExportDeclaration {
6588
6572
node . kind = SyntaxKind . ExportDeclaration ;
6589
6573
node . isTypeOnly = parseOptional ( SyntaxKind . TypeKeyword ) ;
6590
- if ( node . isTypeOnly ) {
6591
- return doInsideOfContext ( NodeFlags . InNonEmittingNode , ( ) => parseExportDeclarationWorker ( node ) ) ;
6592
- }
6593
6574
return parseExportDeclarationWorker ( node ) ;
6594
6575
}
6595
6576
0 commit comments