anchor.diff:      bool hasMapEntry = false;
       bool hasMapSpread = false;
       bool hasIterableSpread = false;
  +    _MapLiteralEntryOffsets offsets = new _MapLiteralEntryOffsets();
       if (inferenceNeeded || typeChecksNeeded) {
  -      mapEntryOffset = null;
  -      mapSpreadOffset = null;
  -      iterableSpreadOffset = null;
  -      iterableSpreadType = null;
         DartType spreadTypeContext = const UnknownType();
         if (typeContextIsIterable && !typeContextIsMap) {
           spreadTypeContext = inferrer.typeSchemaEnvironment.getTypeAsInstanceOf(
  
positive.code:       Map<TreeNode, DartType> inferredSpreadTypes,
        Map<Expression, DartType> inferredConditionTypes,
        bool inferenceNeeded,
        bool typeChecksNeeded) {
      if (entry is SpreadMapEntry) {
        ExpressionInferenceResult spreadResult = inferrer.inferExpression(
            entry.expression, spreadContext, inferenceNeeded || typeChecksNeeded,
  
negative.code:       }
      } else if (entry is IfMapEntry) {
        MapLiteralEntry then = checkMapEntry(entry.then, keyType, valueType,
            inferredSpreadTypes, inferredConditionTypes, offsets);
        entry.then = then..parent = entry;
        if (entry.otherwise != null) {
          MapLiteralEntry otherwise = checkMapEntry(entry.otherwise!, keyType,
              valueType, inferredSpreadTypes, inferredConditionTypes, offsets);
          entry.otherwise = otherwise..parent = entry;
        }
      } else if (entry is ForMapEntry) {
  