@@ -138,16 +138,21 @@ protected ExpressionFlags DisambiguateExpression(Expression expression, Expressi
138138        // Puts the left-most expression in brackets if necessary (in cases where it would be interpreted differently without brackets). 
139139        if  ( ( flags  &  ExpressionFlags . IsInPotentiallyAmbiguousContext )  !=  0 ) 
140140        { 
141-             if  ( flags . HasFlagFast ( ExpressionFlags . IsInsideStatementExpression  |  ExpressionFlags . IsLeftMost )  &&  ExpressionIsAmbiguousAsStatementExpression ( expression )  || 
141+             var  isAmbiguousExpression  =  flags . HasFlag ( ExpressionFlags . IsLeftMost )  && 
142+                 ( flags . HasFlagFast ( ExpressionFlags . IsInsideStatementExpression )  &&  ExpressionIsAmbiguousAsStatementExpression ( expression )  || 
143+                  flags . HasFlagFast ( ExpressionFlags . IsInsideExportDefaultExpression )  &&  ExpressionIsAmbiguousAsExportDefaultExpression ( expression )  || 
144+                  flags . HasFlagFast ( ExpressionFlags . IsInsideDecorator )  &&  DecoratorLeftMostExpressionIsParenthesized ( expression ,  isRoot :  flags . HasFlagFast ( ExpressionFlags . IsRootExpression ) ) ) ; 
145+ 
146+             isAmbiguousExpression  =  isAmbiguousExpression  || 
142147                flags . HasFlagFast ( ExpressionFlags . IsInsideArrowFunctionBody  |  ExpressionFlags . IsLeftMostInArrowFunctionBody )  &&  ExpressionIsAmbiguousAsArrowFunctionBody ( expression )  || 
143148                flags . HasFlagFast ( ExpressionFlags . IsInsideNewCallee  |  ExpressionFlags . IsLeftMostInNewCallee )  &&  ExpressionIsAmbiguousAsNewCallee ( expression )  || 
144-                 flags . HasFlagFast ( ExpressionFlags . IsInsideLeftHandSideExpression  |  ExpressionFlags . IsLeftMostInLeftHandSideExpression )  &&  LeftHandSideExpressionIsParenthesized ( expression )  || 
145-                 flags . HasFlagFast ( ExpressionFlags . IsInsideDecorator  |  ExpressionFlags . IsLeftMost )  &&  DecoratorLeftMostExpressionIsParenthesized ( expression ,  isRoot :  flags . HasFlagFast ( ExpressionFlags . IsRootExpression ) ) ) 
146-             { 
147-                 return  ( flags  |  ExpressionFlags . NeedsBrackets )  &  ~ ExpressionFlags . IsInAmbiguousInOperatorContext ; 
148-             } 
149+                 flags . HasFlagFast ( ExpressionFlags . IsInsideLeftHandSideExpression  |  ExpressionFlags . IsLeftMostInLeftHandSideExpression )  &&  LeftHandSideExpressionIsParenthesized ( expression ) ; 
150+ 
149151            // Edge case: for (var a = b = (c in d in e) in x); 
150-             else  if  ( flags . HasFlagFast ( ExpressionFlags . IsInAmbiguousInOperatorContext )  &&  expression  is  BinaryExpression  {  Operator :  BinaryOperator . In  } ) 
152+             isAmbiguousExpression  =  isAmbiguousExpression  || 
153+                 flags . HasFlagFast ( ExpressionFlags . IsInAmbiguousInOperatorContext )  &&  expression  is  BinaryExpression  {  Operator :  BinaryOperator . In  } ; 
154+ 
155+             if  ( isAmbiguousExpression ) 
151156            { 
152157                return  ( flags  |  ExpressionFlags . NeedsBrackets )  &  ~ ExpressionFlags . IsInAmbiguousInOperatorContext ; 
153158            } 
@@ -276,6 +281,20 @@ protected virtual bool ExpressionIsAmbiguousAsStatementExpression(Expression exp
276281        return  false ; 
277282    } 
278283
284+     protected  virtual  bool  ExpressionIsAmbiguousAsExportDefaultExpression ( Expression  expression ) 
285+     { 
286+         switch  ( expression . Type ) 
287+         { 
288+             case  Nodes . ClassExpression : 
289+             case  Nodes . FunctionExpression : 
290+             case  Nodes . Identifier  when  Scanner . IsStrictModeReservedWord ( expression . As < Identifier > ( ) . Name ) : 
291+             case  Nodes . SequenceExpression : 
292+                 return  true ; 
293+         } 
294+ 
295+         return  false ; 
296+     } 
297+ 
279298    protected  virtual  bool  ExpressionIsAmbiguousAsArrowFunctionBody ( Expression  expression ) 
280299    { 
281300        switch  ( expression . Type ) 
0 commit comments