anchor.diff:  
       var elsePart = popIfNotNull(elseToken) as Statement?;
       var thenPart = pop() as Statement;
  -    var condition = pop() as ParenthesizedExpression;
  +    var condition = pop() as _ParenthesizedCondition;
       push(ast.ifStatement(
           ifToken,
           condition.leftParenthesis,
  
positive.code:     var elseElement = pop() as CollectionElement;
      var elseToken = pop() as Token;
      var thenElement = pop() as CollectionElement;
      var condition = pop() as ParenthesizedExpression;
      var ifToken = pop() as Token;
      pushIfControlFlowInfo(
          ifToken, condition, thenElement, elseToken, elseElement);
  
negative.code:   _ParameterDefaultValue(this.separator, this.value);
  }
  
  /// Data structure placed on the stack to represent the parenthesized condition
  /// part of an if-statement, if-control-flow, switch-statement, while-statement,
  /// or do-while-statement.
  class _ParenthesizedCondition {
    final Token leftParenthesis;
    final ExpressionImpl expression;
  
    _ParenthesizedCondition(this.leftParenthesis, this.expression);
  
    Token get rightParenthesis => leftParenthesis.endGroup!;
  }
  
  /// Data structure placed on stack to represent the redirected constructor.
  class _RedirectingFactoryBody {
    final Token? asyncKeyword;
  