Back to index

lightning-sunbird  0.9+nobinonly
Classes | Defines | Typedefs | Functions | Variables
nsOS2VACLegacy.cpp File Reference
#include "nscore.h"
#include "nsServiceManagerUtils.h"

Go to the source code of this file.

Classes

struct  nsID
 A "unique identifier". More...
struct  vftable_nsISupports
 nsISupports vftable. More...
struct  vftable_nsGetServiceByCID_nsCOMPtr_helper
 nsGetServiceByCID::nsCOMPtr_helper vftable. More...
struct  vftable_nsQueryInterface_nsCOMPtr_helper
 nsQueryInterface::nsCOMPtr_helper vftable. More...
struct  obj_nsISupports
 nsISupport object. More...
struct  obj_nsCOMPtr_base
 nsCOMPtr_base object. More...
struct  obj_nsGetServiceByCID_nsCOMPtr_helper
 nsGetServiceByCID_nsCOMPtr_helper object. More...
struct  obj_nsQueryInterface_nsCOMPtr_helper
 nsQueryInterface_nsCOMPtr_helper object. More...

Defines

#define REFNSIID   const nsIID *
#define VFT_VAC365   1
 Visual Age for C++ v3.6.5 target (OS/2).
#define VFTCALL   _Optlink
 VFTable/Interface Calling Convention for Win32.
#define VFTFIRST_DECL   unsigned uFirst[2]
 First Entry which VAC uses.
#define VFTFIRST_VAL()   {0, 0},
#define VFTDELTA_DECL(n)   unsigned uDelta##n
 This deltas which VAC uses.
#define VFTDELTA_VAL()   0,

Typedefs

typedef struct nsID nsID
typedef struct nsID nsCID
typedef struct nsID nsIID
typedef PRUint32 nsrefcnt
typedef struct vftable_nsISupports VFTnsISupports
 nsISupports vftable.
typedef struct
vftable_nsGetServiceByCID_nsCOMPtr_helper 
VFTnsGetServiceByCID_nsCOMPtr_helper
 nsGetServiceByCID::nsCOMPtr_helper vftable.
typedef struct
vftable_nsQueryInterface_nsCOMPtr_helper 
VFTnsQueryInterface_nsCOMPtr_helper
 nsQueryInterface::nsCOMPtr_helper vftable.
typedef struct obj_nsISupports obj_nsISupports
 nsISupport object.
typedef struct obj_nsCOMPtr_base obj_nsCOMPtr_base
 nsCOMPtr_base object.
typedef struct
obj_nsGetServiceByCID_nsCOMPtr_helper 
obj_nsGetServiceByCID_nsCOMPtr_helper
 nsGetServiceByCID_nsCOMPtr_helper object.
typedef struct
obj_nsQueryInterface_nsCOMPtr_helper 
obj_nsQueryInterface_nsCOMPtr_helper
 nsQueryInterface_nsCOMPtr_helper object.

Functions

void *VFTCALL __dt__13nsCOMPtr_baseFv (void *pvThis, unsigned __dtorFlags)
 nsCOMPtr_base::~nsCOMPtr_base()
void *VFTCALL _dt__13nsCOMPtr_baseFv (void *pvThis, unsigned __dtorFlags)
 workaround for _Optlink bug.
nsresult VFTCALL GSBC_COM__operator_paratheses (void *pvThis, REFNSIID aIID, void **aInstancePtr)
 
assembly: ; 92 nsGetServiceByCID::operator()( const nsIID& aIID, void** aInstancePtr ) const align 010h
void *VFTCALL GSBC_COM__destructor (void *pvThis, unsigned __dtorFlags, unsigned __vtt)
 Just a destructor.
nsresult VFTCALL QI_COM__operator_paratheses (void *pvThis, REFNSIID aIID, void **aInstancePtr)
 
assembly ; 42 nsQueryInterface::operator()( const nsIID& aIID, void** answer ) const align 010h
void VFTCALL assign_assuming_AddRef__13nsCOMPtr_baseFP11nsISupports (void *pvThis, obj_nsISupports *newPtr)
 
C++ Code: void assign_assuming_AddRef( nsISupports* newPtr ) { / * |AddRef()|ing the new value (before entering this function) before |Release()|ing the old lets us safely ignore the self-assignment case.
void VFTCALL assign_from_helper__13nsCOMPtr_baseFRC15nsCOMPtr_helperRC4nsID (void *pvThis, void *helper, REFNSIID iid)
 
Assembly: ; 77 nsCOMPtr_base::assign_from_helper( const nsCOMPtr_helper& helper, const nsIID& iid ) align 010h

Variables

const
VFTnsGetServiceByCID_nsCOMPtr_helper 
_vft17nsGetServiceByCID15nsCOMPtr_helper
 VFT for nsGetServiceByCID::nsCOMPtr_helper or something like that.
const
VFTnsQueryInterface_nsCOMPtr_helper 
_vft16nsQueryInterface15nsCOMPtr_helper
 VFT for nsQueryInterface::nsCOMPtr_helper or something like that.

Class Documentation

struct obj_nsISupports

nsISupport object.

Definition at line 133 of file nsOS2VACLegacy.cpp.

Collaboration diagram for obj_nsISupports:
Class Members
VFTnsISupports * pVFT
struct obj_nsCOMPtr_base

nsCOMPtr_base object.

Definition at line 141 of file nsOS2VACLegacy.cpp.

Collaboration diagram for obj_nsCOMPtr_base:
Class Members
obj_nsISupports * mRawPtr
struct obj_nsGetServiceByCID_nsCOMPtr_helper

nsGetServiceByCID_nsCOMPtr_helper object.

Definition at line 149 of file nsOS2VACLegacy.cpp.

Collaboration diagram for obj_nsGetServiceByCID_nsCOMPtr_helper:
Class Members
nsID * mCID
nsresult * mErrorPtr
void * mServiceManager
VFTnsGetServiceByCID_nsCOMPtr_helper * pVFT
struct obj_nsQueryInterface_nsCOMPtr_helper

nsQueryInterface_nsCOMPtr_helper object.

Definition at line 160 of file nsOS2VACLegacy.cpp.

Collaboration diagram for obj_nsQueryInterface_nsCOMPtr_helper:
Class Members
nsresult * mErrorPtr
obj_nsISupports * mRawPtr
VFTnsQueryInterface_nsCOMPtr_helper * pVFT

Define Documentation

Definition at line 84 of file nsOS2VACLegacy.cpp.

#define VFT_VAC365   1

Visual Age for C++ v3.6.5 target (OS/2).

Indicate Visual Age for C++ v3.6.5 target

Definition at line 54 of file nsOS2VACLegacy.cpp.

#define VFTCALL   _Optlink

VFTable/Interface Calling Convention for Win32.

Definition at line 56 of file nsOS2VACLegacy.cpp.

#define VFTDELTA_DECL (   n)    unsigned uDelta##n

This deltas which VAC uses.

Definition at line 61 of file nsOS2VACLegacy.cpp.

#define VFTDELTA_VAL ( )    0,

Definition at line 62 of file nsOS2VACLegacy.cpp.

#define VFTFIRST_DECL   unsigned uFirst[2]

First Entry which VAC uses.

Definition at line 58 of file nsOS2VACLegacy.cpp.

#define VFTFIRST_VAL ( )    {0, 0},

Definition at line 59 of file nsOS2VACLegacy.cpp.


Typedef Documentation

typedef struct nsID nsCID
typedef struct nsID nsID
typedef struct nsID nsIID
typedef PRUint32 nsrefcnt

Definition at line 86 of file nsOS2VACLegacy.cpp.

nsCOMPtr_base object.

nsGetServiceByCID_nsCOMPtr_helper object.

nsISupport object.

nsQueryInterface_nsCOMPtr_helper object.

nsGetServiceByCID::nsCOMPtr_helper vftable.

nsISupports vftable.

nsQueryInterface::nsCOMPtr_helper vftable.


Function Documentation

void* VFTCALL __dt__13nsCOMPtr_baseFv ( void pvThis,
unsigned  __dtorFlags 
)

nsCOMPtr_base::~nsCOMPtr_base()

Remarks:
This guys doing the oji plugin have been very unfortunate to link in this without any similar new operator. The object is thus created in the plugin but freed by xpcom.dll. As the plugin and mozilla have different CRTs this is a good way of asking for trouble. But, they guys've been lucky, the VAC CRT might just handle this ok. However, we cannot perform this delete as we have no VAC CRT around, and

hence we will leak this object.

assembly: public dt13nsCOMPtr_baseFv dt13nsCOMPtr_baseFv proc push ebp mov ebp,esp sub esp,08h mov [ebp+08h],eax; this mov [ebp+0ch],edx; __dtorFlags

; 63 if ( mRawPtr ) mov eax,[ebp+08h]; this cmp dword ptr [eax],0h je

; 64 NSCAP_RELEASE(this, mRawPtr); mov ecx,[ebp+08h]; this mov ecx,[ecx] mov ecx,[ecx] mov eax,[ebp+08h]; this mov eax,[eax] add eax,[ecx+01ch] mov ecx,[ebp+08h]; this mov ecx,[ecx] mov ecx,[ecx] call dword ptr [ecx+018h] :

; 65 } test byte ptr [ebp+0ch],01h; dtorFlags je mov eax,[ebp+08h]; this call __dlFPv : mov eax,[ebp+08h]; this add esp,08h pop ebp ret dt13nsCOMPtr_baseFv endp

Definition at line 220 of file nsOS2VACLegacy.cpp.

{
    obj_nsCOMPtr_base *pThis = (obj_nsCOMPtr_base*)pvThis;
//asm("int $3");
    if (pThis->mRawPtr)
    {
        /* NSCAP_RELEASE(this, mRawPtr); */
        pThis->mRawPtr->pVFT->Release((char*)pThis->mRawPtr + pThis->mRawPtr->pVFT->uDeltaRelease);
    }

    /* 
     * Delete the object...
     * (As memtioned before we'll rather leak this.)
     */
    #if 0
    if (!(__dtorFlags & 1))
        __dl__FPv(this)
    #endif

    return pvThis;
}

Here is the caller graph for this function:

void* VFTCALL _dt__13nsCOMPtr_baseFv ( void pvThis,
unsigned  __dtorFlags 
)

workaround for _Optlink bug.

Definition at line 243 of file nsOS2VACLegacy.cpp.

{
    return __dt__13nsCOMPtr_baseFv(pvThis, __dtorFlags);
}

Here is the call graph for this function:


C++ Code: void assign_assuming_AddRef( nsISupports* newPtr ) { / * |AddRef()|ing the new value (before entering this function) before |Release()|ing the old lets us safely ignore the self-assignment case.

  We must, however, be careful only to |Release()| _after_ doing the
  assignment, in case the |Release()| leads to our _own_ destruction,
  which would, in turn, cause an incorrect second |Release()| of our old
  pointer.  Thank <waterson@netscape.com> for discovering this.

/ nsISupports* oldPtr = mRawPtr; mRawPtr = newPtr; NSCAP_LOG_ASSIGNMENT(this, newPtr); NSCAP_LOG_RELEASE(this, oldPtr); if ( oldPtr ) NSCAP_RELEASE(this, oldPtr); }

Definition at line 657 of file nsOS2VACLegacy.cpp.

{
    obj_nsCOMPtr_base  *pThis = (obj_nsCOMPtr_base *)pvThis;
    obj_nsISupports    *oldPtr;
     
    oldPtr = pThis->mRawPtr;
    pThis->mRawPtr = newPtr;
    if (oldPtr)
    {
        /* NSCAP_RELEASE(this, oldPtr); */
        pThis->mRawPtr->pVFT->Release(oldPtr + oldPtr->pVFT->uDeltaRelease);
    }
}

Here is the caller graph for this function:


Assembly: ; 77 nsCOMPtr_base::assign_from_helper( const nsCOMPtr_helper& helper, const nsIID& iid ) align 010h

   public assign_from_helper__13nsCOMPtr_baseFRC15nsCOMPtr_helperRC4nsID

assign_from_helper__13nsCOMPtr_baseFRC15nsCOMPtr_helperRC4nsID proc push ebp mov ebp,esp sub esp,08h push ebx sub esp,0ch mov [ebp+08h],eax; this mov [ebp+0ch],edx; helper mov [ebp+010h],ecx; iid

; 80 if ( NS_FAILED( helper(iid, NS_REINTERPRET_CAST(void**, &newRawPtr)) ) ) lea ecx,[ebp-04h]; newRawPtr mov edx,[ebp+010h]; iid mov ebx,[ebp+0ch]; helper mov ebx,[ebx] mov eax,[ebp+0ch]; helper add eax,[ebx+0ch] mov ebx,[ebp+0ch]; helper mov ebx,[ebx] call dword ptr [ebx+08h] test eax,080000000h je

; 81 newRawPtr = 0; mov dword ptr [ebp-04h],0h; newRawPtr :

; 82 assign_assuming_AddRef(newRawPtr); mov edx,[ebp-04h]; newRawPtr mov eax,[ebp+08h]; this call assign_assuming_AddRef__13nsCOMPtr_baseFP11nsISupports add esp,0ch pop ebx mov esp,ebp pop ebp ret assign_from_helper__13nsCOMPtr_baseFRC15nsCOMPtr_helperRC4nsID endp


C Code: void nsCOMPtr_base::assign_from_helper( const nsCOMPtr_helper& helper, const nsIID& iid ) { nsISupports* newRawPtr; if ( NS_FAILED( helper(iid, NS_REINTERPRET_CAST(void**, &newRawPtr)) ) ) newRawPtr = 0; assign_assuming_AddRef(newRawPtr); }

Definition at line 731 of file nsOS2VACLegacy.cpp.

{
    obj_nsCOMPtr_base  *pThis = (obj_nsCOMPtr_base *)pvThis;
    obj_nsISupports*    newRawPtr = NULL;
    nsresult            status = NS_ERROR_FAILURE;
//asm("int $3");

    /* this may or may not be correct but the layout is the same. */
    obj_nsQueryInterface_nsCOMPtr_helper  * pHelper = (obj_nsQueryInterface_nsCOMPtr_helper*)helper;

    /* if ( NS_FAILED( helper(iid, NS_REINTERPRET_CAST(void**, &newRawPtr)) ) ) */
    status = pHelper->pVFT->__operator_paratheses((char*)pHelper + pHelper->pVFT->uDelta__operator_paratheses, 
                                                   iid, (void**)&newRawPtr);
    if (NS_FAILED(status))
        newRawPtr = 0;

    /* assign_assuming_AddRef(newRawPtr); */
    assign_assuming_AddRef__13nsCOMPtr_baseFP11nsISupports(pThis, newRawPtr);
}

Here is the call graph for this function:

void* VFTCALL GSBC_COM__destructor ( void pvThis,
unsigned  __dtorFlags,
unsigned  __vtt 
)

Just a destructor.


assembly: ; 59 virtual ~nsGetServiceByCID() {}; align 010h

dt17nsGetServiceByCIDFv proc push ebp mov ebp,esp sub esp,08h mov [ebp+08h],eax; this mov [ebp+0ch],edx; dtorFlags mov [ebp+010h],ecx; __vtt mov eax,[ebp+08h]; this mov dword ptr [eax],offset FLAT:vft17nsGetServiceByCID15nsCOMPtr_helper mov edx,02h mov eax,[ebp+08h]; this add eax,08h call dt8nsCOMPtrXT17nsIServiceManager_Fv test byte ptr [ebp+0ch],01h; dtorFlags je mov eax,[ebp+08h]; this call __dlFPv : mov eax,[ebp+08h]; this add esp,08h pop ebp ret dt17nsGetServiceByCIDFv endp

Definition at line 462 of file nsOS2VACLegacy.cpp.

{
    obj_nsGetServiceByCID_nsCOMPtr_helper *pThis = (obj_nsGetServiceByCID_nsCOMPtr_helper *)pvThis;
//asm("int $3");

    /*
     * Because previously mentioned issues with VAC heaps, we'll  
     * not do anything in here.
     * (We will then skip destruction of all parents and such, but 
     *  I don't think that will hurt anyone.)
     */
    __dtorFlags = __dtorFlags;
    __vtt = __vtt;
    return pThis;
}
nsresult VFTCALL GSBC_COM__operator_paratheses ( void pvThis,
REFNSIID  aIID,
void **  aInstancePtr 
)


assembly: ; 92 nsGetServiceByCID::operator()( const nsIID& aIID, void** aInstancePtr ) const align 010h

   public __cl__17nsGetServiceByCIDCFRC4nsIDPPv

cl17nsGetServiceByCIDCFRC4nsIDPPv proc push ebp mov ebp,esp sub esp,014h push ebx sub esp,08h mov [ebp+08h],eax; this mov [ebp+0ch],edx; aIID mov [ebp+010h],ecx; aInstancePtr

; 94 nsresult status = NS_ERROR_FAILURE; mov dword ptr [ebp-04h],080004005h; status

; 95 if ( mServiceManager ) { mov eax,[ebp+08h]; this add eax,08h call opP13nsDerivedSafeXT17nsIServiceManager_8nsCOMPtrXT17nsIServiceManager_CFv test eax,eax je

; 96 status = mServiceManager->GetService(mCID, aIID, (void**)aInstancePtr); mov eax,[ebp+08h]; this add eax,08h call rf8nsCOMPtrXT17nsIServiceManager_CFv mov [ebp-08h],eax; __212 mov eax,[ebp+010h]; aInstancePtr push eax mov ecx,[ebp+0ch]; aIID mov edx,[ebp+08h]; this mov edx,[edx+04h] mov ebx,[ebp-08h]; __212 mov ebx,[ebx] mov eax,[ebp-08h]; __212 add eax,[ebx+024h] sub esp,0ch mov ebx,[ebp-08h]; __212 mov ebx,[ebx] call dword ptr [ebx+020h] add esp,010h mov [ebp-04h],eax; status

; 97 } else { jmp align 010h :

; 95 if ( mServiceManager ) {

; 98 nsCOMPtr<nsIServiceManager> mgr; lea eax,[ebp-0ch]; mgr call ct8nsCOMPtrXT17nsIServiceManager_Fv

; 99 NS_GetServiceManager(getter_AddRefs(mgr)); lea edx,[ebp-0ch]; mgr lea eax,[ebp-010h]; 216 call getter_AddRefsFR8nsCOMPtrXT17nsIServiceManager_ sub esp,04h lea eax,[ebp-010h]; 216 sub esp,04h call __opPP17nsIServiceManager15nsGetterAddRefsXT17nsIServiceManager_Fv add esp,08h call NS_GetServiceManager mov edx,02h lea eax,[ebp-010h]; 216 call __dt15nsGetterAddRefsXT17nsIServiceManager_Fv

; 100 if (mgr) lea eax,[ebp-0ch]; mgr call opP13nsDerivedSafeXT17nsIServiceManager_8nsCOMPtrXT17nsIServiceManager_CFv test eax,eax je

; 101 status = mgr->GetService(mCID, aIID, (void**)aInstancePtr); lea eax,[ebp-0ch]; mgr call rf8nsCOMPtrXT17nsIServiceManager_CFv mov [ebp-014h],eax; __217 mov eax,[ebp+010h]; aInstancePtr push eax mov ecx,[ebp+0ch]; aIID mov edx,[ebp+08h]; this mov edx,[edx+04h] mov ebx,[ebp-014h]; __217 mov ebx,[ebx] mov eax,[ebp-014h]; __217 add eax,[ebx+024h] sub esp,0ch mov ebx,[ebp-014h]; __217 mov ebx,[ebx] call dword ptr [ebx+020h] add esp,010h mov [ebp-04h],eax; status :

; 102 } mov edx,02h lea eax,[ebp-0ch]; mgr call dt8nsCOMPtrXT17nsIServiceManager_Fv :

; 103 if ( NS_FAILED(status) ) test byte ptr [ebp-01h],080h; status je

; 104 *aInstancePtr = 0; mov eax,[ebp+010h]; aInstancePtr mov dword ptr [eax],0h :

; 106 if ( mErrorPtr ) mov eax,[ebp+08h]; this cmp dword ptr [eax+0ch],0h je

; 107 *mErrorPtr = status; mov eax,[ebp+08h]; this mov eax,[eax+0ch] mov ebx,[ebp-04h]; status mov [eax],ebx :

; 108 return status; mov eax,[ebp-04h]; status add esp,08h pop ebx mov esp,ebp pop ebp ret cl17nsGetServiceByCIDCFRC4nsIDPPv endp


C++ Code: nsresult nsGetServiceByCID::operator()( const nsIID& aIID, void** aInstancePtr ) const { nsresult status = NS_ERROR_FAILURE; if ( mServiceManager ) { status = mServiceManager->GetService(mCID, aIID, (void**)aInstancePtr); } else { nsCOMPtr<nsIServiceManager> mgr; NS_GetServiceManager(getter_AddRefs(mgr)); if (mgr) status = mgr->GetService(mCID, aIID, (void**)aInstancePtr); } if ( NS_FAILED(status) ) *aInstancePtr = 0;

if ( mErrorPtr ) *mErrorPtr = status; return status; }

Definition at line 409 of file nsOS2VACLegacy.cpp.

{
    obj_nsGetServiceByCID_nsCOMPtr_helper *pThis = (obj_nsGetServiceByCID_nsCOMPtr_helper *)pvThis;
    nsresult status = NS_ERROR_FAILURE;
//asm("int $3");
    
    /* For convenience we don't use mServiceManager here because it's a wrapped object. 
     * We ASSUME that there is only one service manager floating around.... 
     */
    nsCOMPtr<nsIServiceManager>     mgr;
    NS_GetServiceManager(getter_AddRefs(mgr));
    if (mgr)
        status = mgr->GetService(*pThis->mCID, aIID, (void**)aInstancePtr);

    if (NS_FAILED(status))
        *aInstancePtr = 0;

    if (pThis->mErrorPtr)
        *pThis->mErrorPtr = status;
    return status;
}

Here is the call graph for this function:

nsresult VFTCALL QI_COM__operator_paratheses ( void pvThis,
REFNSIID  aIID,
void **  aInstancePtr 
)


assembly ; 42 nsQueryInterface::operator()( const nsIID& aIID, void** answer ) const align 010h

   public __cl__16nsQueryInterfaceCFRC4nsIDPPv

cl16nsQueryInterfaceCFRC4nsIDPPv proc push ebp mov ebp,esp sub esp,08h push ebx sub esp,0ch mov [ebp+08h],eax; this mov [ebp+0ch],edx; aIID mov [ebp+010h],ecx; answer

; 45 if ( mRawPtr ) mov eax,[ebp+08h]; this cmp dword ptr [eax+04h],0h je

; 46 { ; 47 status = mRawPtr->QueryInterface(aIID, answer); mov ecx,[ebp+010h]; answer mov edx,[ebp+0ch]; aIID mov ebx,[ebp+08h]; this mov ebx,[ebx+04h] mov ebx,[ebx] mov eax,[ebp+08h]; this mov eax,[eax+04h] add eax,[ebx+0ch] mov ebx,[ebp+08h]; this mov ebx,[ebx+04h] mov ebx,[ebx] call dword ptr [ebx+08h] mov [ebp-04h],eax; status

; 48 #ifdef NSCAP_FEATURE_TEST_NONNULL_QUERY_SUCCEEDS ; 49 NS_WARN_IF_FALSE(NS_SUCCEEDED(status), "interface not found---were you expecting that?"); ; 50 #endif ; 51 } jmp align 010h :

; 45 if ( mRawPtr )

; 53 status = NS_ERROR_NULL_POINTER; mov dword ptr [ebp-04h],080004003h; status :

; 55 if ( mErrorPtr ) mov eax,[ebp+08h]; this cmp dword ptr [eax+08h],0h je

; 56 *mErrorPtr = status; mov eax,[ebp+08h]; this mov eax,[eax+08h] mov ebx,[ebp-04h]; status mov [eax],ebx :

; 57 return status; mov eax,[ebp-04h]; status add esp,0ch pop ebx mov esp,ebp pop ebp ret cl16nsQueryInterfaceCFRC4nsIDPPv endp


C++ Code: nsresult nsQueryInterface::operator()( const nsIID& aIID, void** answer ) const { nsresult status; if ( mRawPtr ) { status = mRawPtr->QueryInterface(aIID, answer);

ifdef NSCAP_FEATURE_TEST_NONNULL_QUERY_SUCCEEDS

NS_WARN_IF_FALSE(NS_SUCCEEDED(status), "interface not found---were you expecting that?");

endif

} else status = NS_ERROR_NULL_POINTER;

if ( mErrorPtr ) *mErrorPtr = status; return status; }

Definition at line 597 of file nsOS2VACLegacy.cpp.

{
    obj_nsQueryInterface_nsCOMPtr_helper *pThis = (obj_nsQueryInterface_nsCOMPtr_helper *)pvThis;
    nsresult status = NS_ERROR_NULL_POINTER;
//asm("int $3");

    if (pThis->mRawPtr)
    {
        status = pThis->mRawPtr->pVFT->QueryInterface(pThis->mRawPtr, aIID, aInstancePtr);
        /* don't care about warnings, do we? */
    }
    
    if (pThis->mErrorPtr)
        *pThis->mErrorPtr = status;
    return status;
}

Variable Documentation

Initial value:

VFT for nsQueryInterface::nsCOMPtr_helper or something like that.

No destructor, only an operator().

We need to skip an underscore to get the name right.

assembly: vft16nsQueryInterface15nsCOMPtr_helper dd 0 db 0h,0h,0h,0h dd offset FLAT:cl__16nsQueryInterfaceCFRC4nsIDPPv db 0h,0h,0h,0h

Initial value:

VFT for nsGetServiceByCID::nsCOMPtr_helper or something like that.

It's just implementing an operator() and the destructor.

We need to skip an underscore to get the name right.

assembly: vft17nsGetServiceByCID15nsCOMPtr_helper dd 0 db 0h,0h,0h,0h dd offset FLAT:cl__17nsGetServiceByCIDCFRC4nsIDPPv db 0h,0h,0h,0h dd offset FLAT:dt17nsGetServiceByCIDFv db 0h,0h,0h,0h