diff --git a/content/base/src/nsDOMBlobBuilder.cpp b/content/base/src/nsDOMBlobBuilder.cpp index bfe079f142b..a68113866c1 100644 --- a/content/base/src/nsDOMBlobBuilder.cpp +++ b/content/base/src/nsDOMBlobBuilder.cpp @@ -170,13 +170,12 @@ NS_IMETHODIMP nsDOMMultipartFile::Initialize(nsISupports* aOwner, JSContext* aCx, JSObject* aObj, - uint32_t aArgc, - JS::Value* aArgv) + const JS::CallArgs& aArgs) { if (!mIsFile) { - return InitBlob(aCx, aArgc, aArgv, GetXPConnectNative); + return InitBlob(aCx, aArgs.length(), aArgs.array(), GetXPConnectNative); } - return InitFile(aCx, aArgc, aArgv); + return InitFile(aCx, aArgs.length(), aArgs.array()); } nsresult diff --git a/content/base/src/nsDOMBlobBuilder.h b/content/base/src/nsDOMBlobBuilder.h index e259234e329..d14ac554da5 100644 --- a/content/base/src/nsDOMBlobBuilder.h +++ b/content/base/src/nsDOMBlobBuilder.h @@ -51,8 +51,7 @@ public: NS_IMETHOD Initialize(nsISupports* aOwner, JSContext* aCx, JSObject* aObj, - uint32_t aArgc, - JS::Value* aArgv); + const JS::CallArgs& aArgs); typedef nsIDOMBlob* (*UnwrapFuncPtr)(JSContext*, JSObject*); nsresult InitBlob(JSContext* aCx, diff --git a/content/events/src/nsDOMEvent.cpp b/content/events/src/nsDOMEvent.cpp index ea5fbb9b313..319142f04b2 100644 --- a/content/events/src/nsDOMEvent.cpp +++ b/content/events/src/nsDOMEvent.cpp @@ -314,9 +314,9 @@ nsDOMEvent::SetTrusted(bool aTrusted) NS_IMETHODIMP nsDOMEvent::Initialize(nsISupports* aOwner, JSContext* aCx, JSObject* aObj, - uint32_t aArgc, JS::Value* aArgv) + const JS::CallArgs& aArgs) { - NS_ENSURE_TRUE(aArgc >= 1, NS_ERROR_XPC_NOT_ENOUGH_ARGS); + NS_ENSURE_TRUE(aArgs.length() >= 1, NS_ERROR_XPC_NOT_ENOUGH_ARGS); bool trusted = false; nsCOMPtr w = do_QueryInterface(aOwner); @@ -336,7 +336,7 @@ nsDOMEvent::Initialize(nsISupports* aOwner, JSContext* aCx, JSObject* aObj, } JSAutoRequest ar(aCx); - JSString* jsstr = JS_ValueToString(aCx, aArgv[0]); + JSString* jsstr = JS_ValueToString(aCx, aArgs[0]); if (!jsstr) { return NS_ERROR_DOM_SYNTAX_ERR; } @@ -346,7 +346,7 @@ nsDOMEvent::Initialize(nsISupports* aOwner, JSContext* aCx, JSObject* aObj, nsDependentJSString type; NS_ENSURE_STATE(type.init(aCx, jsstr)); - nsresult rv = InitFromCtor(type, aCx, aArgc >= 2 ? &(aArgv[1]) : nullptr); + nsresult rv = InitFromCtor(type, aCx, aArgs.length() >= 2 ? &(aArgs[1]) : nullptr); NS_ENSURE_SUCCESS(rv, rv); SetTrusted(trusted); diff --git a/content/events/src/nsDOMEvent.h b/content/events/src/nsDOMEvent.h index 21e7462175d..4b4bbe5c14e 100644 --- a/content/events/src/nsDOMEvent.h +++ b/content/events/src/nsDOMEvent.h @@ -95,7 +95,7 @@ public: // nsIJSNativeInitializer NS_IMETHOD Initialize(nsISupports* aOwner, JSContext* aCx, JSObject* aObj, - uint32_t aArgc, JS::Value* aArgv); + const JS::CallArgs& aArgs); virtual nsresult InitFromCtor(const nsAString& aType, JSContext* aCx, JS::Value* aVal); diff --git a/content/xslt/src/xslt/txMozillaXSLTProcessor.cpp b/content/xslt/src/xslt/txMozillaXSLTProcessor.cpp index 975704bf205..f8c2e0d1b8f 100644 --- a/content/xslt/src/xslt/txMozillaXSLTProcessor.cpp +++ b/content/xslt/src/xslt/txMozillaXSLTProcessor.cpp @@ -1247,8 +1247,7 @@ txMozillaXSLTProcessor::ContentRemoved(nsIDocument* aDocument, NS_IMETHODIMP txMozillaXSLTProcessor::Initialize(nsISupports* aOwner, JSContext* cx, - JSObject* obj, uint32_t argc, - JS::Value* argv) + JSObject* obj, const JS::CallArgs& args) { nsCOMPtr prin; nsIScriptSecurityManager* secMan = nsContentUtils::GetSecurityManager(); diff --git a/content/xslt/src/xslt/txMozillaXSLTProcessor.h b/content/xslt/src/xslt/txMozillaXSLTProcessor.h index cae2aa8d497..ec1b9080ff4 100644 --- a/content/xslt/src/xslt/txMozillaXSLTProcessor.h +++ b/content/xslt/src/xslt/txMozillaXSLTProcessor.h @@ -27,7 +27,7 @@ class txIGlobalParameter; /* bacd8ad0-552f-11d3-a9f7-000064657374 */ #define TRANSFORMIIX_XSLT_PROCESSOR_CID \ -{ 0xbacd8ad0, 0x552f, 0x11d3, {0xa9, 0xf7, 0x00, 0x00, 0x64, 0x65, 0x73, 0x74} } +{ 0x618ee71d, 0xd7a7, 0x41a1, {0xa3, 0xfb, 0xc2, 0xbe, 0xdc, 0x6a, 0x21, 0x7e} } #define TRANSFORMIIX_XSLT_PROCESSOR_CONTRACTID \ "@mozilla.org/document-transformer;1?type=xslt" @@ -106,7 +106,7 @@ public: // nsIJSNativeInitializer NS_IMETHODIMP Initialize(nsISupports* aOwner, JSContext *cx, JSObject *obj, - uint32_t argc, JS::Value *argv); + const JS::CallArgs& aArgs); static nsresult Startup(); static void Shutdown(); diff --git a/dom/base/nsDOMClassInfo.cpp b/dom/base/nsDOMClassInfo.cpp index 6bd29c0c5f2..de1190a3b3e 100644 --- a/dom/base/nsDOMClassInfo.cpp +++ b/dom/base/nsDOMClassInfo.cpp @@ -3386,9 +3386,8 @@ FindConstructorFunc(const nsDOMClassInfoData *aDOMClassInfoData) static nsresult BaseStubConstructor(nsIWeakReference* aWeakOwner, const nsGlobalNameStruct *name_struct, JSContext *cx, - JSObject *aObj, unsigned argc, jsval *argv, jsval *rval) + JS::Handle obj, const JS::CallArgs &args) { - JS::Rooted obj(cx, aObj); MOZ_ASSERT(obj); nsresult rv; @@ -3430,16 +3429,16 @@ BaseStubConstructor(nsIWeakReference* aWeakOwner, } if (initializer) { - rv = initializer->Initialize(currentInner, cx, obj, argc, argv); + rv = initializer->Initialize(currentInner, cx, obj, args); if (NS_FAILED(rv)) { return rv; } } else { nsCOMPtr wrappedJS = do_QueryInterface(native); - JS::Rooted object(cx); - wrappedJS->GetJSObject(object.address()); - if (!object) { + JS::Rooted thisObject(cx); + wrappedJS->GetJSObject(thisObject.address()); + if (!thisObject) { return NS_ERROR_UNEXPECTED; } @@ -3447,44 +3446,40 @@ BaseStubConstructor(nsIWeakReference* aWeakOwner, pusher.Push(cx); JSAutoRequest ar(cx); - JSAutoCompartment ac(cx, object); + JSAutoCompartment ac(cx, thisObject); - JS::Rooted thisValue(cx, JS::UndefinedValue()); JS::Rooted funval(cx); - if (!JS_GetProperty(cx, object, "constructor", funval.address()) || !funval.isObject()) { + if (!JS_GetProperty(cx, thisObject, "constructor", funval.address()) || + !funval.isObject()) { return NS_ERROR_UNEXPECTED; } // Check if the object is even callable. NS_ENSURE_STATE(JS_ObjectIsCallable(cx, &funval.toObject())); - thisValue.setObject(*object); - { - JS::Rooted thisObject(cx, &thisValue.toObject()); - // wrap parameters in the target compartment // we also pass in the calling window as the first argument - ++argc; - nsAutoArrayPtr args(new JS::Value[argc]); - JS::AutoArrayRooter rooter(cx, 0, args); + unsigned argc = args.length() + 1; + nsAutoArrayPtr argv(new JS::Value[argc]); + JS::AutoArrayRooter rooter(cx, 0, argv); nsCOMPtr holder; nsCOMPtr currentWin(do_GetInterface(currentInner)); rv = WrapNative(cx, obj, currentWin, &NS_GET_IID(nsIDOMWindow), - true, &args[0], getter_AddRefs(holder)); - if (!JS_WrapValue(cx, &args[0])) + true, &argv[0], getter_AddRefs(holder)); + if (!JS_WrapValue(cx, &argv[0])) return NS_ERROR_FAILURE; rooter.changeLength(1); for (size_t i = 1; i < argc; ++i) { - args[i] = argv[i - 1]; - if (!JS_WrapValue(cx, &args[i])) + argv[i] = args[i - 1]; + if (!JS_WrapValue(cx, &argv[i])) return NS_ERROR_FAILURE; rooter.changeLength(i + 1); } JS::Value frval; - bool ret = JS_CallFunctionValue(cx, thisObject, funval, argc, args, &frval); + bool ret = JS_CallFunctionValue(cx, thisObject, funval, argc, argv, &frval); if (!ret) { return NS_ERROR_FAILURE; @@ -3493,7 +3488,7 @@ BaseStubConstructor(nsIWeakReference* aWeakOwner, } } - return WrapNative(cx, obj, native, true, rval); + return WrapNative(cx, obj, native, true, args.rval().address()); } static nsresult @@ -3746,7 +3741,7 @@ public: nsresult Construct(nsIXPConnectWrappedNative *wrapper, JSContext *cx, JS::Handle obj, const JS::CallArgs &args, - bool *_retval);); + bool *_retval); nsresult HasInstance(nsIXPConnectWrappedNative *wrapper, JSContext *cx, JS::Handle obj, const jsval &val, bool *bp, @@ -3918,8 +3913,7 @@ nsDOMConstructor::Construct(nsIXPConnectWrappedNative *wrapper, JSContext * cx, return NS_ERROR_DOM_NOT_SUPPORTED_ERR; } - return BaseStubConstructor(mWeakOwner, name_struct, cx, obj, args.length(), args.array(), - args.rval().address()); + return BaseStubConstructor(mWeakOwner, name_struct, cx, obj, args); } nsresult @@ -7498,7 +7492,7 @@ nsDOMConstructorSH::Call(nsIXPConnectWrappedNative *wrapper, JSContext *cx, } #endif - return wrapped->Construct(wrapper, cx, obj, argc, argv, vp, _retval); + return wrapped->Construct(wrapper, cx, obj, args, _retval); } NS_IMETHODIMP @@ -7519,7 +7513,7 @@ nsDOMConstructorSH::Construct(nsIXPConnectWrappedNative *wrapper, JSContext *cx, } #endif - return wrapped->Construct(wrapper, cx, obj, argc, argv, vp, _retval); + return wrapped->Construct(wrapper, cx, obj, args, _retval); } NS_IMETHODIMP diff --git a/dom/base/nsIJSNativeInitializer.h b/dom/base/nsIJSNativeInitializer.h index edd3c875a3f..ef25f6f752e 100644 --- a/dom/base/nsIJSNativeInitializer.h +++ b/dom/base/nsIJSNativeInitializer.h @@ -10,8 +10,9 @@ #include "jsapi.h" #define NS_IJSNATIVEINITIALIZER_IID \ -{ 0x536c5ad2, 0x1275, 0x4706, \ - { 0x99, 0xbd, 0x4a, 0xef, 0xb2, 0x4a, 0xb7, 0xf7 } } +{ 0xdb48eee5, 0x89a4, 0x4f18, \ + { 0x86, 0xd0, 0x4c, 0x4e, 0x9d, 0x4b, 0xf8, 0x7e } } + /** * A JavaScript specific interface used to initialize new @@ -29,7 +30,7 @@ public: * constructor and the parameters passed into the JavaScript constructor. */ NS_IMETHOD Initialize(nsISupports* aOwner, JSContext *cx, JSObject *obj, - uint32_t argc, JS::Value *argv) = 0; + const JS::CallArgs& args) = 0; }; NS_DEFINE_STATIC_IID_ACCESSOR(nsIJSNativeInitializer, diff --git a/js/xpconnect/loader/mozJSComponentLoader.cpp b/js/xpconnect/loader/mozJSComponentLoader.cpp index 20c6dffafda..549b5c282a9 100644 --- a/js/xpconnect/loader/mozJSComponentLoader.cpp +++ b/js/xpconnect/loader/mozJSComponentLoader.cpp @@ -236,17 +236,17 @@ Btoa(JSContext *cx, unsigned argc, jsval *vp) } static JSBool -File(JSContext *cx, unsigned argc, jsval *vp) +File(JSContext *cx, unsigned argc, Value *vp) { - nsresult rv; + CallArgs args = CallArgsFromVp(argc, vp); - if (!argc) { + if (args.length() == 0) { XPCThrower::Throw(NS_ERROR_UNEXPECTED, cx); return false; } nsCOMPtr native; - rv = nsDOMMultipartFile::NewFile(getter_AddRefs(native)); + nsresult rv = nsDOMMultipartFile::NewFile(getter_AddRefs(native)); if (NS_FAILED(rv)) { XPCThrower::Throw(rv, cx); return false; @@ -255,7 +255,7 @@ File(JSContext *cx, unsigned argc, jsval *vp) nsCOMPtr initializer = do_QueryInterface(native); NS_ASSERTION(initializer, "what?"); - rv = initializer->Initialize(nullptr, cx, nullptr, argc, JS_ARGV(cx, vp)); + rv = initializer->Initialize(nullptr, cx, nullptr, args); if (NS_FAILED(rv)) { XPCThrower::Throw(rv, cx); return false; @@ -270,26 +270,23 @@ File(JSContext *cx, unsigned argc, jsval *vp) JSObject* glob = JS_GetGlobalForScopeChain(cx); nsCOMPtr holder; - RootedValue retval(cx); rv = xpc->WrapNativeToJSVal(cx, glob, native, nullptr, &NS_GET_IID(nsISupports), - true, retval.address(), nullptr); + true, args.rval().address(), nullptr); if (NS_FAILED(rv)) { XPCThrower::Throw(rv, cx); return false; } - - JS_SET_RVAL(cx, vp, retval); return true; } static JSBool -Blob(JSContext *cx, unsigned argc, jsval *vp) +Blob(JSContext *cx, unsigned argc, Value *vp) { - nsresult rv; + CallArgs args = CallArgsFromVp(argc, vp); nsCOMPtr native; - rv = nsDOMMultipartFile::NewBlob(getter_AddRefs(native)); + nsresult rv = nsDOMMultipartFile::NewBlob(getter_AddRefs(native)); if (NS_FAILED(rv)) { XPCThrower::Throw(rv, cx); return false; @@ -298,7 +295,7 @@ Blob(JSContext *cx, unsigned argc, jsval *vp) nsCOMPtr initializer = do_QueryInterface(native); NS_ASSERTION(initializer, "what?"); - rv = initializer->Initialize(nullptr, cx, nullptr, argc, JS_ARGV(cx, vp)); + rv = initializer->Initialize(nullptr, cx, nullptr, args); if (NS_FAILED(rv)) { XPCThrower::Throw(rv, cx); return false; @@ -313,16 +310,13 @@ Blob(JSContext *cx, unsigned argc, jsval *vp) JSObject* glob = JS_GetGlobalForScopeChain(cx); nsCOMPtr holder; - RootedValue retval(cx); rv = xpc->WrapNativeToJSVal(cx, glob, native, nullptr, &NS_GET_IID(nsISupports), - true, retval.address(), nullptr); + true, args.rval().address(), nullptr); if (NS_FAILED(rv)) { XPCThrower::Throw(rv, cx); return false; } - - JS_SET_RVAL(cx, vp, retval); return true; }