anchor.diff:    @override
     void handleSpreadExpression(Token spreadToken) {
       var expression = pop() as Expression;
  -    if (enableSpreadCollections) {
  -      push(ast.spreadElement(
  -          spreadOperator: spreadToken, expression: expression));
  -    } else {
  -      _reportFeatureNotEnabled(
  -        feature: ExperimentalFeatures.spread_collections,
  -        startToken: spreadToken,
  -      );
  -      push(_invalidCollectionElement);
  -    }
  +    push(
  +      ast.spreadElement(
  +        spreadOperator: spreadToken,
  +        expression: expression,
  +      ),
  +    );
     }
   
     @override
  
positive.code:     assert(optional(']', rightBracket));
      debugEvent("LiteralList");
  
      if (enableControlFlowCollections || enableSpreadCollections) {
        List<CollectionElement> elements = popCollectionElements(count);
        var typeArguments = pop() as TypeArgumentList?;
  
        // TODO(danrubel): Remove this and _InvalidCollectionElement
        // once control flow and spread collection support is enabled by default
        elements.removeWhere((e) => e == _invalidCollectionElement);
  
        push(ast.listLiteral(
            constKeyword, typeArguments, leftBracket, elements, rightBracket));
      } else {
        var elements = popTypedList<Expression>(count) ?? const [];
        var typeArguments = pop() as TypeArgumentList?;
  
        List<Expression> expressions = <Expression>[];
        for (var elem in elements) {
          expressions.add(elem);
        }
  
        push(ast.listLiteral(
            constKeyword, typeArguments, leftBracket, expressions, rightBracket));
      }
    }
  
    @override
  
negative.code:   }
  }
  
  class _MixinDeclarationBuilder extends _ClassLikeDeclarationBuilder {
    final Token? augmentKeyword;
    final Token mixinKeyword;
  