return rv;
break;
GetIIDForMethodParam(nsIInterfaceInfo *iinfo, const nsXPTMethodInfo *methodInfo,                     const nsXPTParamInfo &paramInfo, PRUint16 methodIndex,                     nsXPTCMiniVariant *dispatchParams,                     PRBool isFullVariantArray, nsID &result){  nsresult rv;  switch (paramInfo.GetType().TagPart())  {    case nsXPTType::T_INTERFACE:      rv = iinfo->GetIIDForParamNoAlloc(methodIndex, &paramInfo, &result);      break;    case nsXPTType::T_INTERFACE_IS:    {      PRUint8 argnum;      rv = iinfo->GetInterfaceIsArgNumberForParam(methodIndex, &paramInfo, &argnum);      if (NS_FAILED(rv))        return rv;      const nsXPTParamInfo& arg_param = methodInfo->GetParam(argnum);      const nsXPTType& arg_type = arg_param.GetType();      // The xpidl compiler ensures this. We reaffirm it for safety.      if (!arg_type.IsPointer() || arg_type.TagPart() != nsXPTType::T_IID)        return NS_ERROR_UNEXPECTED;      nsID *p = nsnull;      if (isFullVariantArray) {        p = (nsID *) ((nsXPTCVariant*) dispatchParams)[argnum].val.p;      } else {        p = (nsID *) dispatchParams[argnum].val.p;      }      if (!p)        return NS_ERROR_UNEXPECTED;      result = *p;      break;    }    default:      rv = NS_ERROR_UNEXPECTED;  }  return rv;}