anchor.diff:     *         assignableExpression assignmentOperator expressionWithoutCascade
      *       | conditionalExpression
      *       | throwExpressionWithoutCascade
  +   *       | matchExpression
      */
     Expression parseExpressionWithoutCascade() {
       if (_matchesKeyword(Keyword.THROW)) {
         return _parseThrowExpressionWithoutCascade();
       } else if (_matchesKeyword(Keyword.RETHROW)) {
         return _parseRethrowExpression();
  +    } else if (_matchesKeyword(Keyword.MATCH)) {
  +      return _parseMatchExpression();
       }
       //
       // assignableExpression is a subset of conditionalExpression, so we can
  
positive.code:     } finally {
        _inInitializer = wasInInitializer;
      }
    }
  
    /**
  
negative.code:   @override
    bool visitMatchExpression(MatchExpression node) {
      MatchExpression toNode = this._toNode as MatchExpression;
      if (_and(
          _isEqualTokens(node.matchKeyword, toNode.matchKeyword),
          _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
          _isEqualNodes(node.expression, toNode.expression),
          _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
          _isEqualTokens(node.leftBracket, toNode.leftBracket),
          _isEqualNodeLists(node.clauses, toNode.clauses),
          _isEqualTokens(node.rightBracket, toNode.rightBracket))) {
        toNode.propagatedType = node.propagatedType;
        toNode.staticType = node.staticType;
        return true;
      }
      return false;
    }
  
    @override
  