anchor.diff:        DartType keyType,
         DartType valueType,
         Map<TreeNode, DartType> inferredSpreadTypes,
  -      Map<Expression, DartType> inferredConditionTypes) {
  +      Map<Expression, DartType> inferredConditionTypes,
  +      _MapLiteralEntryOffsets offsets) {
       // It's disambiguated as a map literal.
       MapLiteralEntry replacement = entry;
  -    if (iterableSpreadOffset != null) {
  +    if (offsets.iterableSpreadOffset != null) {
         replacement = new MapLiteralEntry(
             inferrer.helper.buildProblem(
                 templateSpreadMapEntryTypeMismatch.withArguments(
  -                  iterableSpreadType!, inferrer.isNonNullableByDefault),
  -              iterableSpreadOffset!,
  +                  offsets.iterableSpreadType!, inferrer.isNonNullableByDefault),
  +              offsets.iterableSpreadOffset!,
                 1),
             new NullLiteral())
  -        ..fileOffset = iterableSpreadOffset!;
  +        ..fileOffset = offsets.iterableSpreadOffset!;
       }
       if (entry is SpreadMapEntry) {
         DartType? spreadType = inferredSpreadTypes[entry.expression];
  
positive.code: 
    _UriOffset(this.uri, this.fileOffset);
  }
  
negative.code:       actualTypes.add(valueResult.inferredType);
        // Use 'dynamic' for error recovery.
        actualTypesForSet.add(const DynamicType());
        offsets.mapEntryOffset = entry.fileOffset;
        return entry;
      }
    }
  