@@ -32,7 +32,7 @@ module ts {
3232 leadingCommentRanges ?: CommentRange [ ] ;
3333 trailingCommentRanges ?: CommentRange [ ] ;
3434 }
35-
35+
3636 interface ScopeFrame {
3737 names : Map < string > ;
3838 previous : ScopeFrame ;
@@ -2100,7 +2100,7 @@ module ts {
21002100 name = "_" + ( tempCount < 25 ? String . fromCharCode ( tempCount + ( tempCount < 8 ? 0 : 1 ) + CharacterCodes . a ) : tempCount - 25 ) ;
21012101 tempCount ++ ;
21022102 }
2103- var result = < Identifier > createNode ( SyntaxKind . Identifier ) ;
2103+ var result = < Identifier > createSynthesizedNode ( SyntaxKind . Identifier ) ;
21042104 result . text = name ;
21052105 return result ;
21062106 }
@@ -2647,14 +2647,6 @@ module ts {
26472647 }
26482648 }
26492649
2650- function createSynthesizedNode ( kind : SyntaxKind ) : Node {
2651- var node = createNode ( kind ) ;
2652- node . pos = - 1 ;
2653- node . end = - 1 ;
2654-
2655- return node ;
2656- }
2657-
26582650 function emitDownlevelObjectLiteralWithComputedProperties ( node : ObjectLiteralExpression , firstComputedPropertyIndex : number ) : void {
26592651 var parenthesizedObjectLiteral = createDownlevelObjectLiteralWithComputedProperties ( node , firstComputedPropertyIndex ) ;
26602652 return emit ( parenthesizedObjectLiteral ) ;
@@ -3551,9 +3543,9 @@ module ts {
35513543 }
35523544
35533545 function createVoidZero ( ) : Expression {
3554- var zero = < LiteralExpression > createNode ( SyntaxKind . NumericLiteral ) ;
3546+ var zero = < LiteralExpression > createSynthesizedNode ( SyntaxKind . NumericLiteral ) ;
35553547 zero . text = "0" ;
3556- var result = < VoidExpression > createNode ( SyntaxKind . VoidExpression ) ;
3548+ var result = < VoidExpression > createSynthesizedNode ( SyntaxKind . VoidExpression ) ;
35573549 result . expression = zero ;
35583550 return result ;
35593551 }
@@ -3619,19 +3611,19 @@ module ts {
36193611 // we need to generate a temporary variable
36203612 value = ensureIdentifier ( value ) ;
36213613 // Return the expression 'value === void 0 ? defaultValue : value'
3622- var equals = < BinaryExpression > createNode ( SyntaxKind . BinaryExpression ) ;
3614+ var equals = < BinaryExpression > createSynthesizedNode ( SyntaxKind . BinaryExpression ) ;
36233615 equals . left = value ;
3624- equals . operatorToken = createNode ( SyntaxKind . EqualsEqualsEqualsToken ) ;
3616+ equals . operatorToken = createSynthesizedNode ( SyntaxKind . EqualsEqualsEqualsToken ) ;
36253617 equals . right = createVoidZero ( ) ;
3626- var cond = < ConditionalExpression > createNode ( SyntaxKind . ConditionalExpression ) ;
3618+ var cond = < ConditionalExpression > createSynthesizedNode ( SyntaxKind . ConditionalExpression ) ;
36273619 cond . condition = equals ;
36283620 cond . whenTrue = defaultValue ;
36293621 cond . whenFalse = value ;
36303622 return cond ;
36313623 }
36323624
36333625 function createNumericLiteral ( value : number ) {
3634- var node = < LiteralExpression > createNode ( SyntaxKind . NumericLiteral ) ;
3626+ var node = < LiteralExpression > createSynthesizedNode ( SyntaxKind . NumericLiteral ) ;
36353627 node . text = "" + value ;
36363628 return node ;
36373629 }
@@ -3640,7 +3632,7 @@ module ts {
36403632 if ( expr . kind === SyntaxKind . Identifier || expr . kind === SyntaxKind . PropertyAccessExpression || expr . kind === SyntaxKind . ElementAccessExpression ) {
36413633 return < LeftHandSideExpression > expr ;
36423634 }
3643- var node = < ParenthesizedExpression > createNode ( SyntaxKind . ParenthesizedExpression ) ;
3635+ var node = < ParenthesizedExpression > createSynthesizedNode ( SyntaxKind . ParenthesizedExpression ) ;
36443636 node . expression = expr ;
36453637 return node ;
36463638 }
@@ -3649,14 +3641,14 @@ module ts {
36493641 if ( propName . kind !== SyntaxKind . Identifier ) {
36503642 return createElementAccess ( object , propName ) ;
36513643 }
3652- var node = < PropertyAccessExpression > createNode ( SyntaxKind . PropertyAccessExpression ) ;
3644+ var node = < PropertyAccessExpression > createSynthesizedNode ( SyntaxKind . PropertyAccessExpression ) ;
36533645 node . expression = parenthesizeForAccess ( object ) ;
36543646 node . name = propName ;
36553647 return node ;
36563648 }
36573649
36583650 function createElementAccess ( object : Expression , index : Expression ) : Expression {
3659- var node = < ElementAccessExpression > createNode ( SyntaxKind . ElementAccessExpression ) ;
3651+ var node = < ElementAccessExpression > createSynthesizedNode ( SyntaxKind . ElementAccessExpression ) ;
36603652 node . expression = parenthesizeForAccess ( object ) ;
36613653 node . argumentExpression = index ;
36623654 return node ;
@@ -3843,6 +3835,7 @@ module ts {
38433835 case SyntaxKind . CatchClause :
38443836 case SyntaxKind . ForStatement :
38453837 case SyntaxKind . ForInStatement :
3838+ case SyntaxKind . ForOfStatement :
38463839 case SyntaxKind . SwitchKeyword :
38473840 return current ;
38483841 case SyntaxKind . Block :
@@ -3872,12 +3865,12 @@ module ts {
38723865 function renameNonTopLevelLetAndConst ( node : Node ) : void {
38733866 // do not rename if
38743867 // - language version is ES6+
3875- // - node is synthesized (does not have a parent)
3868+ // - node is synthesized
38763869 // - node is not identifier (can happen when tree is malformed)
38773870 // - node is definitely not name of variable declaration.
38783871 // it still can be part of parameter declaration, this check will be done next
38793872 if ( languageVersion >= ScriptTarget . ES6 ||
3880- ! node . parent ||
3873+ nodeIsSynthesized ( node ) ||
38813874 node . kind !== SyntaxKind . Identifier ||
38823875 ( node . parent . kind !== SyntaxKind . VariableDeclaration && node . parent . kind !== SyntaxKind . BindingElement ) ) {
38833876 return ;
0 commit comments