mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Fix for bug 560462 (Use fast unwrapping for more quickstubs) - use fast unwrapping for nsIDOMNode_GetNodeType, nsIDOMNodeList_GetLength, nsIDOMElement, nsIDOMNSElement_, nsIDOMNSHTMLElement, nsIDOMDocument, nsIDOMNSDocument, nsIDOM3Document, nsIDOMHTMLDocument and nsIDOMNSHTMLDocument_. r=jst.
This commit is contained in:
parent
75ccb33e1a
commit
f9b24fc187
@ -192,6 +192,8 @@ static NS_DEFINE_CID(kDOMEventGroupCID, NS_DOMEVENTGROUP_CID);
|
||||
|
||||
// FOR CSP (autogenerated by xpidl)
|
||||
#include "nsIContentSecurityPolicy.h"
|
||||
#include "nsHTMLStyleSheet.h"
|
||||
#include "nsHTMLCSSStyleSheet.h"
|
||||
|
||||
#include "mozilla/dom/Link.h"
|
||||
using namespace mozilla::dom;
|
||||
|
@ -95,13 +95,7 @@
|
||||
#include "nsGkAtoms.h"
|
||||
#include "nsIApplicationCache.h"
|
||||
#include "nsIApplicationCacheContainer.h"
|
||||
|
||||
// Put these here so all document impls get them automatically
|
||||
#include "nsHTMLStyleSheet.h"
|
||||
#include "nsHTMLCSSStyleSheet.h"
|
||||
|
||||
#include "nsStyleSet.h"
|
||||
#include "nsXMLEventsManager.h"
|
||||
#include "pldhash.h"
|
||||
#include "nsAttrAndChildArray.h"
|
||||
#include "nsDOMAttributeMap.h"
|
||||
@ -135,6 +129,9 @@ struct nsRadioGroupStruct;
|
||||
class nsOnloadBlocker;
|
||||
class nsUnblockOnloadEvent;
|
||||
class nsChildContentList;
|
||||
class nsXMLEventsManager;
|
||||
class nsHTMLStyleSheet;
|
||||
class nsHTMLCSSStyleSheet;
|
||||
|
||||
/**
|
||||
* Right now our identifier map entries contain information for 'name'
|
||||
|
@ -74,16 +74,20 @@ enum nsDOMClassInfoID {
|
||||
* to that interface from the *canonical* nsISupports!
|
||||
*/
|
||||
#define DOMCI_CASTABLE_INTERFACES(_extra) \
|
||||
DOMCI_CASTABLE_INTERFACE(nsINode, 0, _extra) \
|
||||
DOMCI_CASTABLE_INTERFACE(nsIContent, 1, _extra) \
|
||||
DOMCI_CASTABLE_INTERFACE(nsIDocument, 2, _extra) \
|
||||
DOMCI_CASTABLE_INTERFACE(nsINodeList, 3, _extra) \
|
||||
DOMCI_CASTABLE_INTERFACE(nsICSSDeclaration, 4, _extra) \
|
||||
DOMCI_CASTABLE_INTERFACE(nsGenericTextNode, 5, _extra)
|
||||
DOMCI_CASTABLE_INTERFACE(nsINode, nsINode, 0, _extra) \
|
||||
DOMCI_CASTABLE_INTERFACE(nsIContent, nsIContent, 1, _extra) \
|
||||
DOMCI_CASTABLE_INTERFACE(nsIDocument, nsIDocument, 2, _extra) \
|
||||
DOMCI_CASTABLE_INTERFACE(nsINodeList, nsINodeList, 3, _extra) \
|
||||
DOMCI_CASTABLE_INTERFACE(nsICSSDeclaration, nsICSSDeclaration, 4, _extra) \
|
||||
DOMCI_CASTABLE_INTERFACE(nsGenericTextNode, nsGenericTextNode, 5, _extra) \
|
||||
DOMCI_CASTABLE_INTERFACE(nsDocument, nsIDocument, 6, _extra) \
|
||||
DOMCI_CASTABLE_INTERFACE(nsGenericHTMLElement, nsGenericHTMLElement, 7, \
|
||||
_extra) \
|
||||
DOMCI_CASTABLE_INTERFACE(nsHTMLDocument, nsIDocument, 8, _extra)
|
||||
|
||||
// Make sure all classes mentioned in DOMCI_CASTABLE_INTERFACES
|
||||
// have been declared.
|
||||
#define DOMCI_CASTABLE_INTERFACE(_interface, _u1, _u2) class _interface;
|
||||
#define DOMCI_CASTABLE_INTERFACE(_interface, _u1, _u2, _u3) class _interface;
|
||||
DOMCI_CASTABLE_INTERFACES(unused)
|
||||
#undef DOMCI_CASTABLE_INTERFACE
|
||||
|
||||
@ -135,7 +139,7 @@ template <typename Interface> struct DOMCI_CastableTo {
|
||||
/**
|
||||
* Here we calculate the bitmap for a given class.
|
||||
*/
|
||||
#define DOMCI_CASTABLE_INTERFACE(_interface, _bit, _class) \
|
||||
#define DOMCI_CASTABLE_INTERFACE(_interface, _base, _bit, _class) \
|
||||
(DOMCI_CASTABLE_TO(_interface, _class) ? 1 << _bit : 0) +
|
||||
|
||||
#define DOMCI_DATA(_dom_class, _class) \
|
||||
|
@ -121,6 +121,9 @@ LOCAL_INCLUDES = \
|
||||
-I$(topsrcdir)/js/src/nanojit \
|
||||
-I$(topsrcdir)/caps/include \
|
||||
-I$(topsrcdir)/content/base/src \
|
||||
-I$(topsrcdir)/content/html/content/src \
|
||||
-I$(topsrcdir)/content/html/document/src \
|
||||
-I$(topsrcdir)/layout/style \
|
||||
$(NULL)
|
||||
|
||||
EXTRA_DSO_LDOPTS += \
|
||||
|
@ -141,8 +141,7 @@ members = [
|
||||
'nsIDOMNode.removeChild',
|
||||
'nsIDOMNode.hasAttributes',
|
||||
'nsIDOMNode.attributes',
|
||||
'nsIDOMNodeList.item',
|
||||
'nsIDOMNodeList.length',
|
||||
'nsIDOMNodeList.*',
|
||||
'nsIDOMNodeSelector.querySelector',
|
||||
'nsIDOMNodeSelector.querySelectorAll',
|
||||
'nsIDOMText.splitText',
|
||||
@ -150,9 +149,7 @@ members = [
|
||||
'nsIDOM3Document.adoptNode',
|
||||
'nsIDOM3Document.renameNode',
|
||||
'nsIDOM3Node.*',
|
||||
'nsIDOMDOMStringList.item',
|
||||
'nsIDOMDOMStringList.length',
|
||||
'nsIDOMDOMStringList.contains',
|
||||
'nsIDOMDOMStringList.*',
|
||||
'nsIDOMDOMTokenList.*',
|
||||
'nsIDOMDOMSettableTokenList.*',
|
||||
'nsIDOMNameList.getName',
|
||||
@ -183,20 +180,17 @@ members = [
|
||||
'nsIDOMNSElement.mozMatchesSelector',
|
||||
|
||||
# dom/interfaces/css
|
||||
'nsIDOMElementCSSInlineStyle.style',
|
||||
'nsIDOMElementCSSInlineStyle.*',
|
||||
'nsIDOMCSS2Properties.*',
|
||||
'nsIDOMNSCSS2Properties.*',
|
||||
'nsIDOMRect.top',
|
||||
'nsIDOMRect.right',
|
||||
'nsIDOMRect.left',
|
||||
'nsIDOMRect.bottom',
|
||||
'nsIDOMRect.*',
|
||||
'nsIDOMViewCSS.getComputedStyle',
|
||||
|
||||
# dom/interfaces/events
|
||||
'nsIDOMEventTarget.dispatchEvent',
|
||||
'nsIDOMEventTarget.removeEventListener',
|
||||
'nsIDOMNSEventTarget.addEventListener',
|
||||
'nsIDOMDocumentEvent.createEvent',
|
||||
'nsIDOMDocumentEvent.*',
|
||||
|
||||
'nsIDOMEvent.*',
|
||||
'nsIDOMMouseEvent.*',
|
||||
@ -501,8 +495,11 @@ customIncludes = [
|
||||
'nsIDocument.h',
|
||||
'nsINodeList.h',
|
||||
'nsCSSPropertiesQS.h',
|
||||
'nsDocument.h',
|
||||
'nsGenericDOMDataNode.h',
|
||||
'nsGenericElement.h',
|
||||
'nsGenericHTMLElement.h',
|
||||
'nsHTMLDocument.h',
|
||||
'nsDOMQS.h',
|
||||
]
|
||||
|
||||
@ -626,17 +623,43 @@ customMethodCalls = {
|
||||
' if(NS_FAILED(rv))\n'
|
||||
' result = nsnull;'
|
||||
},
|
||||
'nsIDOMNode_GetNodeType': {
|
||||
'thisType': 'nsINode',
|
||||
'canFail': False
|
||||
},
|
||||
'nsIDOMNodeList_Item': {
|
||||
'thisType': 'nsINodeList',
|
||||
'code': ' nsINode *result = self->GetNodeAt(arg0);',
|
||||
'canFail': False
|
||||
},
|
||||
'nsIDOMNodeList_GetLength': {
|
||||
'thisType': 'nsINodeList'
|
||||
},
|
||||
'nsIDOMHTMLDocument_': {
|
||||
'thisType': 'nsHTMLDocument'
|
||||
},
|
||||
'nsIDOMHTMLDocument_Write': {
|
||||
'thisType': 'nsHTMLDocument',
|
||||
'code': nsIDOMHTMLDocument_Write_customMethodCallCode % 'Write'
|
||||
},
|
||||
'nsIDOMHTMLDocument_Writeln': {
|
||||
'thisType': 'nsHTMLDocument',
|
||||
'code': nsIDOMHTMLDocument_Write_customMethodCallCode % 'Writeln'
|
||||
},
|
||||
'nsIDOMHTMLDocument_GetBody': {
|
||||
'thisType': 'nsHTMLDocument',
|
||||
'code': ' nsIContent *result = self->GetBody();',
|
||||
'canFail': False
|
||||
},
|
||||
'nsIDOMHTMLDocument_GetElementsByName': {
|
||||
'thisType': 'nsHTMLDocument',
|
||||
'code': ' nsRefPtr<nsContentList> result = '
|
||||
'self->GetElementsByName(arg0);',
|
||||
'canFail': False
|
||||
},
|
||||
'nsIDOMNSHTMLDocument_': {
|
||||
'thisType': 'nsHTMLDocument'
|
||||
},
|
||||
'nsIDOMStorage_Clear': {
|
||||
'code': nsIDOMStorage_Clear_customMethodCallCode
|
||||
},
|
||||
@ -646,13 +669,7 @@ customMethodCalls = {
|
||||
'nsIDOMCanvasRenderingContext2D_FillStyle': { 'skipgen': True },
|
||||
'nsIDOMCSS2Properties_': CSS2Properties_,
|
||||
'nsIDOMNSCSS2Properties_': CSS2Properties_,
|
||||
'nsIDOMNSElement_GetClientRects': {
|
||||
'thisType': 'nsGenericElement'
|
||||
},
|
||||
'nsIDOMNSElement_GetBoundingClientRect': {
|
||||
'thisType': 'nsGenericElement'
|
||||
},
|
||||
'nsIDOMNSElement_GetElementsByClassName': {
|
||||
'nsIDOMNSElement_': {
|
||||
'thisType': 'nsGenericElement'
|
||||
},
|
||||
'nsIDOMNSElement_GetScrollWidth': {
|
||||
@ -693,6 +710,9 @@ customMethodCalls = {
|
||||
'code': ' PRBool result = self->MozMatchesSelector(arg0);',
|
||||
'canFail': False
|
||||
},
|
||||
'nsIDOM3Text_': {
|
||||
'thisType': 'nsGenericTextNode'
|
||||
},
|
||||
'nsIDOM3Text_IsElementContentWhitespace': {
|
||||
'thisType': 'nsGenericTextNode',
|
||||
'code': ' PRBool result = self->IsElementContentWhitespace();',
|
||||
@ -703,9 +723,6 @@ customMethodCalls = {
|
||||
'code': ' nsIContent* result = '
|
||||
'self->ReplaceWholeText(PromiseFlatString(arg0), &rv);'
|
||||
},
|
||||
'nsIDOM3Text_WholeText': {
|
||||
'thisType': 'nsGenericTextNode'
|
||||
},
|
||||
'nsIDOMNodeSelector_QuerySelector': {
|
||||
'thisType': 'nsINode',
|
||||
'code': ' nsIContent* result = '
|
||||
@ -717,6 +734,9 @@ customMethodCalls = {
|
||||
' rv = nsGenericElement::doQuerySelectorAll(self, '
|
||||
'arg0, getter_AddRefs(result));'
|
||||
},
|
||||
'nsIDOM3Node_': {
|
||||
'thisType': 'nsINode'
|
||||
},
|
||||
'nsIDOM3Node_GetBaseURI': {
|
||||
'thisType': 'nsINode',
|
||||
'canFail': False
|
||||
@ -729,9 +749,6 @@ customMethodCalls = {
|
||||
'thisType': 'nsINode',
|
||||
'canFail': False
|
||||
},
|
||||
'nsIDOM3Node_SetTextContent': {
|
||||
'thisType': 'nsINode'
|
||||
},
|
||||
'nsIDOM3Node_IsSameNode': {
|
||||
'thisType': 'nsINode',
|
||||
'arg0Type': 'nsINode',
|
||||
@ -757,16 +774,41 @@ customMethodCalls = {
|
||||
'code': ' PRBool result = self->IsEqualNode(arg0);',
|
||||
'canFail': False
|
||||
},
|
||||
'nsIDOM3Node_GetFeature': {
|
||||
'thisType': 'nsINode'
|
||||
},
|
||||
'nsIDOM3Node_GetUserData': {
|
||||
'thisType': 'nsINode',
|
||||
'code': ' nsIVariant *result = self->GetUserData(arg0);',
|
||||
'canFail': False
|
||||
},
|
||||
'nsIDOM3Node_SetUserData': {
|
||||
'thisType': 'nsINode'
|
||||
'nsIDOMNSHTMLElement_': {
|
||||
'thisType': 'nsGenericHTMLElement'
|
||||
},
|
||||
'nsIDOMDocument_': {
|
||||
'thisType': 'nsDocument'
|
||||
},
|
||||
'nsIDOMDocument_GetElementById': {
|
||||
'thisType': 'nsDocument',
|
||||
'code': ' mozilla::dom::Element *result = self->GetElementById(arg0, &rv);'
|
||||
},
|
||||
'nsIDOMDocument_GetElementsByTagName': {
|
||||
'thisType': 'nsDocument',
|
||||
'code': ' nsRefPtr<nsContentList> result ='
|
||||
'self->GetElementsByTagName(arg0);',
|
||||
'canFail': False
|
||||
},
|
||||
'nsIDOMDocument_GetElementsByTagNameNS': {
|
||||
'thisType': 'nsDocument',
|
||||
'code': ' nsRefPtr<nsContentList> result ='
|
||||
'self->GetElementsByTagNameNS(arg0, arg1);',
|
||||
'canFail': False
|
||||
},
|
||||
'nsIDOMNSDocument_': {
|
||||
'thisType': 'nsDocument'
|
||||
},
|
||||
'nsIDOM3Document_': {
|
||||
'thisType': 'nsDocument'
|
||||
},
|
||||
'nsIDOMElement_': {
|
||||
'thisType': 'nsGenericElement'
|
||||
},
|
||||
# WebGL
|
||||
'nsICanvasRenderingContextWebGL_BufferData': CUSTOM_QS,
|
||||
|
@ -39,7 +39,7 @@
|
||||
|
||||
#include "nsDOMClassInfoID.h"
|
||||
|
||||
#define DEFINE_UNWRAP_CAST(_interface, _bit) \
|
||||
#define DEFINE_UNWRAP_CAST(_interface, _base, _bit) \
|
||||
NS_SPECIALIZE_TEMPLATE \
|
||||
inline JSBool \
|
||||
xpc_qsUnwrapThis<_interface>(JSContext *cx, \
|
||||
@ -56,7 +56,7 @@ xpc_qsUnwrapThis<_interface>(JSContext *cx, \
|
||||
&rv); \
|
||||
if(!native) \
|
||||
return xpc_qsThrow(cx, rv); \
|
||||
*ppThis = static_cast<_interface*>(native); \
|
||||
*ppThis = static_cast<_interface*>(static_cast<_base*>(native)); \
|
||||
return JS_TRUE; \
|
||||
} \
|
||||
\
|
||||
@ -72,12 +72,12 @@ xpc_qsUnwrapArg<_interface>(JSContext *cx, \
|
||||
nsISupports *native = castNativeArgFromWrapper(cx, v, _bit, ppArgRef, vp, \
|
||||
&rv); \
|
||||
if(NS_SUCCEEDED(rv)) \
|
||||
*ppArg = static_cast<_interface*>(native); \
|
||||
*ppArg = static_cast<_interface*>(static_cast<_base*>(native)); \
|
||||
return rv; \
|
||||
}
|
||||
|
||||
#define DOMCI_CASTABLE_INTERFACE(_interface, _bit, _extra) \
|
||||
DEFINE_UNWRAP_CAST(_interface, _bit)
|
||||
#define DOMCI_CASTABLE_INTERFACE(_interface, _base, _bit, _extra) \
|
||||
DEFINE_UNWRAP_CAST(_interface, _base, _bit)
|
||||
|
||||
DOMCI_CASTABLE_INTERFACES(unused)
|
||||
|
||||
@ -139,4 +139,10 @@ xpc_qsUnwrapArg<nsGenericElement>(JSContext *cx,
|
||||
return rv;
|
||||
}
|
||||
|
||||
inline nsISupports*
|
||||
ToSupports(nsContentList *p)
|
||||
{
|
||||
return static_cast<nsINodeList*>(p);
|
||||
}
|
||||
|
||||
#endif /* nsDOMQS_h__ */
|
||||
|
@ -389,6 +389,7 @@ class nsStyleSet
|
||||
|
||||
};
|
||||
|
||||
#ifdef _IMPL_NS_LAYOUT
|
||||
inline
|
||||
void nsRuleNode::AddRef()
|
||||
{
|
||||
@ -405,3 +406,5 @@ void nsRuleNode::Release()
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user