Bug 313309 - Table-driven QI, part 4 (the final piece!) - this could be a test-landing depending on how perf numbers turn out, r=shaver

This commit is contained in:
benjamin%smedbergs.us 2006-11-15 22:10:57 +00:00
Родитель 6c4fddf6b1
Коммит d953ca7061
2 изменённых файлов: 617 добавлений и 145 удалений

Просмотреть файл

@ -232,10 +232,83 @@ NS_IMETHODIMP_(nsrefcnt) _class::Release(void) \
///////////////////////////////////////////////////////////////////////////////
/*
* Some convenience macros for implementing QueryInterface
/**
* There are two ways of implementing QueryInterface, and we use both:
*
* Table-driven QueryInterface uses a static table of IID->offset mappings
* and a shared helper function. Using it tends to reduce codesize and improve
* runtime performance (due to processor cache hits).
*
* Macro-driven QueryInterface generates a QueryInterface function directly
* using common macros. This is necessary if special QueryInterface features
* are being used (such as tearoffs and conditional interfaces).
*
* These methods can be combined into a table-driven function call followed
* by custom code for tearoffs and conditionals.
*/
struct QITableEntry
{
const nsIID *iid; // null indicates end of the QITableEntry array
PROffset32 offset;
};
NS_COM_GLUE nsresult NS_FASTCALL
NS_TableDrivenQI(void* aThis, const QITableEntry* entries,
REFNSIID aIID, void **aInstancePtr);
/**
* Implement table-driven queryinterface
*/
#define NS_INTERFACE_TABLE_HEAD(_class) \
NS_IMETHODIMP _class::QueryInterface(REFNSIID aIID, void** aInstancePtr) \
{ \
NS_ASSERTION(aInstancePtr, \
"QueryInterface requires a non-NULL destination!"); \
nsresult rv = NS_ERROR_FAILURE;;
#define NS_INTERFACE_TABLE_BEGIN \
static const QITableEntry table[] = {
#define NS_INTERFACE_TABLE_ENTRY(_class, _interface) \
{ &_interface::COMTypeInfo<int>::kIID, \
NS_REINTERPRET_CAST(char*, \
NS_STATIC_CAST(_interface*, (_class*) 0x1000)) - \
NS_REINTERPRET_CAST(char*, (_class*) 0x1000) \
},
#define NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, _interface, _implClass) \
{ &_interface::COMTypeInfo<int>::kIID, \
NS_REINTERPRET_CAST(char*, \
NS_STATIC_CAST(_interface*, \
NS_STATIC_CAST(_implClass*, \
(_class*) 0x1000))) - \
NS_REINTERPRET_CAST(char*, (_class*) 0x1000) \
},
#define NS_INTERFACE_TABLE_END \
{ nsnull, 0 } }; \
rv = NS_TableDrivenQI(NS_STATIC_CAST(void*, this), \
table, aIID, aInstancePtr);
#define NS_INTERFACE_TABLE_TAIL \
return rv; \
}
#define NS_INTERFACE_TABLE_TAIL_INHERITING(_baseclass) \
if (NS_SUCCEEDED(rv)) \
return rv; \
return _baseclass::QueryInterface(aIID, aInstancePtr); \
}
#define NS_INTERFACE_TABLE_TAIL_USING_AGGREGATOR(_aggregator) \
if (NS_SUCCEEDED(rv)) \
return rv; \
NS_ASSERTION(_aggregator, "null aggregator"); \
return _aggregator->QueryInterface(aIID, aInstancePtr) \
}
/**
* This implements query interface with two assumptions: First, the
* class in question implements nsISupports and its own interface and
@ -345,134 +418,158 @@ NS_IMETHODIMP _class::QueryInterface(REFNSIID aIID, void** aInstancePtr) \
NS_IMPL_QUERY_TAIL_USING_AGGREGATOR(_aggregator)
#define NS_IMPL_QUERY_INTERFACE0(_class) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(nsISupports) \
NS_INTERFACE_MAP_END
NS_INTERFACE_TABLE_HEAD(_class) \
NS_INTERFACE_TABLE_BEGIN \
NS_INTERFACE_TABLE_ENTRY(_class, nsISupports) \
NS_INTERFACE_TABLE_END \
NS_INTERFACE_TABLE_TAIL
#define NS_IMPL_QUERY_INTERFACE1(_class, _i1) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_INTERFACE_MAP_END
NS_INTERFACE_TABLE_HEAD(_class) \
NS_INTERFACE_TABLE_BEGIN \
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
NS_INTERFACE_TABLE_END \
NS_INTERFACE_TABLE_TAIL
#define NS_IMPL_QUERY_INTERFACE2(_class, _i1, _i2) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_INTERFACE_MAP_END
NS_INTERFACE_TABLE_HEAD(_class) \
NS_INTERFACE_TABLE_BEGIN \
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
NS_INTERFACE_TABLE_END \
NS_INTERFACE_TABLE_TAIL
#define NS_IMPL_QUERY_INTERFACE3(_class, _i1, _i2, _i3) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY(_i3) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_INTERFACE_MAP_END
NS_INTERFACE_TABLE_HEAD(_class) \
NS_INTERFACE_TABLE_BEGIN \
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
NS_INTERFACE_TABLE_ENTRY(_class, _i3) \
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
NS_INTERFACE_TABLE_END \
NS_INTERFACE_TABLE_TAIL
#define NS_IMPL_QUERY_INTERFACE4(_class, _i1, _i2, _i3, _i4) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY(_i3) \
NS_INTERFACE_MAP_ENTRY(_i4) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_INTERFACE_MAP_END
NS_INTERFACE_TABLE_HEAD(_class) \
NS_INTERFACE_TABLE_BEGIN \
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
NS_INTERFACE_TABLE_ENTRY(_class, _i3) \
NS_INTERFACE_TABLE_ENTRY(_class, _i4) \
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
NS_INTERFACE_TABLE_END \
NS_INTERFACE_TABLE_TAIL
#define NS_IMPL_QUERY_INTERFACE5(_class, _i1, _i2, _i3, _i4, _i5) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY(_i3) \
NS_INTERFACE_MAP_ENTRY(_i4) \
NS_INTERFACE_MAP_ENTRY(_i5) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_INTERFACE_MAP_END
NS_INTERFACE_TABLE_HEAD(_class) \
NS_INTERFACE_TABLE_BEGIN \
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
NS_INTERFACE_TABLE_ENTRY(_class, _i3) \
NS_INTERFACE_TABLE_ENTRY(_class, _i4) \
NS_INTERFACE_TABLE_ENTRY(_class, _i5) \
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
NS_INTERFACE_TABLE_END \
NS_INTERFACE_TABLE_TAIL
#define NS_IMPL_QUERY_INTERFACE6(_class, _i1, _i2, _i3, _i4, _i5, _i6) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY(_i3) \
NS_INTERFACE_MAP_ENTRY(_i4) \
NS_INTERFACE_MAP_ENTRY(_i5) \
NS_INTERFACE_MAP_ENTRY(_i6) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_INTERFACE_MAP_END
NS_INTERFACE_TABLE_HEAD(_class) \
NS_INTERFACE_TABLE_BEGIN \
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
NS_INTERFACE_TABLE_ENTRY(_class, _i3) \
NS_INTERFACE_TABLE_ENTRY(_class, _i4) \
NS_INTERFACE_TABLE_ENTRY(_class, _i5) \
NS_INTERFACE_TABLE_ENTRY(_class, _i6) \
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
NS_INTERFACE_TABLE_END \
NS_INTERFACE_TABLE_TAIL
#define NS_IMPL_QUERY_INTERFACE7(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY(_i3) \
NS_INTERFACE_MAP_ENTRY(_i4) \
NS_INTERFACE_MAP_ENTRY(_i5) \
NS_INTERFACE_MAP_ENTRY(_i6) \
NS_INTERFACE_MAP_ENTRY(_i7) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_INTERFACE_MAP_END
NS_INTERFACE_TABLE_HEAD(_class) \
NS_INTERFACE_TABLE_BEGIN \
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
NS_INTERFACE_TABLE_ENTRY(_class, _i3) \
NS_INTERFACE_TABLE_ENTRY(_class, _i4) \
NS_INTERFACE_TABLE_ENTRY(_class, _i5) \
NS_INTERFACE_TABLE_ENTRY(_class, _i6) \
NS_INTERFACE_TABLE_ENTRY(_class, _i7) \
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
NS_INTERFACE_TABLE_END \
NS_INTERFACE_TABLE_TAIL
#define NS_IMPL_QUERY_INTERFACE8(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
_i7, _i8) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY(_i3) \
NS_INTERFACE_MAP_ENTRY(_i4) \
NS_INTERFACE_MAP_ENTRY(_i5) \
NS_INTERFACE_MAP_ENTRY(_i6) \
NS_INTERFACE_MAP_ENTRY(_i7) \
NS_INTERFACE_MAP_ENTRY(_i8) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_INTERFACE_MAP_END
NS_INTERFACE_TABLE_HEAD(_class) \
NS_INTERFACE_TABLE_BEGIN \
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
NS_INTERFACE_TABLE_ENTRY(_class, _i3) \
NS_INTERFACE_TABLE_ENTRY(_class, _i4) \
NS_INTERFACE_TABLE_ENTRY(_class, _i5) \
NS_INTERFACE_TABLE_ENTRY(_class, _i6) \
NS_INTERFACE_TABLE_ENTRY(_class, _i7) \
NS_INTERFACE_TABLE_ENTRY(_class, _i8) \
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
NS_INTERFACE_TABLE_END \
NS_INTERFACE_TABLE_TAIL
#define NS_IMPL_QUERY_INTERFACE9(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
_i7, _i8, _i9) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY(_i3) \
NS_INTERFACE_MAP_ENTRY(_i4) \
NS_INTERFACE_MAP_ENTRY(_i5) \
NS_INTERFACE_MAP_ENTRY(_i6) \
NS_INTERFACE_MAP_ENTRY(_i7) \
NS_INTERFACE_MAP_ENTRY(_i8) \
NS_INTERFACE_MAP_ENTRY(_i9) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_INTERFACE_MAP_END
NS_INTERFACE_TABLE_HEAD(_class) \
NS_INTERFACE_TABLE_BEGIN \
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
NS_INTERFACE_TABLE_ENTRY(_class, _i3) \
NS_INTERFACE_TABLE_ENTRY(_class, _i4) \
NS_INTERFACE_TABLE_ENTRY(_class, _i5) \
NS_INTERFACE_TABLE_ENTRY(_class, _i6) \
NS_INTERFACE_TABLE_ENTRY(_class, _i7) \
NS_INTERFACE_TABLE_ENTRY(_class, _i8) \
NS_INTERFACE_TABLE_ENTRY(_class, _i9) \
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
NS_INTERFACE_TABLE_END \
NS_INTERFACE_TABLE_TAIL
#define NS_IMPL_QUERY_INTERFACE10(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
_i7, _i8, _i9, _i10) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY(_i3) \
NS_INTERFACE_MAP_ENTRY(_i4) \
NS_INTERFACE_MAP_ENTRY(_i5) \
NS_INTERFACE_MAP_ENTRY(_i6) \
NS_INTERFACE_MAP_ENTRY(_i7) \
NS_INTERFACE_MAP_ENTRY(_i8) \
NS_INTERFACE_MAP_ENTRY(_i9) \
NS_INTERFACE_MAP_ENTRY(_i10) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_INTERFACE_MAP_END
NS_INTERFACE_TABLE_HEAD(_class) \
NS_INTERFACE_TABLE_BEGIN \
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
NS_INTERFACE_TABLE_ENTRY(_class, _i3) \
NS_INTERFACE_TABLE_ENTRY(_class, _i4) \
NS_INTERFACE_TABLE_ENTRY(_class, _i5) \
NS_INTERFACE_TABLE_ENTRY(_class, _i6) \
NS_INTERFACE_TABLE_ENTRY(_class, _i7) \
NS_INTERFACE_TABLE_ENTRY(_class, _i8) \
NS_INTERFACE_TABLE_ENTRY(_class, _i9) \
NS_INTERFACE_TABLE_ENTRY(_class, _i10) \
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
NS_INTERFACE_TABLE_END \
NS_INTERFACE_TABLE_TAIL
#define NS_IMPL_QUERY_INTERFACE11(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
_i7, _i8, _i9, _i10, _i11) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY(_i3) \
NS_INTERFACE_MAP_ENTRY(_i4) \
NS_INTERFACE_MAP_ENTRY(_i5) \
NS_INTERFACE_MAP_ENTRY(_i6) \
NS_INTERFACE_MAP_ENTRY(_i7) \
NS_INTERFACE_MAP_ENTRY(_i8) \
NS_INTERFACE_MAP_ENTRY(_i9) \
NS_INTERFACE_MAP_ENTRY(_i10) \
NS_INTERFACE_MAP_ENTRY(_i11) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_INTERFACE_MAP_END
NS_INTERFACE_TABLE_HEAD(_class) \
NS_INTERFACE_TABLE_BEGIN \
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
NS_INTERFACE_TABLE_ENTRY(_class, _i3) \
NS_INTERFACE_TABLE_ENTRY(_class, _i4) \
NS_INTERFACE_TABLE_ENTRY(_class, _i5) \
NS_INTERFACE_TABLE_ENTRY(_class, _i6) \
NS_INTERFACE_TABLE_ENTRY(_class, _i7) \
NS_INTERFACE_TABLE_ENTRY(_class, _i8) \
NS_INTERFACE_TABLE_ENTRY(_class, _i9) \
NS_INTERFACE_TABLE_ENTRY(_class, _i10) \
NS_INTERFACE_TABLE_ENTRY(_class, _i12) \
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
NS_INTERFACE_TABLE_END \
NS_INTERFACE_TABLE_TAIL
#define NS_IMPL_THREADSAFE_QUERY_INTERFACE0 NS_IMPL_QUERY_INTERFACE0
@ -518,67 +615,75 @@ public: \
#define NS_IMPL_ADDREF_INHERITED(Class, Super) \
NS_IMETHODIMP_(nsrefcnt) Class::AddRef(void) \
{ \
nsrefcnt r = Super::AddRef(); \
NS_LOG_ADDREF(this, r, #Class, sizeof(*this)); \
return r; \
return Super::AddRef(); \
} \
#define NS_IMPL_RELEASE_INHERITED(Class, Super) \
NS_IMETHODIMP_(nsrefcnt) Class::Release(void) \
{ \
nsrefcnt r = Super::Release(); \
NS_LOG_RELEASE(this, r, #Class); \
return r; \
return Super::Release(); \
} \
#define NS_IMPL_QUERY_INTERFACE_INHERITED0(Class, Super) \
NS_IMPL_QUERY_HEAD(Class) \
NS_IMPL_QUERY_TAIL_INHERITING(Super) \
NS_INTERFACE_TABLE_HEAD(Class) \
NS_INTERFACE_TABLE_TAIL_INHERITING(Super)
#define NS_IMPL_QUERY_INTERFACE_INHERITED1(Class, Super, i1) \
NS_IMPL_QUERY_HEAD(Class) \
NS_IMPL_QUERY_BODY(i1) \
NS_IMPL_QUERY_TAIL_INHERITING(Super) \
NS_INTERFACE_TABLE_HEAD(Class) \
NS_INTERFACE_TABLE_BEGIN \
NS_INTERFACE_TABLE_ENTRY(Class, i1) \
NS_INTERFACE_TABLE_END \
NS_INTERFACE_TABLE_TAIL_INHERITING(Super)
#define NS_IMPL_QUERY_INTERFACE_INHERITED2(Class, Super, i1, i2) \
NS_IMPL_QUERY_HEAD(Class) \
NS_IMPL_QUERY_BODY(i1) \
NS_IMPL_QUERY_BODY(i2) \
NS_IMPL_QUERY_TAIL_INHERITING(Super) \
NS_INTERFACE_TABLE_HEAD(Class) \
NS_INTERFACE_TABLE_BEGIN \
NS_INTERFACE_TABLE_ENTRY(Class, i1) \
NS_INTERFACE_TABLE_ENTRY(Class, i2) \
NS_INTERFACE_TABLE_END \
NS_INTERFACE_TABLE_TAIL_INHERITING(Super)
#define NS_IMPL_QUERY_INTERFACE_INHERITED3(Class, Super, i1, i2, i3) \
NS_IMPL_QUERY_HEAD(Class) \
NS_IMPL_QUERY_BODY(i1) \
NS_IMPL_QUERY_BODY(i2) \
NS_IMPL_QUERY_BODY(i3) \
NS_IMPL_QUERY_TAIL_INHERITING(Super) \
NS_INTERFACE_TABLE_HEAD(Class) \
NS_INTERFACE_TABLE_BEGIN \
NS_INTERFACE_TABLE_ENTRY(Class, i1) \
NS_INTERFACE_TABLE_ENTRY(Class, i2) \
NS_INTERFACE_TABLE_ENTRY(Class, i3) \
NS_INTERFACE_TABLE_END \
NS_INTERFACE_TABLE_TAIL_INHERITING(Super)
#define NS_IMPL_QUERY_INTERFACE_INHERITED4(Class, Super, i1, i2, i3, i4) \
NS_IMPL_QUERY_HEAD(Class) \
NS_IMPL_QUERY_BODY(i1) \
NS_IMPL_QUERY_BODY(i2) \
NS_IMPL_QUERY_BODY(i3) \
NS_IMPL_QUERY_BODY(i4) \
NS_IMPL_QUERY_TAIL_INHERITING(Super) \
NS_INTERFACE_TABLE_HEAD(Class) \
NS_INTERFACE_TABLE_BEGIN \
NS_INTERFACE_TABLE_ENTRY(Class, i1) \
NS_INTERFACE_TABLE_ENTRY(Class, i2) \
NS_INTERFACE_TABLE_ENTRY(Class, i3) \
NS_INTERFACE_TABLE_ENTRY(Class, i4) \
NS_INTERFACE_TABLE_END \
NS_INTERFACE_TABLE_TAIL_INHERITING(Super)
#define NS_IMPL_QUERY_INTERFACE_INHERITED5(Class,Super,i1,i2,i3,i4,i5) \
NS_IMPL_QUERY_HEAD(Class) \
NS_IMPL_QUERY_BODY(i1) \
NS_IMPL_QUERY_BODY(i2) \
NS_IMPL_QUERY_BODY(i3) \
NS_IMPL_QUERY_BODY(i4) \
NS_IMPL_QUERY_BODY(i5) \
NS_IMPL_QUERY_TAIL_INHERITING(Super) \
NS_INTERFACE_TABLE_HEAD(Class) \
NS_INTERFACE_TABLE_BEGIN \
NS_INTERFACE_TABLE_ENTRY(Class, i1) \
NS_INTERFACE_TABLE_ENTRY(Class, i2) \
NS_INTERFACE_TABLE_ENTRY(Class, i3) \
NS_INTERFACE_TABLE_ENTRY(Class, i4) \
NS_INTERFACE_TABLE_ENTRY(Class, i5) \
NS_INTERFACE_TABLE_END \
NS_INTERFACE_TABLE_TAIL_INHERITING(Super)
#define NS_IMPL_QUERY_INTERFACE_INHERITED6(Class,Super,i1,i2,i3,i4,i5,i6) \
NS_IMPL_QUERY_HEAD(Class) \
NS_IMPL_QUERY_BODY(i1) \
NS_IMPL_QUERY_BODY(i2) \
NS_IMPL_QUERY_BODY(i3) \
NS_IMPL_QUERY_BODY(i4) \
NS_IMPL_QUERY_BODY(i5) \
NS_IMPL_QUERY_BODY(i6) \
NS_IMPL_QUERY_TAIL_INHERITING(Super) \
NS_INTERFACE_TABLE_HEAD(Class) \
NS_INTERFACE_TABLE_BEGIN \
NS_INTERFACE_TABLE_ENTRY(Class, i1) \
NS_INTERFACE_TABLE_ENTRY(Class, i2) \
NS_INTERFACE_TABLE_ENTRY(Class, i3) \
NS_INTERFACE_TABLE_ENTRY(Class, i4) \
NS_INTERFACE_TABLE_ENTRY(Class, i5) \
NS_INTERFACE_TABLE_ENTRY(Class, i6) \
NS_INTERFACE_TABLE_END \
NS_INTERFACE_TABLE_TAIL_INHERITING(Super)
/**
* Convenience macros for implementing all nsISupports methods for
@ -816,6 +921,372 @@ NS_IMETHODIMP_(nsrefcnt) _class::Release(void) \
NS_IMPL_THREADSAFE_QUERY_INTERFACE11(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
_i7, _i8, _i9, _i10, _i11)
///////////////////////////////////////////////////////////////////////////////
// Macros for implementing nsIClassInfo-related stuff.
///////////////////////////////////////////////////////////////////////////////
// include here instead of at the top because it requires the nsISupport decl
#include "nsIClassInfo.h"
#define NS_CLASSINFO_NAME(_class) _class##_classInfoGlobal
#define NS_CI_INTERFACE_GETTER_NAME(_class) _class##_GetInterfacesHelper
#define NS_DECL_CI_INTERFACE_GETTER(_class) \
extern NS_IMETHODIMP NS_CI_INTERFACE_GETTER_NAME(_class)(PRUint32 *, \
nsIID ***);
#define NS_DECL_CLASSINFO(_class) \
NS_DECL_CI_INTERFACE_GETTER(_class) \
nsIClassInfo *NS_CLASSINFO_NAME(_class);
#define NS_IMPL_QUERY_CLASSINFO(_class) \
if ( aIID.Equals(NS_GET_IID(nsIClassInfo)) ) { \
extern nsIClassInfo *NS_CLASSINFO_NAME(_class); \
foundInterface = NS_STATIC_CAST(nsIClassInfo*, NS_CLASSINFO_NAME(_class));\
} else
#define NS_CLASSINFO_HELPER_BEGIN(_class, _c) \
NS_IMETHODIMP \
NS_CI_INTERFACE_GETTER_NAME(_class)(PRUint32 *count, nsIID ***array) \
{ \
*count = _c; \
*array = (nsIID **)nsMemory::Alloc(sizeof (nsIID *) * _c);
#define NS_CLASSINFO_HELPER_ENTRY(_i, _interface) \
(*array)[_i] = (nsIID *)nsMemory::Clone(&NS_GET_IID(_interface), \
sizeof(nsIID));
#define NS_CLASSINFO_HELPER_END \
return NS_OK; \
}
#define NS_IMPL_CI_INTERFACE_GETTER1(_class, _interface) \
NS_CLASSINFO_HELPER_BEGIN(_class, 1) \
NS_CLASSINFO_HELPER_ENTRY(0, _interface) \
NS_CLASSINFO_HELPER_END
#define NS_IMPL_QUERY_INTERFACE1_CI(_class, _i1) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_IMPL_QUERY_CLASSINFO(_class) \
NS_INTERFACE_MAP_END
#define NS_IMPL_ISUPPORTS1_CI(_class, _interface) \
NS_IMPL_ADDREF(_class) \
NS_IMPL_RELEASE(_class) \
NS_IMPL_QUERY_INTERFACE1_CI(_class, _interface) \
NS_IMPL_CI_INTERFACE_GETTER1(_class, _interface)
#define NS_IMPL_CI_INTERFACE_GETTER2(_class, _i1, _i2) \
NS_CLASSINFO_HELPER_BEGIN(_class, 2) \
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
NS_CLASSINFO_HELPER_END
#define NS_IMPL_QUERY_INTERFACE2_CI(_class, _i1, _i2) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_IMPL_QUERY_CLASSINFO(_class) \
NS_INTERFACE_MAP_END
#define NS_IMPL_ISUPPORTS2_CI(_class, _i1, _i2) \
NS_IMPL_ADDREF(_class) \
NS_IMPL_RELEASE(_class) \
NS_IMPL_QUERY_INTERFACE2_CI(_class, _i1, _i2) \
NS_IMPL_CI_INTERFACE_GETTER2(_class, _i1, _i2)
#define NS_IMPL_CI_INTERFACE_GETTER3(_class, _i1, _i2, _i3) \
NS_CLASSINFO_HELPER_BEGIN(_class, 3) \
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
NS_CLASSINFO_HELPER_END
#define NS_IMPL_QUERY_INTERFACE3_CI(_class, _i1, _i2, _i3) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY(_i3) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_IMPL_QUERY_CLASSINFO(_class) \
NS_INTERFACE_MAP_END
#define NS_IMPL_ISUPPORTS3_CI(_class, _i1, _i2, _i3) \
NS_IMPL_ADDREF(_class) \
NS_IMPL_RELEASE(_class) \
NS_IMPL_QUERY_INTERFACE3_CI(_class, _i1, _i2, _i3) \
NS_IMPL_CI_INTERFACE_GETTER3(_class, _i1, _i2, _i3)
#define NS_IMPL_CI_INTERFACE_GETTER4(_class, _i1, _i2, _i3, _i4) \
NS_CLASSINFO_HELPER_BEGIN(_class, 4) \
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
NS_CLASSINFO_HELPER_END
#define NS_IMPL_QUERY_INTERFACE4_CI(_class, _i1, _i2, _i3, _i4) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY(_i3) \
NS_INTERFACE_MAP_ENTRY(_i4) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_IMPL_QUERY_CLASSINFO(_class) \
NS_INTERFACE_MAP_END
#define NS_IMPL_ISUPPORTS4_CI(_class, _i1, _i2, _i3, _i4) \
NS_IMPL_ADDREF(_class) \
NS_IMPL_RELEASE(_class) \
NS_IMPL_QUERY_INTERFACE4_CI(_class, _i1, _i2, _i3, _i4) \
NS_IMPL_CI_INTERFACE_GETTER4(_class, _i1, _i2, _i3, _i4)
#define NS_IMPL_CI_INTERFACE_GETTER5(_class, _i1, _i2, _i3, _i4, _i5) \
NS_CLASSINFO_HELPER_BEGIN(_class, 5) \
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
NS_CLASSINFO_HELPER_END
#define NS_IMPL_QUERY_INTERFACE5_CI(_class, _i1, _i2, _i3, _i4, _i5) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY(_i3) \
NS_INTERFACE_MAP_ENTRY(_i4) \
NS_INTERFACE_MAP_ENTRY(_i5) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_IMPL_QUERY_CLASSINFO(_class) \
NS_INTERFACE_MAP_END
#define NS_IMPL_ISUPPORTS5_CI(_class, _i1, _i2, _i3, _i4, _i5) \
NS_IMPL_ADDREF(_class) \
NS_IMPL_RELEASE(_class) \
NS_IMPL_QUERY_INTERFACE5_CI(_class, _i1, _i2, _i3, _i4, _i5) \
NS_IMPL_CI_INTERFACE_GETTER5(_class, _i1, _i2, _i3, _i4, _i5)
#define NS_IMPL_CI_INTERFACE_GETTER6(_class, _i1, _i2, _i3, _i4, _i5, _i6) \
NS_CLASSINFO_HELPER_BEGIN(_class, 6) \
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
NS_CLASSINFO_HELPER_ENTRY(5, _i6) \
NS_CLASSINFO_HELPER_END
#define NS_IMPL_QUERY_INTERFACE6_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY(_i3) \
NS_INTERFACE_MAP_ENTRY(_i4) \
NS_INTERFACE_MAP_ENTRY(_i5) \
NS_INTERFACE_MAP_ENTRY(_i6) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_IMPL_QUERY_CLASSINFO(_class) \
NS_INTERFACE_MAP_END
#define NS_IMPL_ISUPPORTS6_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6) \
NS_IMPL_ADDREF(_class) \
NS_IMPL_RELEASE(_class) \
NS_IMPL_QUERY_INTERFACE6_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6) \
NS_IMPL_CI_INTERFACE_GETTER6(_class, _i1, _i2, _i3, _i4, _i5, _i6)
#define NS_IMPL_CI_INTERFACE_GETTER7(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
_i7) \
NS_CLASSINFO_HELPER_BEGIN(_class, 7) \
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
NS_CLASSINFO_HELPER_ENTRY(5, _i6) \
NS_CLASSINFO_HELPER_ENTRY(6, _i7) \
NS_CLASSINFO_HELPER_END
#define NS_IMPL_QUERY_INTERFACE7_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
_i7) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY(_i3) \
NS_INTERFACE_MAP_ENTRY(_i4) \
NS_INTERFACE_MAP_ENTRY(_i5) \
NS_INTERFACE_MAP_ENTRY(_i6) \
NS_INTERFACE_MAP_ENTRY(_i7) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_IMPL_QUERY_CLASSINFO(_class) \
NS_INTERFACE_MAP_END
#define NS_IMPL_ISUPPORTS7_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7) \
NS_IMPL_ADDREF(_class) \
NS_IMPL_RELEASE(_class) \
NS_IMPL_QUERY_INTERFACE7_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7) \
NS_IMPL_CI_INTERFACE_GETTER7(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7)
#define NS_IMPL_CI_INTERFACE_GETTER8(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
_i7, _i8) \
NS_CLASSINFO_HELPER_BEGIN(_class, 8) \
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
NS_CLASSINFO_HELPER_ENTRY(5, _i6) \
NS_CLASSINFO_HELPER_ENTRY(6, _i7) \
NS_CLASSINFO_HELPER_ENTRY(7, _i8) \
NS_CLASSINFO_HELPER_END
#define NS_IMPL_QUERY_INTERFACE8_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
_i7, _i8) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY(_i3) \
NS_INTERFACE_MAP_ENTRY(_i4) \
NS_INTERFACE_MAP_ENTRY(_i5) \
NS_INTERFACE_MAP_ENTRY(_i6) \
NS_INTERFACE_MAP_ENTRY(_i7) \
NS_INTERFACE_MAP_ENTRY(_i8) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_IMPL_QUERY_CLASSINFO(_class) \
NS_INTERFACE_MAP_END
#define NS_IMPL_ISUPPORTS8_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, _i8) \
NS_IMPL_ADDREF(_class) \
NS_IMPL_RELEASE(_class) \
NS_IMPL_QUERY_INTERFACE8_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, _i8) \
NS_IMPL_CI_INTERFACE_GETTER8(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, _i8)
#define NS_IMPL_CI_INTERFACE_GETTER9(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
_i7, _i8, _i9) \
NS_CLASSINFO_HELPER_BEGIN(_class, 9) \
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
NS_CLASSINFO_HELPER_ENTRY(5, _i6) \
NS_CLASSINFO_HELPER_ENTRY(6, _i7) \
NS_CLASSINFO_HELPER_ENTRY(7, _i8) \
NS_CLASSINFO_HELPER_ENTRY(8, _i9) \
NS_CLASSINFO_HELPER_END
#define NS_IMPL_QUERY_INTERFACE9_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
_i7, _i8, _i9) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY(_i3) \
NS_INTERFACE_MAP_ENTRY(_i4) \
NS_INTERFACE_MAP_ENTRY(_i5) \
NS_INTERFACE_MAP_ENTRY(_i6) \
NS_INTERFACE_MAP_ENTRY(_i7) \
NS_INTERFACE_MAP_ENTRY(_i8) \
NS_INTERFACE_MAP_ENTRY(_i9) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_IMPL_QUERY_CLASSINFO(_class) \
NS_INTERFACE_MAP_END
#define NS_IMPL_ISUPPORTS9_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
_i8, _i9) \
NS_IMPL_ADDREF(_class) \
NS_IMPL_RELEASE(_class) \
NS_IMPL_QUERY_INTERFACE9_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
_i8, _i9) \
NS_IMPL_CI_INTERFACE_GETTER9(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
_i8, _i9)
#define NS_IMPL_CI_INTERFACE_GETTER10(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
_i7, _i8, _i9, _i10) \
NS_CLASSINFO_HELPER_BEGIN(_class, 10) \
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
NS_CLASSINFO_HELPER_ENTRY(5, _i6) \
NS_CLASSINFO_HELPER_ENTRY(6, _i7) \
NS_CLASSINFO_HELPER_ENTRY(7, _i8) \
NS_CLASSINFO_HELPER_ENTRY(8, _i9) \
NS_CLASSINFO_HELPER_ENTRY(9, _i10) \
NS_CLASSINFO_HELPER_END
#define NS_IMPL_CI_INTERFACE_GETTER11(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
_i7, _i8, _i9, _i10, _i11) \
NS_CLASSINFO_HELPER_BEGIN(_class, 11) \
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
NS_CLASSINFO_HELPER_ENTRY(5, _i6) \
NS_CLASSINFO_HELPER_ENTRY(6, _i7) \
NS_CLASSINFO_HELPER_ENTRY(7, _i8) \
NS_CLASSINFO_HELPER_ENTRY(8, _i9) \
NS_CLASSINFO_HELPER_ENTRY(9, _i10) \
NS_CLASSINFO_HELPER_ENTRY(10, _i11) \
NS_CLASSINFO_HELPER_END
#define NS_IMPL_QUERY_INTERFACE10_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
_i7, _i8, _i9, _i10) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY(_i3) \
NS_INTERFACE_MAP_ENTRY(_i4) \
NS_INTERFACE_MAP_ENTRY(_i5) \
NS_INTERFACE_MAP_ENTRY(_i6) \
NS_INTERFACE_MAP_ENTRY(_i7) \
NS_INTERFACE_MAP_ENTRY(_i8) \
NS_INTERFACE_MAP_ENTRY(_i9) \
NS_INTERFACE_MAP_ENTRY(_i10) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_IMPL_QUERY_CLASSINFO(_class) \
NS_INTERFACE_MAP_END
#define NS_IMPL_QUERY_INTERFACE11_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
_i7, _i8, _i9, _i10, _i11) \
NS_INTERFACE_MAP_BEGIN(_class) \
NS_INTERFACE_MAP_ENTRY(_i1) \
NS_INTERFACE_MAP_ENTRY(_i2) \
NS_INTERFACE_MAP_ENTRY(_i3) \
NS_INTERFACE_MAP_ENTRY(_i4) \
NS_INTERFACE_MAP_ENTRY(_i5) \
NS_INTERFACE_MAP_ENTRY(_i6) \
NS_INTERFACE_MAP_ENTRY(_i7) \
NS_INTERFACE_MAP_ENTRY(_i8) \
NS_INTERFACE_MAP_ENTRY(_i9) \
NS_INTERFACE_MAP_ENTRY(_i10) \
NS_INTERFACE_MAP_ENTRY(_i11) \
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
NS_IMPL_QUERY_CLASSINFO(_class) \
NS_INTERFACE_MAP_END
#define NS_IMPL_ISUPPORTS10_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
_i8, _i9, _i10) \
NS_IMPL_ADDREF(_class) \
NS_IMPL_RELEASE(_class) \
NS_IMPL_QUERY_INTERFACE10_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
_i8, _i9, _i10) \
NS_IMPL_CI_INTERFACE_GETTER10(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
_i8, _i9, _i10)
#define NS_IMPL_ISUPPORTS11_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
_i8, _i9, _i10, _i11) \
NS_IMPL_ADDREF(_class) \
NS_IMPL_RELEASE(_class) \
NS_IMPL_QUERY_INTERFACE11_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
_i8, _i9, _i10, _i11) \
NS_IMPL_CI_INTERFACE_GETTER11(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
_i8, _i9, _i10, _i11)
#define NS_INTERFACE_MAP_END_THREADSAFE NS_IMPL_QUERY_TAIL_GUTS
#endif

Просмотреть файл

@ -51,6 +51,7 @@ XPCOM_GLUE_SRC_LCPPSRCS = \
nsID.cpp \
nsIInterfaceRequestorUtils.cpp \
nsINIParser.cpp \
nsISupportsImpl.cpp \
nsMemory.cpp \
nsWeakReference.cpp \
nsGREGlue.cpp \