@@ -2184,9 +2184,9 @@ module ts {
21842184 // AssignmentExpression[in]
21852185 // Expression[in] , AssignmentExpression[in]
21862186
2187- var expr = parseAssignmentExpression ( ) ;
2187+ var expr = parseAssignmentExpressionOrHigher ( ) ;
21882188 while ( parseOptional ( SyntaxKind . CommaToken ) ) {
2189- expr = makeBinaryExpression ( expr , SyntaxKind . CommaToken , parseAssignmentExpression ( ) ) ;
2189+ expr = makeBinaryExpression ( expr , SyntaxKind . CommaToken , parseAssignmentExpressionOrHigher ( ) ) ;
21902190 }
21912191 return expr ;
21922192 }
@@ -2212,10 +2212,10 @@ module ts {
22122212 // = AssignmentExpression[?In, ?Yield]
22132213
22142214 parseExpected ( SyntaxKind . EqualsToken ) ;
2215- return parseAssignmentExpression ( ) ;
2215+ return parseAssignmentExpressionOrHigher ( ) ;
22162216 }
22172217
2218- function parseAssignmentExpression ( ) : Expression {
2218+ function parseAssignmentExpressionOrHigher ( ) : Expression {
22192219 // AssignmentExpression[in,yield]:
22202220 // 1) ConditionalExpression[?in,?yield]
22212221 // 2) LeftHandSideExpression = AssignmentExpression[?in,?yield]
@@ -2257,7 +2257,7 @@ module ts {
22572257 if ( isLeftHandSideExpression ( expr ) && isAssignmentOperator ( token ) ) {
22582258 var operator = token ;
22592259 nextToken ( ) ;
2260- return makeBinaryExpression ( expr , operator , parseAssignmentExpression ( ) ) ;
2260+ return makeBinaryExpression ( expr , operator , parseAssignmentExpressionOrHigher ( ) ) ;
22612261 }
22622262
22632263 // otherwise this was production '1'. Return whatever we parsed so far.
@@ -2313,7 +2313,7 @@ module ts {
23132313 if ( ! scanner . hasPrecedingLineBreak ( ) &&
23142314 ( token === SyntaxKind . AsteriskToken || isStartOfExpression ( ) ) ) {
23152315 node . asteriskToken = parseOptionalToken ( SyntaxKind . AsteriskToken ) ;
2316- node . expression = parseAssignmentExpression ( ) ;
2316+ node . expression = parseAssignmentExpressionOrHigher ( ) ;
23172317 return finishNode ( node ) ;
23182318 }
23192319 else {
@@ -2499,7 +2499,7 @@ module ts {
24992499 body = parseFunctionBlock ( /*allowYield:*/ false , /* ignoreMissingOpenBrace */ true ) ;
25002500 }
25012501 else {
2502- body = parseAssignmentExpression ( ) ;
2502+ body = parseAssignmentExpressionOrHigher ( ) ;
25032503 }
25042504
25052505 return makeFunctionExpression ( SyntaxKind . ArrowFunction , pos , /*asteriskToken:*/ undefined , /*name:*/ undefined , sig , body ) ;
@@ -2510,15 +2510,16 @@ module ts {
25102510 // we do not that for the 'whenFalse' part.
25112511
25122512 var expr = parseBinaryOperators ( parseUnaryExpression ( ) , /*minPrecedence:*/ 0 ) ;
2513- while ( parseOptional ( SyntaxKind . QuestionToken ) ) {
2514- var node = < ConditionalExpression > createNode ( SyntaxKind . ConditionalExpression , expr . pos ) ;
2515- node . condition = expr ;
2516- node . whenTrue = allowInAnd ( parseAssignmentExpression ) ;
2517- parseExpected ( SyntaxKind . ColonToken ) ;
2518- node . whenFalse = parseAssignmentExpression ( ) ;
2519- expr = finishNode ( node ) ;
2513+ if ( ! parseOptional ( SyntaxKind . QuestionToken ) ) {
2514+ return expr ;
25202515 }
2521- return expr ;
2516+
2517+ var node = < ConditionalExpression > createNode ( SyntaxKind . ConditionalExpression , expr . pos ) ;
2518+ node . condition = expr ;
2519+ node . whenTrue = allowInAnd ( parseAssignmentExpressionOrHigher ) ;
2520+ parseExpected ( SyntaxKind . ColonToken ) ;
2521+ node . whenFalse = parseAssignmentExpressionOrHigher ( ) ;
2522+ return finishNode ( node ) ;
25222523 }
25232524
25242525 function parseBinaryOperators ( expr : Expression , minPrecedence : number ) : Expression {
@@ -2816,7 +2817,7 @@ module ts {
28162817 function parseAssignmentExpressionOrOmittedExpression ( ) : Expression {
28172818 return token === SyntaxKind . CommaToken
28182819 ? createNode ( SyntaxKind . OmittedExpression )
2819- : parseAssignmentExpression ( ) ;
2820+ : parseAssignmentExpressionOrHigher ( ) ;
28202821 }
28212822
28222823 function parseArrayLiteralElement ( ) : Expression {
@@ -2875,7 +2876,7 @@ module ts {
28752876 node = < PropertyDeclaration > createNode ( SyntaxKind . PropertyAssignment , nodePos ) ;
28762877 node . name = propertyName ;
28772878 parseExpected ( SyntaxKind . ColonToken ) ;
2878- ( < PropertyDeclaration > node ) . initializer = allowInAnd ( parseAssignmentExpression ) ;
2879+ ( < PropertyDeclaration > node ) . initializer = allowInAnd ( parseAssignmentExpressionOrHigher ) ;
28792880 }
28802881
28812882 node . flags = flags ;
0 commit comments