From 85773d688dc1a40027f8fdfb648a87267e19b13d Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Wed, 16 Nov 2011 08:50:20 +0100 Subject: [PATCH] Bug 698382 - Give nsXBLProtoImpl::InitTargetObjects and nsXBLPrototypeBinding::InitClass a JSObject outparam; r=jst --- content/xbl/src/nsXBLBinding.cpp | 14 +++++++------- content/xbl/src/nsXBLBinding.h | 2 +- content/xbl/src/nsXBLProtoImpl.cpp | 15 ++++++++------- content/xbl/src/nsXBLProtoImpl.h | 2 +- content/xbl/src/nsXBLPrototypeBinding.cpp | 2 +- content/xbl/src/nsXBLPrototypeBinding.h | 2 +- 6 files changed, 19 insertions(+), 18 deletions(-) diff --git a/content/xbl/src/nsXBLBinding.cpp b/content/xbl/src/nsXBLBinding.cpp index 283d550a960..56cc1fc9023 100644 --- a/content/xbl/src/nsXBLBinding.cpp +++ b/content/xbl/src/nsXBLBinding.cpp @@ -1208,19 +1208,17 @@ nsresult nsXBLBinding::DoInitJSClass(JSContext *cx, JSObject *global, JSObject *obj, const nsAFlatCString& aClassName, nsXBLPrototypeBinding* aProtoBinding, - void **aClassObject) + JSObject** aClassObject) { // First ensure our JS class is initialized. - jsval val; - JSObject* proto = NULL; - nsCAutoString className(aClassName); JSObject* parent_proto = nsnull; // If we have an "obj" we can set this JSAutoRequest ar(cx); JSAutoEnterCompartment ac; - if (!ac.enter(cx, global)) - return NS_ERROR_FAILURE; + if (!ac.enter(cx, global)) { + return NS_ERROR_FAILURE; + } if (obj) { // Retrieve the current prototype of obj. @@ -1246,6 +1244,8 @@ nsXBLBinding::DoInitJSClass(JSContext *cx, JSObject *global, JSObject *obj, } } + jsval val; + JSObject* proto = NULL; if ((!::JS_LookupPropertyWithFlags(cx, global, className.get(), JSRESOLVE_CLASSNAME, &val)) || @@ -1336,7 +1336,7 @@ nsXBLBinding::DoInitJSClass(JSContext *cx, JSObject *global, JSObject *obj, return NS_ERROR_OUT_OF_MEMORY; } - *aClassObject = (void*)proto; + *aClassObject = proto; } else { proto = JSVAL_TO_OBJECT(val); diff --git a/content/xbl/src/nsXBLBinding.h b/content/xbl/src/nsXBLBinding.h index 4343364ed41..22cfbda6a11 100644 --- a/content/xbl/src/nsXBLBinding.h +++ b/content/xbl/src/nsXBLBinding.h @@ -146,7 +146,7 @@ public: static nsresult DoInitJSClass(JSContext *cx, JSObject *global, JSObject *obj, const nsAFlatCString& aClassName, nsXBLPrototypeBinding* aProtoBinding, - void **aClassObject); + JSObject** aClassObject); bool AllowScripts(); // XXX make const diff --git a/content/xbl/src/nsXBLProtoImpl.cpp b/content/xbl/src/nsXBLProtoImpl.cpp index 6325f24d4fc..c60ac7ed56b 100644 --- a/content/xbl/src/nsXBLProtoImpl.cpp +++ b/content/xbl/src/nsXBLProtoImpl.cpp @@ -95,7 +95,7 @@ nsXBLProtoImpl::InstallImplementation(nsXBLPrototypeBinding* aBinding, nsIConten // This function also has the side effect of building up the prototype implementation if it has // not been built already. nsCOMPtr holder; - void * targetClassObject = nsnull; + JSObject* targetClassObject = nsnull; nsresult rv = InitTargetObjects(aBinding, context, aBoundElement, getter_AddRefs(holder), &targetClassObject); NS_ENSURE_SUCCESS(rv, rv); // kick out if we were unable to properly intialize our target objects @@ -122,7 +122,7 @@ nsXBLProtoImpl::InitTargetObjects(nsXBLPrototypeBinding* aBinding, nsIScriptContext* aContext, nsIContent* aBoundElement, nsIXPConnectJSObjectHolder** aScriptObjectHolder, - void** aTargetClassObject) + JSObject** aTargetClassObject) { nsresult rv = NS_OK; *aScriptObjectHolder = nsnull; @@ -161,8 +161,9 @@ nsXBLProtoImpl::InitTargetObjects(nsXBLPrototypeBinding* aBinding, // object's old base class becomes the new class' base class. rv = aBinding->InitClass(mClassName, jscontext, global, JSVAL_TO_OBJECT(v), aTargetClassObject); - if (NS_FAILED(rv)) + if (NS_FAILED(rv)) { return rv; + } nsContentUtils::PreserveWrapper(aBoundElement, aBoundElement); @@ -189,13 +190,13 @@ nsXBLProtoImpl::CompilePrototypeMembers(nsXBLPrototypeBinding* aBinding) JSObject *global = globalObject->GetGlobalJSObject(); - void* classObject; + JSObject* classObject; nsresult rv = aBinding->InitClass(mClassName, cx, global, global, &classObject); if (NS_FAILED(rv)) return rv; - mClassObject = (JSObject*) classObject; + mClassObject = classObject; if (!mClassObject) return NS_ERROR_FAILURE; @@ -310,12 +311,12 @@ nsXBLProtoImpl::Read(nsIScriptContext* aContext, JSContext *cx = aContext->GetNativeContext(); JSObject *global = aGlobal->GetGlobalJSObject(); - void* classObject; + JSObject* classObject; nsresult rv = aBinding->InitClass(mClassName, cx, global, global, &classObject); NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_TRUE(classObject, NS_ERROR_FAILURE); - mClassObject = (JSObject*) classObject; + mClassObject = classObject; nsXBLProtoImplField* previousField = nsnull; nsXBLProtoImplMember* previousMember = nsnull; diff --git a/content/xbl/src/nsXBLProtoImpl.h b/content/xbl/src/nsXBLProtoImpl.h index 0389979ca9d..7d44be898b6 100644 --- a/content/xbl/src/nsXBLProtoImpl.h +++ b/content/xbl/src/nsXBLProtoImpl.h @@ -73,7 +73,7 @@ public: nsresult InitTargetObjects(nsXBLPrototypeBinding* aBinding, nsIScriptContext* aContext, nsIContent* aBoundElement, nsIXPConnectJSObjectHolder** aScriptObjectHolder, - void** aTargetClassObject); + JSObject** aTargetClassObject); nsresult CompilePrototypeMembers(nsXBLPrototypeBinding* aBinding); void SetMemberList(nsXBLProtoImplMember* aMemberList) diff --git a/content/xbl/src/nsXBLPrototypeBinding.cpp b/content/xbl/src/nsXBLPrototypeBinding.cpp index d045306c39a..57b5a015f4f 100644 --- a/content/xbl/src/nsXBLPrototypeBinding.cpp +++ b/content/xbl/src/nsXBLPrototypeBinding.cpp @@ -868,7 +868,7 @@ nsresult nsXBLPrototypeBinding::InitClass(const nsCString& aClassName, JSContext * aContext, JSObject * aGlobal, JSObject * aScriptObject, - void ** aClassObject) + JSObject** aClassObject) { NS_ENSURE_ARG_POINTER(aClassObject); diff --git a/content/xbl/src/nsXBLPrototypeBinding.h b/content/xbl/src/nsXBLPrototypeBinding.h index 7ec080a3ddd..ec108fbf0cc 100644 --- a/content/xbl/src/nsXBLPrototypeBinding.h +++ b/content/xbl/src/nsXBLPrototypeBinding.h @@ -155,7 +155,7 @@ public: nsresult InitClass(const nsCString& aClassName, JSContext * aContext, JSObject * aGlobal, JSObject * aScriptObject, - void ** aClassObject); + JSObject** aClassObject); nsresult ConstructInterfaceTable(const nsAString& aImpls);