anchor.diff:          NamedExpression namedArgument = arguments.named[index];
           namedArgument.value = expression..parent = namedArgument;
         }
  +      gatherer?.tryConstrainLower(formalType, inferredType);
         if (useFormalAndActualTypes) {
           formalTypes!.add(formalType);
           actualTypes!.add(inferredType);
  
positive.code:     }
  
      if (inferenceNeeded) {
        gatherer!.constrainArguments(formalTypes!, actualTypes!);
        typeSchemaEnvironment.upwardsInfer(gatherer, calleeTypeParameters,
            inferredTypes!, libraryBuilder.library);
        assert(inferredTypes.every((type) => isKnown(type)),
            "Unknown type(s) in inferred types: $inferredTypes.");
  
negative.code:         explicitTypeArguments == null &&
          calleeTypeParameters.isNotEmpty;
      bool typeChecksNeeded = !isTopLevel;
      bool useFormalAndActualTypes = typeChecksNeeded ||
          isSpecialCasedBinaryOperator ||
          isSpecialCasedTernaryOperator;
  
  