anchor.diff:    var tOptionalParameterTypes =
         getField(t, '${JS_FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG()}');
   
  -  int sParametersLen =
  -      isNotNull(sParameterTypes) ? getLength(sParameterTypes) : 0;
  -  int tParametersLen =
  -      isNotNull(tParameterTypes) ? getLength(tParameterTypes) : 0;
  -
  -  int sOptionalParametersLen = isNotNull(sOptionalParameterTypes)
  -      ? getLength(sOptionalParameterTypes) : 0;
  -  int tOptionalParametersLen = isNotNull(tOptionalParameterTypes)
  -      ? getLength(tOptionalParameterTypes) : 0;
  +  int sParametersLen = sParameterTypes != null ? getLength(sParameterTypes) : 0;
  +  int tParametersLen = tParameterTypes != null ? getLength(tParameterTypes) : 0;
  +
  +  int sOptionalParametersLen =
  +      sOptionalParameterTypes != null ? getLength(sOptionalParameterTypes) : 0;
  +  int tOptionalParametersLen =
  +      tOptionalParameterTypes != null ? getLength(tOptionalParameterTypes) : 0;
   
     if (sParametersLen > tParametersLen) {
       // Too many required parameters in [s].
  
positive.code:         '${JS_OPERATOR_IS_PREFIX()}_${getField(t, JS_FUNCTION_TYPE_TAG())}';
      if (hasField(o, signatureName)) return true;
      var targetSignatureFunction = getField(o, '${JS_SIGNATURE_NAME()}');
      if (isNull(targetSignatureFunction)) return false;
      type = invokeOn(targetSignatureFunction, o, null);
      return isFunctionSubtype(type, t);
    }
  
negative.code:   // Subtyping is reflexive.
    if (isIdentical(s, t)) return true;
    // If either type is dynamic, [s] is a subtype of [t].
    if (s == null || t == null) return true;
    if (hasField(t, '${JS_FUNCTION_TYPE_TAG()}')) {
      return isFunctionSubtype(s, t);
    }
  