Skip to content

Commit adac396

Browse files
committed
Bug 412320 - Try code-generation for QI impls, r=roc+luser
1 parent f5e761b commit adac396

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+2016
-814
lines changed

config/config.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,7 @@ JAVA_GEN_DIR = _javagen
520520
JAVA_DIST_DIR = $(DEPTH)/$(JAVA_GEN_DIR)
521521
JAVA_IFACES_PKG_NAME = org/mozilla/interfaces
522522

523-
REQ_INCLUDES = $(foreach d,$(REQUIRES),-I$(DIST)/include/$d) -I$(DIST)/include
523+
REQ_INCLUDES = -I$(srcdir) -I. $(foreach d,$(REQUIRES),-I$(DIST)/include/$d) -I$(DIST)/include
524524
ifdef LIBXUL_SDK
525525
REQ_INCLUDES_SDK = $(foreach d,$(REQUIRES),-I$(LIBXUL_SDK)/include/$d) -I$(LIBXUL_SDK)/include
526526
endif

config/rules.mk

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@ ifdef EXTRA_DSO_LIBS
117117
EXTRA_DSO_LIBS := $(call EXPAND_MOZLIBNAME,$(EXTRA_DSO_LIBS))
118118
endif
119119

120+
ifdef GQI_SRCS
121+
CPPSRCS += $(GQI_SRCS:.gqi=QI.cpp)
122+
endif
123+
120124
#
121125
# Library rules
122126
#
@@ -1188,6 +1192,9 @@ endif # COMPILER_DEPEND
11881192

11891193
endif # MOZ_AUTO_DEPS
11901194

1195+
%QI.cpp: %.gqi $(topsrcdir)/xpcom/base/gqi.py
1196+
$(PYTHON) $(topsrcdir)/xpcom/base/gqi.py $(INCLUDES) -I $(IDL_DIR) -o $@ -D $(MDDEPDIR)/$(@F).pp $<
1197+
11911198
# Rules for building native targets must come first because of the host_ prefix
11921199
host_%.$(OBJ_SUFFIX): %.c Makefile Makefile.in
11931200
$(REPORT_BUILD)

content/base/src/Makefile.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,8 @@ CPPSRCS = \
165165
nsXMLNameSpaceMap.cpp \
166166
$(NULL)
167167

168+
GQI_SRCS = contentbase.gqi
169+
168170
# we don't want the shared lib, but we want to force the creation of a
169171
# static lib.
170172
FORCE_STATIC_LIB = 1

content/base/src/contentbase.gqi

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
%import-idl "nsIDOM3Node.idl"
2+
%import-idl "nsIDOMNSElement.idl"
3+
%import-idl "nsIDOMEventTarget.idl"
4+
%import-idl "nsIDOM3EventTarget.idl"
5+
%import-idl "nsIDOMNSEventTarget.idl"
6+
%import-idl "nsIWeakReference.idl"
7+
%import-idl "nsIDOMDocument.idl"
8+
%import-idl "nsIDOM3Document.idl"
9+
%import-idl "nsIDOMNSDocument.idl"
10+
%import-idl "nsIDOMDocumentEvent.idl"
11+
%import-idl "nsIDOM3DocumentEvent.idl"
12+
%import-idl "nsIDOMDocumentStyle.idl"
13+
%import-idl "nsIDOMNSDocumentStyle.idl"
14+
%import-idl "nsIDOMDocumentView.idl"
15+
%import-idl "nsIDOMDocumentRange.idl"
16+
%import-idl "nsIDOMDocumentTraversal.idl"
17+
%import-idl "nsIDOMDocumentXBL.idl"
18+
%import-idl "nsIDOMXPathEvaluator.idl"
19+
20+
%pseudo-iid nsIContent fba9aa39-016e-4d5d-ab62-22a1b84a3c7b
21+
%pseudo-iid nsINode cf677826-d7f1-4ec5-bf3a-d41811ac5846
22+
%pseudo-iid nsPIDOMEventTarget 44a6597b-9fc3-4a8d-b7a4-d9009abf9d15
23+
%pseudo-iid nsIDocument 626d86d2-615f-4a12-94d8-e3db3a298372
24+
%pseudo-iid nsIScriptObjectPrincipal 3eedba38-8d22-41e1-817a-0e43e165b664
25+
%pseudo-iid nsIMutationObserver 32e68316-67d4-44a5-8d35-0d390fa9df11
26+
%pseudo-iid nsIXPathEvaluatorInternal b4b72daa-65d6-440f-b608-e2ee9a82f313
27+
%pseudo-iid nsIRadioGroupContainer 06de7839-d0db-47d3-8290-3cb8622ed966
28+
29+
%{C++
30+
#include "nsGenericElement.h"
31+
#include "nsDocument.h"
32+
#include "nsIXPathEvaluatorInternal.h"
33+
#include "nsDOMCID.h"
34+
#include "nsComponentManagerUtils.h"
35+
%}
36+
37+
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsGenericElement)
38+
NS_INTERFACE_MAP_ENTRY(nsIContent)
39+
NS_INTERFACE_MAP_ENTRY(nsINode)
40+
NS_INTERFACE_MAP_ENTRY(nsPIDOMEventTarget)
41+
NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOM3Node, new nsNode3Tearoff(this))
42+
NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOMNSElement, new nsNSElementTearoff(this))
43+
NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOMEventTarget,
44+
nsDOMEventRTTearoff::Create(this))
45+
NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOM3EventTarget,
46+
nsDOMEventRTTearoff::Create(this))
47+
NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOMNSEventTarget,
48+
nsDOMEventRTTearoff::Create(this))
49+
NS_INTERFACE_MAP_ENTRY_TEAROFF(nsISupportsWeakReference,
50+
new nsNodeSupportsWeakRefTearoff(this))
51+
// nsNodeSH::PreCreate() depends on the identity pointer being the
52+
// same as nsINode (which nsIContent inherits), so if you change the
53+
// below line, make sure nsNodeSH::PreCreate() still does the right
54+
// thing!
55+
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIContent)
56+
NS_INTERFACE_MAP_END
57+
58+
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDocument)
59+
NS_INTERFACE_MAP_ENTRY(nsINode)
60+
NS_INTERFACE_MAP_ENTRY(nsIDocument)
61+
NS_INTERFACE_MAP_ENTRY(nsIDOMDocument)
62+
NS_INTERFACE_MAP_ENTRY(nsIDOMNSDocument)
63+
NS_INTERFACE_MAP_ENTRY(nsIDOMDocumentEvent)
64+
NS_INTERFACE_MAP_ENTRY(nsIDOM3DocumentEvent)
65+
NS_INTERFACE_MAP_ENTRY(nsIDOMDocumentStyle)
66+
NS_INTERFACE_MAP_ENTRY(nsIDOMNSDocumentStyle)
67+
NS_INTERFACE_MAP_ENTRY(nsIDOMDocumentView)
68+
NS_INTERFACE_MAP_ENTRY(nsIDOMDocumentRange)
69+
NS_INTERFACE_MAP_ENTRY(nsIDOMDocumentTraversal)
70+
NS_INTERFACE_MAP_ENTRY(nsIDOMDocumentXBL)
71+
NS_INTERFACE_MAP_ENTRY(nsIScriptObjectPrincipal)
72+
NS_INTERFACE_MAP_ENTRY(nsIDOMEventTarget)
73+
NS_INTERFACE_MAP_ENTRY(nsIDOM3EventTarget)
74+
NS_INTERFACE_MAP_ENTRY(nsIDOMNSEventTarget)
75+
NS_INTERFACE_MAP_ENTRY(nsIDOMNode)
76+
NS_INTERFACE_MAP_ENTRY(nsPIDOMEventTarget)
77+
NS_INTERFACE_MAP_ENTRY(nsIDOM3Node)
78+
NS_INTERFACE_MAP_ENTRY(nsIDOM3Document)
79+
NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
80+
NS_INTERFACE_MAP_ENTRY(nsIRadioGroupContainer)
81+
NS_INTERFACE_MAP_ENTRY(nsIMutationObserver)
82+
// nsNodeSH::PreCreate() depends on the identity pointer being the
83+
// same as nsINode (which nsIDocument inherits), so if you change
84+
// the below line, make sure nsNodeSH::PreCreate() still does the
85+
// right thing!
86+
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDocument)
87+
88+
NS_INTERFACE_MAP_ENTRY_LITERAL(nsIDOMXPathEvaluator, nsIXPathEvaluatorInternal)
89+
if (!mXPathEvaluatorTearoff) {
90+
nsresult rv;
91+
mXPathEvaluatorTearoff =
92+
do_CreateInstance(NS_XPATH_EVALUATOR_CONTRACTID,
93+
static_cast<nsIDocument *>(this), &rv);
94+
NS_ENSURE_SUCCESS(rv, rv);
95+
}
96+
97+
return mXPathEvaluatorTearoff->QueryInterface(aIID, aResult);
98+
END
99+
NS_INTERFACE_MAP_END

content/base/src/nsDocument.cpp

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -883,54 +883,6 @@ nsDocument::~nsDocument()
883883

884884
NS_IMPL_CYCLE_COLLECTION_CLASS(nsDocument)
885885

886-
NS_INTERFACE_TABLE_HEAD(nsDocument)
887-
NS_INTERFACE_TABLE_BEGIN
888-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsINode)
889-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDocument)
890-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOMDocument)
891-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOMNSDocument)
892-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOMDocumentEvent)
893-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOM3DocumentEvent)
894-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOMDocumentStyle)
895-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOMNSDocumentStyle)
896-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOMDocumentView)
897-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOMDocumentRange)
898-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOMDocumentTraversal)
899-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOMDocumentXBL)
900-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIScriptObjectPrincipal)
901-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOMEventTarget)
902-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOM3EventTarget)
903-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOMNSEventTarget)
904-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOMNode)
905-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsPIDOMEventTarget)
906-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOM3Node)
907-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOM3Document)
908-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsISupportsWeakReference)
909-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIRadioGroupContainer)
910-
NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIMutationObserver)
911-
// nsNodeSH::PreCreate() depends on the identity pointer being the
912-
// same as nsINode (which nsIDocument inherits), so if you change
913-
// the below line, make sure nsNodeSH::PreCreate() still does the
914-
// right thing!
915-
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(nsDocument, nsISupports, nsIDocument)
916-
NS_INTERFACE_TABLE_END
917-
NS_INTERFACE_TABLE_TO_MAP_SEGUE_CYCLE_COLLECTION(nsDocument)
918-
if (aIID.Equals(NS_GET_IID(nsIDOMXPathEvaluator)) ||
919-
aIID.Equals(NS_GET_IID(nsIXPathEvaluatorInternal))) {
920-
if (!mXPathEvaluatorTearoff) {
921-
nsresult rv;
922-
mXPathEvaluatorTearoff =
923-
do_CreateInstance(NS_XPATH_EVALUATOR_CONTRACTID,
924-
static_cast<nsIDocument *>(this), &rv);
925-
NS_ENSURE_SUCCESS(rv, rv);
926-
}
927-
928-
return mXPathEvaluatorTearoff->QueryInterface(aIID, aInstancePtr);
929-
}
930-
else
931-
NS_INTERFACE_MAP_END
932-
933-
934886
NS_IMPL_CYCLE_COLLECTING_ADDREF_AMBIGUOUS(nsDocument, nsIDocument)
935887
NS_IMPL_CYCLE_COLLECTING_RELEASE_AMBIGUOUS_WITH_DESTROY(nsDocument,
936888
nsIDocument,

content/base/src/nsDocument.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -798,7 +798,7 @@ class nsDocument : public nsIDocument,
798798
// Our update nesting level
799799
PRUint32 mUpdateNestLevel;
800800

801-
private:
801+
protected:
802802
friend class nsUnblockOnloadEvent;
803803

804804
void PostUnblockOnloadEvent();

content/base/src/nsGenericElement.cpp

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3449,28 +3449,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsGenericElement)
34493449
}
34503450
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
34513451

3452-
3453-
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsGenericElement)
3454-
NS_INTERFACE_MAP_ENTRY(nsIContent)
3455-
NS_INTERFACE_MAP_ENTRY(nsINode)
3456-
NS_INTERFACE_MAP_ENTRY(nsPIDOMEventTarget)
3457-
NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOM3Node, new nsNode3Tearoff(this))
3458-
NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOMNSElement, new nsNSElementTearoff(this))
3459-
NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOMEventTarget,
3460-
nsDOMEventRTTearoff::Create(this))
3461-
NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOM3EventTarget,
3462-
nsDOMEventRTTearoff::Create(this))
3463-
NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOMNSEventTarget,
3464-
nsDOMEventRTTearoff::Create(this))
3465-
NS_INTERFACE_MAP_ENTRY_TEAROFF(nsISupportsWeakReference,
3466-
new nsNodeSupportsWeakRefTearoff(this))
3467-
// nsNodeSH::PreCreate() depends on the identity pointer being the
3468-
// same as nsINode (which nsIContent inherits), so if you change the
3469-
// below line, make sure nsNodeSH::PreCreate() still does the right
3470-
// thing!
3471-
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIContent)
3472-
NS_INTERFACE_MAP_END
3473-
34743452
NS_IMPL_CYCLE_COLLECTING_ADDREF_AMBIGUOUS(nsGenericElement, nsIContent)
34753453
NS_IMPL_CYCLE_COLLECTING_RELEASE_AMBIGUOUS_WITH_DESTROY(nsGenericElement,
34763454
nsIContent,

content/html/content/public/nsIFrameSetElement.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
#define nsIFramesetElement_h___
4141

4242
#include "nsISupports.h"
43+
#include "nsCoord.h"
4344

4445
// IID for the nsIFramesetElement interface
4546
#define NS_IFRAMESETELEMENT_IID \

content/html/content/src/Makefile.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ CPPSRCS = \
133133
nsTextRectangle.cpp \
134134
$(NULL)
135135

136+
GQI_SRCS = htmlcontent.gqi
137+
136138
# we don't want the shared lib, but we want to force the creation of a static lib.
137139
FORCE_STATIC_LIB = 1
138140

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
%import "htmlgenericelement.gqi"
2+
3+
%import-idl "nsIDOMHTMLAnchorElement.idl"
4+
%import-idl "nsIDOMNSHTMLAnchorElement2.idl"
5+
%import-idl "nsIDOMHTMLDivElement.idl"
6+
%import-idl "nsIDOMHTMLFrameElement.idl"
7+
%import-idl "nsIDOMHTMLFrameSetElement.idl"
8+
%import-idl "nsIDOMHTMLIFrameElement.idl"
9+
10+
%{C++
11+
#include "nsHTMLAnchorElement.h"
12+
#include "nsHTMLDivElement.h"
13+
#include "nsHTMLSpanElement.h"
14+
#include "nsHTMLFrameElement.h"
15+
#include "nsHTMLFrameSetElement.h"
16+
#include "nsHTMLIFrameElement.h"
17+
%}
18+
19+
%pseudo-iid nsILink 0c212bc4-fcd7-479d-8c3f-3be8e6787450
20+
%pseudo-iid nsIFrameSetElement eefe0fe5-44ac-4d7f-a751-f4aa5f22b0bf
21+
22+
NS_INTERFACE_MAP_BEGIN(nsHTMLAnchorElement, nsGenericHTMLElement)
23+
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLAnchorElement)
24+
NS_INTERFACE_MAP_ENTRY(nsIDOMNSHTMLAnchorElement)
25+
NS_INTERFACE_MAP_ENTRY(nsIDOMNSHTMLAnchorElement2)
26+
NS_INTERFACE_MAP_ENTRY(nsILink)
27+
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(HTMLAnchorElement)
28+
NS_INTERFACE_MAP_END
29+
30+
NS_INTERFACE_MAP_BEGIN(nsHTMLDivElement, nsGenericHTMLElement)
31+
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLDivElement)
32+
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(HTMLDivElement)
33+
NS_INTERFACE_MAP_END
34+
35+
NS_INTERFACE_MAP_BEGIN(nsHTMLSpanElement, nsGenericHTMLElement)
36+
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(HTMLSpanElement)
37+
NS_INTERFACE_MAP_END
38+
39+
NS_INTERFACE_MAP_BEGIN(nsHTMLFrameElement, nsGenericHTMLFrameElement)
40+
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLFrameElement)
41+
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(HTMLFrameElement)
42+
NS_INTERFACE_MAP_END
43+
44+
NS_INTERFACE_MAP_BEGIN(nsHTMLFrameSetElement, nsGenericHTMLElement)
45+
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLFrameSetElement)
46+
NS_INTERFACE_MAP_ENTRY(nsIFrameSetElement)
47+
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(HTMLFrameSetElement)
48+
NS_INTERFACE_MAP_END
49+
50+
NS_INTERFACE_MAP_BEGIN(nsHTMLIFrameElement, nsGenericHTMLFrameElement)
51+
NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLIFrameElement)
52+
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(HTMLIFrameElement)
53+
NS_INTERFACE_MAP_END
54+
55+

0 commit comments

Comments
 (0)