From 530542eecd1277d4e3164fd9b5513cd8aac6037a Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Sun, 27 Apr 2014 19:58:52 -0700 Subject: [PATCH] Bug 952650 (part 12) - Remove JSVAL_TO_OBJECT. r=till. --HG-- extra : rebase_source : 60dcaa2b778d3cf6eb7dc1a4949aab010ed8c130 --- content/base/src/nsDocument.cpp | 2 +- content/base/src/nsXMLHttpRequest.cpp | 2 +- content/canvas/src/CanvasUtils.h | 2 +- .../templates/src/nsXULTemplateBuilder.cpp | 2 +- dom/base/MessagePort.cpp | 2 +- dom/base/nsDOMWindowUtils.cpp | 4 +- dom/indexedDB/IDBObjectStore.cpp | 4 +- dom/indexedDB/IndexedDatabaseManager.cpp | 2 +- dom/indexedDB/KeyPath.cpp | 6 +-- dom/plugins/base/nsJSNPRuntime.cpp | 8 ++-- dom/workers/ChromeWorkerScope.cpp | 2 +- ipc/nfc/Nfc.cpp | 2 +- ipc/ril/Ril.cpp | 2 +- js/jsd/jsd_obj.cpp | 2 +- js/jsd/jsd_step.cpp | 2 +- js/jsd/jsd_val.cpp | 24 +++++----- js/public/CallArgs.h | 2 +- js/public/Value.h | 8 ---- js/src/ctypes/CTypes.cpp | 46 +++++++++---------- .../jsapi-tests/testAddPropertyPropcache.cpp | 2 +- js/src/jsapi-tests/testArgumentsObject.cpp | 2 +- js/src/jsapi-tests/testBindCallable.cpp | 4 +- js/src/jsapi-tests/testConservativeGC.cpp | 6 +-- js/src/jsapi-tests/testDeepFreeze.cpp | 6 +-- .../testDefineGetterSetterNonEnumerable.cpp | 2 +- js/src/jsapi-tests/testDefineProperty.cpp | 2 +- js/src/jsapi-tests/testFunctionProperties.cpp | 2 +- js/src/jsapi-tests/testLookup.cpp | 2 +- js/src/jsapi-tests/testMappedArrayBuffer.cpp | 4 +- js/src/jsapi-tests/testNewObject.cpp | 2 +- js/src/jsapi-tests/testParseJSON.cpp | 8 ++-- js/src/jsapi-tests/testRegExp.cpp | 12 ++--- .../testRegExpInstanceProperties.cpp | 4 +- js/src/jsexn.cpp | 2 +- js/src/jsopcode.cpp | 2 +- js/src/perf/jsperf.cpp | 2 +- js/src/shell/js.cpp | 6 +-- .../tests/js1_5/Regress/regress-457065-03.js | 2 +- .../tests/js1_8/regress/regress-457065-01.js | 2 +- .../tests/js1_8/regress/regress-457065-02.js | 2 +- .../js1_8_1/regress/regress-452498-123.js | 2 +- js/xpconnect/src/XPCComponents.cpp | 2 +- js/xpconnect/src/XPCConvert.cpp | 2 +- js/xpconnect/src/XPCJSID.cpp | 2 +- js/xpconnect/src/XPCQuickStubs.h | 2 +- js/xpconnect/src/XPCVariant.cpp | 2 +- js/xpconnect/src/XPCWrappedJSClass.cpp | 2 +- js/xpconnect/src/XPCWrappedNativeJSOps.cpp | 4 +- js/xpconnect/src/nsXPConnect.cpp | 2 +- js/xpconnect/src/qsgen.py | 4 +- toolkit/components/ctypes/ctypes.cpp | 2 +- toolkit/components/places/History.cpp | 4 +- 52 files changed, 110 insertions(+), 120 deletions(-) diff --git a/content/base/src/nsDocument.cpp b/content/base/src/nsDocument.cpp index 55de916ba988..cece6ef2baaf 100644 --- a/content/base/src/nsDocument.cpp +++ b/content/base/src/nsDocument.cpp @@ -12155,7 +12155,7 @@ nsIDocument::WrapObject(JSContext *aCx) NS_NAMED_LITERAL_STRING(doc_str, "document"); - if (!JS_DefineUCProperty(aCx, JSVAL_TO_OBJECT(winVal), doc_str.get(), + if (!JS_DefineUCProperty(aCx, winVal.toObjectOrNull(), doc_str.get(), doc_str.Length(), JS::ObjectValue(*obj), JS_PropertyStub, JS_StrictPropertyStub, JSPROP_READONLY | JSPROP_ENUMERATE)) { diff --git a/content/base/src/nsXMLHttpRequest.cpp b/content/base/src/nsXMLHttpRequest.cpp index 138687646f94..9c5d49db1574 100644 --- a/content/base/src/nsXMLHttpRequest.cpp +++ b/content/base/src/nsXMLHttpRequest.cpp @@ -2451,7 +2451,7 @@ GetRequestBody(nsIVariant* aBody, nsIInputStream** aResult, uint64_t* aContentLe nsresult rv = aBody->GetAsJSVal(&realVal); if (NS_SUCCEEDED(rv) && !JSVAL_IS_PRIMITIVE(realVal)) { - JS::Rooted obj(cx, JSVAL_TO_OBJECT(realVal)); + JS::Rooted obj(cx, realVal.toObjectOrNull()); if (JS_IsArrayBufferObject(obj)) { ArrayBuffer buf(obj); return GetRequestBody(buf.Data(), buf.Length(), aResult, diff --git a/content/canvas/src/CanvasUtils.h b/content/canvas/src/CanvasUtils.h index b42f28ed4b4e..9f57469a13f7 100644 --- a/content/canvas/src/CanvasUtils.h +++ b/content/canvas/src/CanvasUtils.h @@ -107,7 +107,7 @@ JSValToDashArray(JSContext* cx, const JS::Value& patternArray, static const uint32_t MAX_NUM_DASHES = 1 << 14; if (!JSVAL_IS_PRIMITIVE(patternArray)) { - JS::Rooted obj(cx, JSVAL_TO_OBJECT(patternArray)); + JS::Rooted obj(cx, patternArray.toObjectOrNull()); uint32_t length; if (!JS_GetArrayLength(cx, obj, &length)) { // Not an array-like thing diff --git a/content/xul/templates/src/nsXULTemplateBuilder.cpp b/content/xul/templates/src/nsXULTemplateBuilder.cpp index aa2564f2cfac..5e6455fad6b8 100644 --- a/content/xul/templates/src/nsXULTemplateBuilder.cpp +++ b/content/xul/templates/src/nsXULTemplateBuilder.cpp @@ -1392,7 +1392,7 @@ nsXULTemplateBuilder::InitHTMLTemplateRoot() rv = nsContentUtils::WrapNative(jscontext, mRoot, mRoot, &v); NS_ENSURE_SUCCESS(rv, rv); - JS::Rooted jselement(jscontext, JSVAL_TO_OBJECT(v)); + JS::Rooted jselement(jscontext, v.toObjectOrNull()); if (mDB) { // database diff --git a/dom/base/MessagePort.cpp b/dom/base/MessagePort.cpp index 00d27eac273a..888be338c241 100644 --- a/dom/base/MessagePort.cpp +++ b/dom/base/MessagePort.cpp @@ -109,7 +109,7 @@ PostMessageReadStructuredClone(JSContext* cx, if (JS_ReadBytes(reader, &supports, sizeof(supports))) { JS::Rooted val(cx); if (NS_SUCCEEDED(nsContentUtils::WrapNative(cx, supports, &val))) { - return JSVAL_TO_OBJECT(val); + return val.toObjectOrNull(); } } } diff --git a/dom/base/nsDOMWindowUtils.cpp b/dom/base/nsDOMWindowUtils.cpp index c8819d6c0496..25b784e44cec 100644 --- a/dom/base/nsDOMWindowUtils.cpp +++ b/dom/base/nsDOMWindowUtils.cpp @@ -2390,7 +2390,7 @@ nsDOMWindowUtils::GetClassName(JS::Handle aObject, JSContext* aCx, return NS_ERROR_XPC_BAD_CONVERT_JS; } - *aName = NS_strdup(JS_GetClass(JSVAL_TO_OBJECT(aObject))->name); + *aName = NS_strdup(JS_GetClass(aObject.toObjectOrNull())->name); NS_ABORT_IF_FALSE(*aName, "NS_strdup should be infallible."); return NS_OK; } @@ -3213,7 +3213,7 @@ nsDOMWindowUtils::GetFileId(JS::Handle aFile, JSContext* aCx, } if (!JSVAL_IS_PRIMITIVE(aFile)) { - JSObject* obj = JSVAL_TO_OBJECT(aFile); + JSObject* obj = aFile.toObjectOrNull(); file::FileHandle* fileHandle; if (NS_SUCCEEDED(UNWRAP_OBJECT(FileHandle, obj, fileHandle))) { diff --git a/dom/indexedDB/IDBObjectStore.cpp b/dom/indexedDB/IDBObjectStore.cpp index 3f936b9d9d71..ad5376902391 100644 --- a/dom/indexedDB/IDBObjectStore.cpp +++ b/dom/indexedDB/IDBObjectStore.cpp @@ -837,7 +837,7 @@ public: return nullptr; } - return JSVAL_TO_OBJECT(wrappedBlob); + return wrappedBlob.toObjectOrNull(); } nsCOMPtr domFile; @@ -862,7 +862,7 @@ public: return nullptr; } - return JSVAL_TO_OBJECT(wrappedFile); + return wrappedFile.toObjectOrNull(); } }; diff --git a/dom/indexedDB/IndexedDatabaseManager.cpp b/dom/indexedDB/IndexedDatabaseManager.cpp index 466d0ffb3df1..5940e242edb5 100644 --- a/dom/indexedDB/IndexedDatabaseManager.cpp +++ b/dom/indexedDB/IndexedDatabaseManager.cpp @@ -655,7 +655,7 @@ IndexedDatabaseManager::InitWindowless(JS::Handle aGlobal, JSContext* { NS_ENSURE_TRUE(nsContentUtils::IsCallerChrome(), NS_ERROR_NOT_AVAILABLE); - JS::Rooted global(aCx, JSVAL_TO_OBJECT(aGlobal)); + JS::Rooted global(aCx, aGlobal.toObjectOrNull()); if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) { NS_WARNING("Passed object is not a global object!"); return NS_ERROR_FAILURE; diff --git a/dom/indexedDB/KeyPath.cpp b/dom/indexedDB/KeyPath.cpp index 3ceb5f8160b6..268cac5d1b40 100644 --- a/dom/indexedDB/KeyPath.cpp +++ b/dom/indexedDB/KeyPath.cpp @@ -96,7 +96,7 @@ GetJSValFromKeyPathString(JSContext* aCx, nsString targetObjectPropName; JS::Rooted targetObject(aCx, nullptr); JS::Rooted obj(aCx, - JSVAL_IS_PRIMITIVE(aValue) ? nullptr : JSVAL_TO_OBJECT(aValue)); + JSVAL_IS_PRIMITIVE(aValue) ? nullptr : aValue.toObjectOrNull()); while (tokenizer.hasMoreTokens()) { const nsDependentSubstring& token = tokenizer.nextToken(); @@ -132,7 +132,7 @@ GetJSValFromKeyPathString(JSContext* aCx, if (JSVAL_IS_PRIMITIVE(intermediate)) { return NS_ERROR_DOM_INDEXEDDB_DATA_ERR; } - obj = JSVAL_TO_OBJECT(intermediate); + obj = intermediate.toObjectOrNull(); } else { // ...otherwise use it as key @@ -272,7 +272,7 @@ KeyPath::Parse(JSContext* aCx, const JS::Value& aValue_, KeyPath* aKeyPath) // See if this is a JS array. if (JS_IsArrayObject(aCx, aValue)) { - JS::Rooted obj(aCx, JSVAL_TO_OBJECT(aValue)); + JS::Rooted obj(aCx, aValue.toObjectOrNull()); uint32_t length; if (!JS_GetArrayLength(aCx, obj, &length)) { diff --git a/dom/plugins/base/nsJSNPRuntime.cpp b/dom/plugins/base/nsJSNPRuntime.cpp index 0add503826ae..c452a76e3bb9 100644 --- a/dom/plugins/base/nsJSNPRuntime.cpp +++ b/dom/plugins/base/nsJSNPRuntime.cpp @@ -435,7 +435,7 @@ JSValToNPVariant(NPP npp, JSContext *cx, JS::Value val, NPVariant *variant) JS::Rooted obj(cx, val.toObjectOrNull()); obj = js::CheckedUnwrap(obj); if (!obj) { - obj = JSVAL_TO_OBJECT(val); + obj = val.toObjectOrNull(); } NPObject *npobj = nsJSObjWrapper::GetNewOrUsed(npp, cx, obj); @@ -594,7 +594,7 @@ nsJSObjWrapper::NP_HasMethod(NPObject *npobj, NPIdentifier id) bool ok = GetProperty(cx, npjsobj->mJSObj, id, &v); return ok && !JSVAL_IS_PRIMITIVE(v) && - ::JS_ObjectIsFunction(cx, JSVAL_TO_OBJECT(v)); + ::JS_ObjectIsFunction(cx, v.toObjectOrNull()); } static bool @@ -1352,7 +1352,7 @@ CallNPMethodInternal(JSContext *cx, JS::Handle obj, unsigned argc, NPVariant v; VOID_TO_NPVARIANT(v); - JSObject *funobj = JSVAL_TO_OBJECT(argv[-2]); + JSObject *funobj = argv[-2].toObjectOrNull(); bool ok; const char *msg = "Error calling method on NPObject!"; @@ -1594,7 +1594,7 @@ NPObjWrapper_Convert(JSContext *cx, JS::Handle obj, JSType hint, JS:: JS::Rooted v(cx, JSVAL_VOID); if (!JS_GetProperty(cx, obj, "toString", &v)) return false; - if (!JSVAL_IS_PRIMITIVE(v) && JS_ObjectIsCallable(cx, JSVAL_TO_OBJECT(v))) { + if (!JSVAL_IS_PRIMITIVE(v) && JS_ObjectIsCallable(cx, v.toObjectOrNull())) { if (!JS_CallFunctionValue(cx, obj, v, JS::HandleValueArray::empty(), vp)) return false; if (JSVAL_IS_PRIMITIVE(vp)) diff --git a/dom/workers/ChromeWorkerScope.cpp b/dom/workers/ChromeWorkerScope.cpp index d7bd53527cf2..242aba872434 100644 --- a/dom/workers/ChromeWorkerScope.cpp +++ b/dom/workers/ChromeWorkerScope.cpp @@ -63,7 +63,7 @@ DefineChromeWorkerFunctions(JSContext* aCx, JS::Handle aGlobal) UnicodeToNative }; - JS_SetCTypesCallbacks(JSVAL_TO_OBJECT(ctypes), &callbacks); + JS_SetCTypesCallbacks(ctypes.toObjectOrNull(), &callbacks); } #endif // BUILD_CTYPES diff --git a/ipc/nfc/Nfc.cpp b/ipc/nfc/Nfc.cpp index 5eb34ccb9f57..d00f6d19dbf6 100644 --- a/ipc/nfc/Nfc.cpp +++ b/ipc/nfc/Nfc.cpp @@ -99,7 +99,7 @@ PostToNFC(JSContext* aCx, data = abs.ptr(); size = abs.length(); } else if (!JSVAL_IS_PRIMITIVE(v)) { - JSObject* obj = JSVAL_TO_OBJECT(v); + JSObject* obj = v.toObjectOrNull(); if (!JS_IsTypedArrayObject(obj)) { JS_ReportError(aCx, "Object passed in wasn't a typed array"); return false; diff --git a/ipc/ril/Ril.cpp b/ipc/ril/Ril.cpp index 2076a145fd6c..a9a4d0ec19ea 100644 --- a/ipc/ril/Ril.cpp +++ b/ipc/ril/Ril.cpp @@ -104,7 +104,7 @@ PostToRIL(JSContext *aCx, data = abs.ptr(); size = abs.length(); } else if (!JSVAL_IS_PRIMITIVE(v)) { - JSObject *obj = JSVAL_TO_OBJECT(v); + JSObject *obj = v.toObjectOrNull(); if (!JS_IsTypedArrayObject(obj)) { JS_ReportError(aCx, "Object passed in wasn't a typed array"); return false; diff --git a/js/jsd/jsd_obj.cpp b/js/jsd/jsd_obj.cpp index 27c9c6a9f36a..4de336720c10 100644 --- a/js/jsd/jsd_obj.cpp +++ b/js/jsd/jsd_obj.cpp @@ -222,7 +222,7 @@ jsd_GetJSDObjectForJSObject(JSDContext* jsdc, JSObject* jsobj) JSDObject* jsd_GetObjectForValue(JSDContext* jsdc, JSDValue* jsdval) { - return jsd_GetJSDObjectForJSObject(jsdc, JSVAL_TO_OBJECT(jsdval->val)); + return jsd_GetJSDObjectForJSObject(jsdc, jsdval->val.toObjectOrNull()); } JSDValue* diff --git a/js/jsd/jsd_step.cpp b/js/jsd/jsd_step.cpp index 827e4a3a1829..a6fa6b230db9 100644 --- a/js/jsd/jsd_step.cpp +++ b/js/jsd/jsd_step.cpp @@ -99,7 +99,7 @@ _callHook(JSDContext *jsdc, JSContext *cx, JSAbstractFramePtr frame, bool isCons JS::RootedValue newObj(cx); if (!frame.getThisValue(cx, &newObj)) return false; - jsd_Constructing(jsdc, cx, JSVAL_TO_OBJECT(newObj), frame); + jsd_Constructing(jsdc, cx, newObj.toObjectOrNull(), frame); } jsscript = frame.script(); diff --git a/js/jsd/jsd_val.cpp b/js/jsd/jsd_val.cpp index cc0c52a2d844..e429e9f140de 100644 --- a/js/jsd/jsd_val.cpp +++ b/js/jsd/jsd_val.cpp @@ -116,7 +116,7 @@ jsd_IsValueFunction(JSDContext* jsdc, JSDValue* jsdval) { AutoSafeJSContext cx; // NB: Actually unused. return !JSVAL_IS_PRIMITIVE(jsdval->val) && - JS_ObjectIsCallable(cx, JSVAL_TO_OBJECT(jsdval->val)); + JS_ObjectIsCallable(cx, jsdval->val.toObjectOrNull()); } bool @@ -127,7 +127,7 @@ jsd_IsValueNative(JSDContext* jsdc, JSDValue* jsdval) if(jsd_IsValueFunction(jsdc, jsdval)) { - JSAutoCompartment ac(cx, JSVAL_TO_OBJECT(jsdval->val)); + JSAutoCompartment ac(cx, jsdval->val.toObjectOrNull()); AutoSaveExceptionState as(cx); bool ok = false; fun = JSD_GetValueFunction(jsdc, jsdval); @@ -185,7 +185,7 @@ jsd_GetValueString(JSDContext* jsdc, JSDValue* jsdval) } /* Objects call JS_ValueToString in their own compartment. */ - scopeObj = !JSVAL_IS_PRIMITIVE(jsdval->val) ? JSVAL_TO_OBJECT(jsdval->val) : jsdc->glob; + scopeObj = !JSVAL_IS_PRIMITIVE(jsdval->val) ? jsdval->val.toObjectOrNull() : jsdc->glob; { JSAutoCompartment ac(cx, scopeObj); AutoSaveExceptionState as(cx); @@ -216,7 +216,7 @@ jsd_GetValueFunctionId(JSDContext* jsdc, JSDValue* jsdval) if(!jsdval->funName && jsd_IsValueFunction(jsdc, jsdval)) { - JSAutoCompartment ac(cx, JSVAL_TO_OBJECT(jsdval->val)); + JSAutoCompartment ac(cx, jsdval->val.toObjectOrNull()); AutoSaveExceptionState as(cx); fun = JSD_GetValueFunction(jsdc, jsdval); if(!fun) @@ -367,7 +367,7 @@ static bool _buildProps(JSDContext* jsdc, JSDValue* jsdval) if(JSVAL_IS_PRIMITIVE(jsdval->val)) return false; - obj = JSVAL_TO_OBJECT(jsdval->val); + obj = jsdval->val.toObjectOrNull(); JSAutoCompartment ac(cx, obj); @@ -505,7 +505,7 @@ jsd_GetValueProperty(JSDContext* jsdc, JSDValue* jsdval, JSString* nameStr) if(!JS_ValueToId(cx, nameval, &nameid)) return nullptr; - if(!(obj = JSVAL_TO_OBJECT(jsdval->val))) + if(!(obj = jsdval->val.toObjectOrNull())) return nullptr; JS::Rooted desc(cx); @@ -570,7 +570,7 @@ jsd_GetValueFunction(JSDContext* jsdc, JSDValue* jsdval) if (JSVAL_IS_PRIMITIVE(jsdval->val)) return nullptr; - obj = js::UncheckedUnwrap(JSVAL_TO_OBJECT(jsdval->val)); + obj = js::UncheckedUnwrap(jsdval->val.toObjectOrNull()); JSAutoCompartment ac(cx, obj); JS::RootedValue funval(cx, JS::ObjectValue(*obj)); fun = JS_ValueToFunction(cx, funval); @@ -590,7 +590,7 @@ jsd_GetValuePrototype(JSDContext* jsdc, JSDValue* jsdval) SET_BIT_FLAG(jsdval->flags, GOT_PROTO); if(JSVAL_IS_PRIMITIVE(jsdval->val)) return nullptr; - obj = JSVAL_TO_OBJECT(jsdval->val); + obj = jsdval->val.toObjectOrNull(); if(!JS_GetPrototype(cx, obj, &proto)) return nullptr; if(!proto) @@ -614,7 +614,7 @@ jsd_GetValueParent(JSDContext* jsdc, JSDValue* jsdval) SET_BIT_FLAG(jsdval->flags, GOT_PARENT); if(JSVAL_IS_PRIMITIVE(jsdval->val)) return nullptr; - obj = JSVAL_TO_OBJECT(jsdval->val); + obj = jsdval->val.toObjectOrNull(); { JSAutoCompartment ac(cx, obj); parent = JS_GetParentOrScopeChain(cx, obj); @@ -641,7 +641,7 @@ jsd_GetValueConstructor(JSDContext* jsdc, JSDValue* jsdval) SET_BIT_FLAG(jsdval->flags, GOT_CTOR); if(JSVAL_IS_PRIMITIVE(jsdval->val)) return nullptr; - obj = JSVAL_TO_OBJECT(jsdval->val); + obj = jsdval->val.toObjectOrNull(); if(!JS_GetPrototype(cx, obj, &proto)) return nullptr; if(!proto) @@ -665,7 +665,7 @@ jsd_GetValueClassName(JSDContext* jsdc, JSDValue* jsdval) jsval val = jsdval->val; if(!jsdval->className && !JSVAL_IS_PRIMITIVE(val)) { - JS::RootedObject obj(jsdc->jsrt, JSVAL_TO_OBJECT(val)); + JS::RootedObject obj(jsdc->jsrt, val.toObjectOrNull()); AutoSafeJSContext cx; JSAutoCompartment ac(cx, obj); jsdval->className = JS_GetDebugClassName(obj); @@ -685,7 +685,7 @@ jsd_GetScriptForValue(JSDContext* jsdc, JSDValue* jsdval) return nullptr; { - JSAutoCompartment ac(cx, JSVAL_TO_OBJECT(val)); + JSAutoCompartment ac(cx, val.toObjectOrNull()); AutoSaveExceptionState as(cx); JS::RootedFunction fun(cx, JSD_GetValueFunction(jsdc, jsdval)); if (fun) diff --git a/js/public/CallArgs.h b/js/public/CallArgs.h index 5229b9374797..d650da7de7e2 100644 --- a/js/public/CallArgs.h +++ b/js/public/CallArgs.h @@ -388,7 +388,7 @@ CallArgsFromSp(unsigned argc, Value *sp) * take a const JS::CallArgs&. */ -#define JS_THIS_OBJECT(cx,vp) (JSVAL_TO_OBJECT(JS_THIS(cx,vp))) +#define JS_THIS_OBJECT(cx,vp) (JS_THIS(cx,vp).toObjectOrNull()) /* * Note: if this method returns null, an error has occurred and must be diff --git a/js/public/Value.h b/js/public/Value.h index 76bf4a362287..4cce24a10d38 100644 --- a/js/public/Value.h +++ b/js/public/Value.h @@ -916,7 +916,6 @@ CanonicalizeNaN(double d) * provide similar functionality. But there are a few key differences. One * is that JS::Value gives null a separate type. Thus * - * JSVAL_IS_OBJECT(v) === v.isObjectOrNull() * !JSVAL_IS_PRIMITIVE(v) === v.isObject() * * Also, to help prevent mistakenly boxing a nullable JSObject* as an object, @@ -1864,13 +1863,6 @@ STRING_TO_JSVAL(JSString *str) return IMPL_TO_JSVAL(STRING_TO_JSVAL_IMPL(str)); } -static inline JSObject * -JSVAL_TO_OBJECT(jsval v) -{ - MOZ_ASSERT(JSVAL_IS_OBJECT_OR_NULL_IMPL(JSVAL_TO_IMPL(v))); - return JSVAL_TO_OBJECT_IMPL(JSVAL_TO_IMPL(v)); -} - static inline jsval OBJECT_TO_JSVAL(JSObject *obj) { diff --git a/js/src/ctypes/CTypes.cpp b/js/src/ctypes/CTypes.cpp index c50e34413c9b..ffb8e39485d0 100644 --- a/js/src/ctypes/CTypes.cpp +++ b/js/src/ctypes/CTypes.cpp @@ -1308,7 +1308,7 @@ static bool GetObjectProperty(JSContext *cx, HandleObject obj, return false; } - result.set(JSVAL_TO_OBJECT(val)); + result.set(val.toObjectOrNull()); return true; } @@ -1616,7 +1616,7 @@ jsvalToInteger(JSContext* cx, jsval val, IntegerType* result) return ConvertExact(d, result); } if (!JSVAL_IS_PRIMITIVE(val)) { - JSObject* obj = JSVAL_TO_OBJECT(val); + JSObject* obj = val.toObjectOrNull(); if (CData::IsCData(obj)) { JSObject* typeObj = CData::GetCType(obj); void* data = CData::GetData(obj); @@ -1705,7 +1705,7 @@ jsvalToFloat(JSContext *cx, jsval val, FloatType* result) return true; } if (!JSVAL_IS_PRIMITIVE(val)) { - JSObject* obj = JSVAL_TO_OBJECT(val); + JSObject* obj = val.toObjectOrNull(); if (CData::IsCData(obj)) { JSObject* typeObj = CData::GetCType(obj); void* data = CData::GetData(obj); @@ -1829,7 +1829,7 @@ jsvalToBigInteger(JSContext* cx, } if (!JSVAL_IS_PRIMITIVE(val)) { // Allow conversion from an Int64 or UInt64 object directly. - JSObject* obj = JSVAL_TO_OBJECT(val); + JSObject* obj = val.toObjectOrNull(); if (UInt64::IsUInt64(obj)) { // Make sure the integer fits in IntegerType. @@ -1952,7 +1952,7 @@ jsvalToIntegerExplicit(jsval val, IntegerType* result) } if (!JSVAL_IS_PRIMITIVE(val)) { // Convert Int64 and UInt64 values by C-style cast. - JSObject* obj = JSVAL_TO_OBJECT(val); + JSObject* obj = val.toObjectOrNull(); if (Int64::IsInt64(obj)) { int64_t i = Int64Base::GetInt(obj); *result = IntegerType(i); @@ -1996,7 +1996,7 @@ jsvalToPtrExplicit(JSContext* cx, jsval val, uintptr_t* result) return double(*result) == d; } if (!JSVAL_IS_PRIMITIVE(val)) { - JSObject* obj = JSVAL_TO_OBJECT(val); + JSObject* obj = val.toObjectOrNull(); if (Int64::IsInt64(obj)) { int64_t i = Int64Base::GetInt(obj); intptr_t p = intptr_t(i); @@ -2243,7 +2243,7 @@ ImplicitConvert(JSContext* cx, JSObject* sourceType = nullptr; RootedObject valObj(cx, nullptr); if (!JSVAL_IS_PRIMITIVE(val)) { - valObj = JSVAL_TO_OBJECT(val); + valObj = val.toObjectOrNull(); if (CData::IsCData(valObj)) { sourceData = valObj; sourceType = CData::GetCType(sourceData); @@ -3612,7 +3612,7 @@ CType::GetProtoFromType(JSContext* cx, JSObject* objArg, CTypeProtoSlot slot) // Get the requested ctypes.{Pointer,Array,Struct,Function}Type.prototype. jsval result = JS_GetReservedSlot(proto, slot); JS_ASSERT(!JSVAL_IS_PRIMITIVE(result)); - return JSVAL_TO_OBJECT(result); + return result.toObjectOrNull(); } bool @@ -4639,7 +4639,7 @@ ExtractStructField(JSContext* cx, jsval val, JSObject** typeObj) return nullptr; } - RootedObject obj(cx, JSVAL_TO_OBJECT(val)); + RootedObject obj(cx, val.toObjectOrNull()); RootedObject iter(cx, JS_NewPropertyIterator(cx, obj)); if (!iter) return nullptr; @@ -5003,7 +5003,7 @@ StructType::Define(JSContext* cx, unsigned argc, jsval* vp) JS_ReportError(cx, "argument must be an array"); return false; } - RootedObject arr(cx, JSVAL_TO_OBJECT(arg)); + RootedObject arr(cx, arg.toObjectOrNull()); if (!JS_IsArrayObject(cx, arr)) { JS_ReportError(cx, "argument must be an array"); return false; @@ -5314,7 +5314,7 @@ GetABI(JSContext* cx, jsval abiType, ffi_abi* result) if (JSVAL_IS_PRIMITIVE(abiType)) return false; - ABICode abi = GetABICode(JSVAL_TO_OBJECT(abiType)); + ABICode abi = GetABICode(abiType.toObjectOrNull()); // determine the ABI from the subset of those available on the // given platform. ABI_DEFAULT specifies the default @@ -5343,13 +5343,12 @@ GetABI(JSContext* cx, jsval abiType, ffi_abi* result) static JSObject* PrepareType(JSContext* cx, jsval type) { - if (JSVAL_IS_PRIMITIVE(type) || - !CType::IsCType(JSVAL_TO_OBJECT(type))) { + if (JSVAL_IS_PRIMITIVE(type) || !CType::IsCType(type.toObjectOrNull())) { JS_ReportError(cx, "not a ctypes type"); return nullptr; } - JSObject* result = JSVAL_TO_OBJECT(type); + JSObject* result = type.toObjectOrNull(); TypeCode typeCode = CType::GetTypeCode(result); if (typeCode == TYPE_array) { @@ -5380,13 +5379,12 @@ PrepareType(JSContext* cx, jsval type) static JSObject* PrepareReturnType(JSContext* cx, jsval type) { - if (JSVAL_IS_PRIMITIVE(type) || - !CType::IsCType(JSVAL_TO_OBJECT(type))) { + if (JSVAL_IS_PRIMITIVE(type) || !CType::IsCType(type.toObjectOrNull())) { JS_ReportError(cx, "not a ctypes type"); return nullptr; } - JSObject* result = JSVAL_TO_OBJECT(type); + JSObject* result = type.toObjectOrNull(); TypeCode typeCode = CType::GetTypeCode(result); // Arrays and functions can never be return types. @@ -5524,7 +5522,7 @@ NewFunctionInfo(JSContext* cx, JS_ReportError(cx, "Invalid ABI specification"); return nullptr; } - fninfo->mABI = JSVAL_TO_OBJECT(abiType); + fninfo->mABI = abiType.toObjectOrNull(); // prepare the result type fninfo->mReturnType = PrepareReturnType(cx, returnType); @@ -6297,7 +6295,7 @@ CData::Create(JSContext* cx, jsval slot = JS_GetReservedSlot(typeObj, SLOT_PROTO); JS_ASSERT(!JSVAL_IS_PRIMITIVE(slot)); - RootedObject proto(cx, JSVAL_TO_OBJECT(slot)); + RootedObject proto(cx, slot.toObjectOrNull()); RootedObject parent(cx, JS_GetParent(typeObj)); JS_ASSERT(parent); @@ -6375,7 +6373,7 @@ CData::GetCType(JSObject* dataObj) JS_ASSERT(CData::IsCData(dataObj)); jsval slot = JS_GetReservedSlot(dataObj, SLOT_CTYPE); - JSObject* typeObj = JSVAL_TO_OBJECT(slot); + JSObject* typeObj = slot.toObjectOrNull(); JS_ASSERT(CType::IsCType(typeObj)); return typeObj; } @@ -6746,7 +6744,7 @@ CDataFinalizer::Methods::ToSource(JSContext *cx, unsigned argc, jsval *vp) return false; } - RootedObject typeObj(cx, JSVAL_TO_OBJECT(valCodePtrType)); + RootedObject typeObj(cx, valCodePtrType.toObjectOrNull()); JSString *srcDispose = CData::GetSourceString(cx, typeObj, &(p->code)); if (!srcDispose) { return false; @@ -6817,7 +6815,7 @@ CDataFinalizer::GetCType(JSContext *cx, JSObject *obj) return nullptr; } - return JSVAL_TO_OBJECT(valData); + return valData.toObjectOrNull(); } JSObject* @@ -6839,7 +6837,7 @@ CDataFinalizer::GetCData(JSContext *cx, JSObject *obj) JS_ReportError(cx, "Empty CDataFinalizer"); return nullptr; } - return JSVAL_TO_OBJECT(val); + return val.toObjectOrNull(); } bool @@ -7408,7 +7406,7 @@ Int64::Construct(JSContext* cx, RootedValue slot(cx); RootedObject callee(cx, &args.callee()); ASSERT_OK(JS_GetProperty(cx, callee, "prototype", &slot)); - RootedObject proto(cx, JSVAL_TO_OBJECT(slot)); + RootedObject proto(cx, slot.toObjectOrNull()); JS_ASSERT(JS_GetClass(proto) == &sInt64ProtoClass); JSObject* result = Int64Base::Construct(cx, proto, i, false); diff --git a/js/src/jsapi-tests/testAddPropertyPropcache.cpp b/js/src/jsapi-tests/testAddPropertyPropcache.cpp index 607c74e0c2a5..e208975f6f82 100644 --- a/js/src/jsapi-tests/testAddPropertyPropcache.cpp +++ b/js/src/jsapi-tests/testAddPropertyPropcache.cpp @@ -53,7 +53,7 @@ BEGIN_TEST(testAddPropertyHook) obj = JS_NewObject(cx, &AddPropertyClass, JS::NullPtr(), JS::NullPtr()); CHECK(obj); JS::RootedValue vobj(cx, OBJECT_TO_JSVAL(obj)); - JS::RootedObject arrObj(cx, JSVAL_TO_OBJECT(arr)); + JS::RootedObject arrObj(cx, arr.toObjectOrNull()); CHECK(JS_DefineElement(cx, arrObj, i, vobj, JS_PropertyStub, JS_StrictPropertyStub, JSPROP_ENUMERATE)); diff --git a/js/src/jsapi-tests/testArgumentsObject.cpp b/js/src/jsapi-tests/testArgumentsObject.cpp index a9eb354b2a3f..c789913689e2 100644 --- a/js/src/jsapi-tests/testArgumentsObject.cpp +++ b/js/src/jsapi-tests/testArgumentsObject.cpp @@ -83,7 +83,7 @@ ExhaustiveTest(const char funcode[]) EVAL(funcode, &v); EVAL(CALL_CODES[ArgCount], &v); - Rooted argsobj(cx, &JSVAL_TO_OBJECT(v)->as()); + Rooted argsobj(cx, &v.toObjectOrNull()->as()); JS::AutoValueArray elems(cx); diff --git a/js/src/jsapi-tests/testBindCallable.cpp b/js/src/jsapi-tests/testBindCallable.cpp index 035d7e62464f..695009164bb8 100644 --- a/js/src/jsapi-tests/testBindCallable.cpp +++ b/js/src/jsapi-tests/testBindCallable.cpp @@ -14,8 +14,8 @@ BEGIN_TEST(test_BindCallable) EVAL("(function() { return this.somename; })", &func); CHECK(func.isObject()); - JS::RootedObject funcObj(cx, JSVAL_TO_OBJECT(func)); - JS::RootedObject vObj(cx, JSVAL_TO_OBJECT(v)); + JS::RootedObject funcObj(cx, func.toObjectOrNull()); + JS::RootedObject vObj(cx, v.toObjectOrNull()); JSObject* newCallable = JS_BindCallable(cx, funcObj, vObj); CHECK(newCallable); diff --git a/js/src/jsapi-tests/testConservativeGC.cpp b/js/src/jsapi-tests/testConservativeGC.cpp index 99f6fa19ca79..00d24957fa76 100644 --- a/js/src/jsapi-tests/testConservativeGC.cpp +++ b/js/src/jsapi-tests/testConservativeGC.cpp @@ -15,7 +15,7 @@ BEGIN_TEST(testConservativeGC) EVAL("({foo: 'bar'});", &v2); CHECK(v2.isObject()); char objCopy[sizeof(JSObject)]; - js_memcpy(&objCopy, JSVAL_TO_OBJECT(v2), sizeof(JSObject)); + js_memcpy(&objCopy, v2.toObjectOrNull(), sizeof(JSObject)); JS::RootedValue v3(cx); EVAL("String(Math.PI);", &v3); @@ -26,7 +26,7 @@ BEGIN_TEST(testConservativeGC) JS::RootedValue tmp(cx); EVAL("({foo2: 'bar2'});", &tmp); CHECK(tmp.isObject()); - JS::RootedObject obj2(cx, JSVAL_TO_OBJECT(tmp)); + JS::RootedObject obj2(cx, tmp.toObjectOrNull()); char obj2Copy[sizeof(JSObject)]; js_memcpy(&obj2Copy, obj2, sizeof(JSObject)); @@ -47,7 +47,7 @@ BEGIN_TEST(testConservativeGC) JS_GC(rt); - checkObjectFields((JSObject *)objCopy, JSVAL_TO_OBJECT(v2)); + checkObjectFields((JSObject *)objCopy, v2.toObjectOrNull()); CHECK(!memcmp(strCopy, v3.toString(), sizeof(strCopy))); checkObjectFields((JSObject *)obj2Copy, obj2); diff --git a/js/src/jsapi-tests/testDeepFreeze.cpp b/js/src/jsapi-tests/testDeepFreeze.cpp index edd45ea0d29d..efc7183ebb6b 100644 --- a/js/src/jsapi-tests/testDeepFreeze.cpp +++ b/js/src/jsapi-tests/testDeepFreeze.cpp @@ -11,7 +11,7 @@ BEGIN_TEST(testDeepFreeze_bug535703) { JS::RootedValue v(cx); EVAL("var x = {}; x;", &v); - JS::RootedObject obj(cx, JSVAL_TO_OBJECT(v)); + JS::RootedObject obj(cx, v.toObjectOrNull()); CHECK(JS_DeepFreezeObject(cx, obj)); // don't crash EVAL("Object.isFrozen(x)", &v); CHECK_SAME(v, JSVAL_TRUE); @@ -28,7 +28,7 @@ BEGIN_TEST(testDeepFreeze_deep) EVAL("a", &a); EVAL("o", &o); - JS::RootedObject aobj(cx, JSVAL_TO_OBJECT(a)); + JS::RootedObject aobj(cx, a.toObjectOrNull()); CHECK(JS_DeepFreezeObject(cx, aobj)); JS::RootedValue b(cx); @@ -47,7 +47,7 @@ BEGIN_TEST(testDeepFreeze_loop) EVAL("x", &x); EVAL("y", &y); - JS::RootedObject xobj(cx, JSVAL_TO_OBJECT(x)); + JS::RootedObject xobj(cx, x.toObjectOrNull()); CHECK(JS_DeepFreezeObject(cx, xobj)); JS::RootedValue b(cx); diff --git a/js/src/jsapi-tests/testDefineGetterSetterNonEnumerable.cpp b/js/src/jsapi-tests/testDefineGetterSetterNonEnumerable.cpp index 527a8ffe7c56..c4e5d52b2508 100644 --- a/js/src/jsapi-tests/testDefineGetterSetterNonEnumerable.cpp +++ b/js/src/jsapi-tests/testDefineGetterSetterNonEnumerable.cpp @@ -32,7 +32,7 @@ BEGIN_TEST(testDefineGetterSetterNonEnumerable) JS::RootedObject funSetObj(cx, JS_GetFunctionObject(funSet)); JS::RootedValue vset(cx, OBJECT_TO_JSVAL(funSetObj)); - JS::RootedObject vObject(cx, JSVAL_TO_OBJECT(vobj)); + JS::RootedObject vObject(cx, vobj.toObjectOrNull()); CHECK(JS_DefineProperty(cx, vObject, PROPERTY_NAME, JS::UndefinedHandleValue, JSPROP_GETTER | JSPROP_SETTER | JSPROP_ENUMERATE, diff --git a/js/src/jsapi-tests/testDefineProperty.cpp b/js/src/jsapi-tests/testDefineProperty.cpp index 38245a6dd37c..1c9c1e5980c1 100644 --- a/js/src/jsapi-tests/testDefineProperty.cpp +++ b/js/src/jsapi-tests/testDefineProperty.cpp @@ -15,7 +15,7 @@ BEGIN_TEST(testDefineProperty_bug564344) "x.p(); // brand x's scope\n" "x;", &x); - JS::RootedObject obj(cx, JSVAL_TO_OBJECT(x)); + JS::RootedObject obj(cx, x.toObjectOrNull()); for (int i = 0; i < 2; i++) CHECK(JS_DefineProperty(cx, obj, "q", JS::UndefinedHandleValue, JSPROP_SHARED)); return true; diff --git a/js/src/jsapi-tests/testFunctionProperties.cpp b/js/src/jsapi-tests/testFunctionProperties.cpp index 27076319715a..20a098ccc490 100644 --- a/js/src/jsapi-tests/testFunctionProperties.cpp +++ b/js/src/jsapi-tests/testFunctionProperties.cpp @@ -12,7 +12,7 @@ BEGIN_TEST(testFunctionProperties) JS::RootedValue x(cx); EVAL("(function f() {})", &x); - JS::RootedObject obj(cx, JSVAL_TO_OBJECT(x)); + JS::RootedObject obj(cx, x.toObjectOrNull()); JS::RootedValue y(cx); CHECK(JS_GetProperty(cx, obj, "arguments", &y)); diff --git a/js/src/jsapi-tests/testLookup.cpp b/js/src/jsapi-tests/testLookup.cpp index 52a72a89dc34..97a2d077af90 100644 --- a/js/src/jsapi-tests/testLookup.cpp +++ b/js/src/jsapi-tests/testLookup.cpp @@ -23,7 +23,7 @@ BEGIN_TEST(testLookup_bug522590) // Now make x.f a method. EVAL("mkobj()", &x); - JS::RootedObject xobj(cx, JSVAL_TO_OBJECT(x)); + JS::RootedObject xobj(cx, x.toObjectOrNull()); // This lookup must not return an internal function object. JS::RootedValue r(cx); diff --git a/js/src/jsapi-tests/testMappedArrayBuffer.cpp b/js/src/jsapi-tests/testMappedArrayBuffer.cpp index 0437294dbd6f..82727c97ab91 100644 --- a/js/src/jsapi-tests/testMappedArrayBuffer.cpp +++ b/js/src/jsapi-tests/testMappedArrayBuffer.cpp @@ -128,7 +128,7 @@ bool TestCloneObject() CHECK(cloned_buffer.write(cx, v1, callbacks, nullptr)); JS::RootedValue v2(cx); CHECK(cloned_buffer.read(cx, &v2, callbacks, nullptr)); - JS::RootedObject obj2(cx, JSVAL_TO_OBJECT(v2)); + JS::RootedObject obj2(cx, v2.toObjectOrNull()); CHECK(VerifyObject(obj2, 8, 12, false)); return true; @@ -164,7 +164,7 @@ bool TestTransferObject() CHECK(cloned_buffer.write(cx, v1, transferable, callbacks, nullptr)); JS::RootedValue v2(cx); CHECK(cloned_buffer.read(cx, &v2, callbacks, nullptr)); - JS::RootedObject obj2(cx, JSVAL_TO_OBJECT(v2)); + JS::RootedObject obj2(cx, v2.toObjectOrNull()); CHECK(VerifyObject(obj2, 8, 12, true)); CHECK(isNeutered(obj1)); diff --git a/js/src/jsapi-tests/testNewObject.cpp b/js/src/jsapi-tests/testNewObject.cpp index bfbc79a98640..c38f73c91e24 100644 --- a/js/src/jsapi-tests/testNewObject.cpp +++ b/js/src/jsapi-tests/testNewObject.cpp @@ -60,7 +60,7 @@ BEGIN_TEST(testNewObject_1) JS::RootedValue v(cx); EVAL("Array", &v); - JS::RootedObject Array(cx, JSVAL_TO_OBJECT(v)); + JS::RootedObject Array(cx, v.toObjectOrNull()); // With no arguments. JS::RootedObject obj(cx, JS_New(cx, Array, JS::HandleValueArray::empty())); diff --git a/js/src/jsapi-tests/testParseJSON.cpp b/js/src/jsapi-tests/testParseJSON.cpp index 3f4300f85c9b..d4ebdf30737c 100644 --- a/js/src/jsapi-tests/testParseJSON.cpp +++ b/js/src/jsapi-tests/testParseJSON.cpp @@ -104,14 +104,14 @@ BEGIN_TEST(testParseJSON_success) CHECK(Parse(cx, "[]", &v)); CHECK(!JSVAL_IS_PRIMITIVE(v)); - obj = JSVAL_TO_OBJECT(v); + obj = v.toObjectOrNull(); CHECK(JS_IsArrayObject(cx, obj)); CHECK(JS_GetProperty(cx, obj, "length", &v2)); CHECK_SAME(v2, JSVAL_ZERO); CHECK(Parse(cx, "[1]", &v)); CHECK(!JSVAL_IS_PRIMITIVE(v)); - obj = JSVAL_TO_OBJECT(v); + obj = v.toObjectOrNull(); CHECK(JS_IsArrayObject(cx, obj)); CHECK(JS_GetProperty(cx, obj, "0", &v2)); CHECK_SAME(v2, JSVAL_ONE); @@ -122,12 +122,12 @@ BEGIN_TEST(testParseJSON_success) // Objects CHECK(Parse(cx, "{}", &v)); CHECK(!JSVAL_IS_PRIMITIVE(v)); - obj = JSVAL_TO_OBJECT(v); + obj = v.toObjectOrNull(); CHECK(!JS_IsArrayObject(cx, obj)); CHECK(Parse(cx, "{ \"f\": 17 }", &v)); CHECK(!JSVAL_IS_PRIMITIVE(v)); - obj = JSVAL_TO_OBJECT(v); + obj = v.toObjectOrNull(); CHECK(!JS_IsArrayObject(cx, obj)); CHECK(JS_GetProperty(cx, obj, "f", &v2)); CHECK_SAME(v2, INT_TO_JSVAL(17)); diff --git a/js/src/jsapi-tests/testRegExp.cpp b/js/src/jsapi-tests/testRegExp.cpp index aaab5567b5bb..18ac090a98b5 100644 --- a/js/src/jsapi-tests/testRegExp.cpp +++ b/js/src/jsapi-tests/testRegExp.cpp @@ -9,11 +9,11 @@ BEGIN_TEST(testObjectIsRegExp) JS::RootedValue val(cx); EVAL("new Object", &val); - JS::RootedObject obj(cx, JSVAL_TO_OBJECT(val)); + JS::RootedObject obj(cx, val.toObjectOrNull()); CHECK(!JS_ObjectIsRegExp(cx, obj)); EVAL("/foopy/", &val); - obj = JSVAL_TO_OBJECT(val); + obj = val.toObjectOrNull(); CHECK(JS_ObjectIsRegExp(cx, obj)); return true; @@ -26,15 +26,15 @@ BEGIN_TEST(testGetRegExpFlags) JS::RootedObject obj(cx); EVAL("/foopy/", &val); - obj = JSVAL_TO_OBJECT(val); + obj = val.toObjectOrNull(); CHECK_EQUAL(JS_GetRegExpFlags(cx, obj), 0); EVAL("/foopy/g", &val); - obj = JSVAL_TO_OBJECT(val); + obj = val.toObjectOrNull(); CHECK_EQUAL(JS_GetRegExpFlags(cx, obj), JSREG_GLOB); EVAL("/foopy/gi", &val); - obj = JSVAL_TO_OBJECT(val); + obj = val.toObjectOrNull(); CHECK_EQUAL(JS_GetRegExpFlags(cx, obj), (JSREG_FOLD | JSREG_GLOB)); return true; @@ -47,7 +47,7 @@ BEGIN_TEST(testGetRegExpSource) JS::RootedObject obj(cx); EVAL("/foopy/", &val); - obj = JSVAL_TO_OBJECT(val); + obj = val.toObjectOrNull(); JSString *source = JS_GetRegExpSource(cx, obj); CHECK(JS_FlatStringEqualsAscii(JS_ASSERT_STRING_IS_FLAT(source), "foopy")); diff --git a/js/src/jsapi-tests/testRegExpInstanceProperties.cpp b/js/src/jsapi-tests/testRegExpInstanceProperties.cpp index 2628683b0f4f..bef9c13e35b8 100644 --- a/js/src/jsapi-tests/testRegExpInstanceProperties.cpp +++ b/js/src/jsapi-tests/testRegExpInstanceProperties.cpp @@ -16,7 +16,7 @@ BEGIN_TEST(testRegExpInstanceProperties) jsval regexpProtoVal; EVAL("RegExp.prototype", ®expProtoVal); - JSObject *regexpProto = JSVAL_TO_OBJECT(regexpProtoVal); + JSObject *regexpProto = regexpProtoVal.toObjectOrNull(); if (!helper(regexpProto)) return false; @@ -27,7 +27,7 @@ BEGIN_TEST(testRegExpInstanceProperties) jsval regexp; EVAL("/foopy/", ®exp); - JSObject *robj = JSVAL_TO_OBJECT(regexp); + JSObject *robj = regexp.toObjectOrNull(); CHECK(robj->lastProperty()); CHECK_EQUAL(robj->compartment()->initialRegExpShape, robj->lastProperty()); diff --git a/js/src/jsexn.cpp b/js/src/jsexn.cpp index 55db33e7ee5a..46601e2d607b 100644 --- a/js/src/jsexn.cpp +++ b/js/src/jsexn.cpp @@ -758,7 +758,7 @@ js_ReportUncaughtException(JSContext *cx) if (JSVAL_IS_PRIMITIVE(exn)) { exnObject = nullptr; } else { - exnObject = JSVAL_TO_OBJECT(exn); + exnObject = exn.toObjectOrNull(); } JS_ClearPendingException(cx); diff --git a/js/src/jsopcode.cpp b/js/src/jsopcode.cpp index ef2dcbfedde4..f451b1d24964 100644 --- a/js/src/jsopcode.cpp +++ b/js/src/jsopcode.cpp @@ -823,7 +823,7 @@ ToDisassemblySource(JSContext *cx, HandleValue v, JSAutoByteString *bytes) } if (!JSVAL_IS_PRIMITIVE(v)) { - JSObject *obj = JSVAL_TO_OBJECT(v); + JSObject *obj = v.toObjectOrNull(); if (obj->is()) { Rooted block(cx, &obj->as()); char *source = JS_sprintf_append(nullptr, "depth %d {", block->localOffset()); diff --git a/js/src/perf/jsperf.cpp b/js/src/perf/jsperf.cpp index bd87489cc2d4..461874f9ad8d 100644 --- a/js/src/perf/jsperf.cpp +++ b/js/src/perf/jsperf.cpp @@ -267,7 +267,7 @@ ExtractPerfMeasurement(jsval wrapper) // This is what JS_GetInstancePrivate does internally. We can't // call JS_anything from here, because we don't have a JSContext. - JSObject *obj = JSVAL_TO_OBJECT(wrapper); + JSObject *obj = wrapper.toObjectOrNull(); if (obj->getClass() != js::Valueify(&pm_class)) return 0; diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp index c7b8a24777c2..d968d757c38e 100644 --- a/js/src/shell/js.cpp +++ b/js/src/shell/js.cpp @@ -3071,7 +3071,7 @@ static bool resolver_enumerate(JSContext *cx, HandleObject obj) { jsval v = JS_GetReservedSlot(obj, 0); - RootedObject referent(cx, JSVAL_TO_OBJECT(v)); + RootedObject referent(cx, v.toObjectOrNull()); AutoIdArray ida(cx, JS_Enumerate(cx, referent)); bool ok = !!ida; @@ -4201,7 +4201,7 @@ Wrap(JSContext *cx, unsigned argc, jsval *vp) return true; } - RootedObject obj(cx, JSVAL_TO_OBJECT(v)); + RootedObject obj(cx, v.toObjectOrNull()); JSObject *wrapped = Wrapper::New(cx, obj, &obj->global(), &Wrapper::singleton); if (!wrapped) @@ -4983,7 +4983,7 @@ Help(JSContext *cx, unsigned argc, jsval *vp) JS_ReportError(cx, "primitive arg"); return false; } - obj = JSVAL_TO_OBJECT(v); + obj = v.toObjectOrNull(); if (!PrintHelp(cx, obj)) return false; } diff --git a/js/src/tests/js1_5/Regress/regress-457065-03.js b/js/src/tests/js1_5/Regress/regress-457065-03.js index 5f6a8b45faa9..690781f68ab5 100644 --- a/js/src/tests/js1_5/Regress/regress-457065-03.js +++ b/js/src/tests/js1_5/Regress/regress-457065-03.js @@ -5,7 +5,7 @@ //----------------------------------------------------------------------------- var BUGNUMBER = 457065; -var summary = 'Do not assert: !fp->callee || fp->thisp == JSVAL_TO_OBJECT(fp->argv[-1])'; +var summary = 'Do not assert: !fp->callee || fp->thisp == fp->argv[-1].toObjectOrNull()'; var actual = ''; var expect = ''; diff --git a/js/src/tests/js1_8/regress/regress-457065-01.js b/js/src/tests/js1_8/regress/regress-457065-01.js index bbfb5e32a357..003545b7eaa0 100644 --- a/js/src/tests/js1_8/regress/regress-457065-01.js +++ b/js/src/tests/js1_8/regress/regress-457065-01.js @@ -5,7 +5,7 @@ //----------------------------------------------------------------------------- var BUGNUMBER = 457065; -var summary = 'Do not assert: !fp->callee || fp->thisp == JSVAL_TO_OBJECT(fp->argv[-1])'; +var summary = 'Do not assert: !fp->callee || fp->thisp == fp->argv[-1].toObjectOrNull()'; var actual = ''; var expect = ''; diff --git a/js/src/tests/js1_8/regress/regress-457065-02.js b/js/src/tests/js1_8/regress/regress-457065-02.js index 347d4fc03727..75ac47d3681b 100644 --- a/js/src/tests/js1_8/regress/regress-457065-02.js +++ b/js/src/tests/js1_8/regress/regress-457065-02.js @@ -5,7 +5,7 @@ //----------------------------------------------------------------------------- var BUGNUMBER = 457065; -var summary = 'Do not assert: !fp->callee || fp->thisp == JSVAL_TO_OBJECT(fp->argv[-1])'; +var summary = 'Do not assert: !fp->callee || fp->thisp == fp->argv[-1].toObjectOrNull()'; var actual = ''; var expect = ''; diff --git a/js/src/tests/js1_8_1/regress/regress-452498-123.js b/js/src/tests/js1_8_1/regress/regress-452498-123.js index 02f3533854ce..b05ea4218f7d 100644 --- a/js/src/tests/js1_8_1/regress/regress-452498-123.js +++ b/js/src/tests/js1_8_1/regress/regress-452498-123.js @@ -45,7 +45,7 @@ function test() // ===== (function(){ eval("for (x in ['', {}, '', {}]) { this; }" )})(); -// Assertion failure: fp->thisp == JSVAL_TO_OBJECT(fp->argv[-1]), at ../jstracer.cpp:4172 +// Assertion failure: fp->thisp == fp->argv[-1].toObjectOrNull(), at ../jstracer.cpp:4172 // ===== for each (let x in ['', '', '']) { (new function(){} )} diff --git a/js/xpconnect/src/XPCComponents.cpp b/js/xpconnect/src/XPCComponents.cpp index f732dec75631..613960e3bce0 100644 --- a/js/xpconnect/src/XPCComponents.cpp +++ b/js/xpconnect/src/XPCComponents.cpp @@ -2469,7 +2469,7 @@ nsXPCComponents_Constructor::CallOrConstruct(nsIXPConnectWrappedNative *wrapper, return ThrowAndFail(NS_ERROR_XPC_BAD_CID, cx, _retval); nsCOMPtr wn; - if (NS_FAILED(xpc->GetWrappedNativeOfJSObject(cx, JSVAL_TO_OBJECT(val), + if (NS_FAILED(xpc->GetWrappedNativeOfJSObject(cx, val.toObjectOrNull(), getter_AddRefs(wn))) || !wn || !(cClassID = do_QueryWrappedNative(wn))) { return ThrowAndFail(NS_ERROR_XPC_UNEXPECTED, cx, _retval); diff --git a/js/xpconnect/src/XPCConvert.cpp b/js/xpconnect/src/XPCConvert.cpp index e175b78934fc..39bf743ceafc 100644 --- a/js/xpconnect/src/XPCConvert.cpp +++ b/js/xpconnect/src/XPCConvert.cpp @@ -1124,7 +1124,7 @@ XPCConvert::JSValToXPCException(MutableHandleValue s, if (!JSVAL_IS_PRIMITIVE(s)) { // we have a JSObject - RootedObject obj(cx, JSVAL_TO_OBJECT(s)); + RootedObject obj(cx, s.toObjectOrNull()); if (!obj) { NS_ERROR("when is an object not an object?"); diff --git a/js/xpconnect/src/XPCJSID.cpp b/js/xpconnect/src/XPCJSID.cpp index 5ed50acf3076..0c6334dabbc5 100644 --- a/js/xpconnect/src/XPCJSID.cpp +++ b/js/xpconnect/src/XPCJSID.cpp @@ -645,7 +645,7 @@ GetIIDArg(uint32_t argc, const JS::Value& val, JSContext* cx) if (argc) { JSObject* iidobj; if (JSVAL_IS_PRIMITIVE(val) || - !(iidobj = JSVAL_TO_OBJECT(val)) || + !(iidobj = val.toObjectOrNull()) || !(iid = xpc_JSObjectToID(cx, iidobj))) { return nullptr; } diff --git a/js/xpconnect/src/XPCQuickStubs.h b/js/xpconnect/src/XPCQuickStubs.h index ebe3def4d5d7..61b7d431327c 100644 --- a/js/xpconnect/src/XPCQuickStubs.h +++ b/js/xpconnect/src/XPCQuickStubs.h @@ -597,7 +597,7 @@ PropertyOpForwarder(JSContext *cx, unsigned argc, jsval *vp) JS::RootedValue v(cx, js::GetFunctionNativeReserved(callee, 0)); - JSObject *ptrobj = JSVAL_TO_OBJECT(v); + JSObject *ptrobj = v.toObjectOrNull(); Op *popp = static_cast(JS_GetPrivate(ptrobj)); v = js::GetFunctionNativeReserved(callee, 1); diff --git a/js/xpconnect/src/XPCVariant.cpp b/js/xpconnect/src/XPCVariant.cpp index f73af2635fcb..2343a6088154 100644 --- a/js/xpconnect/src/XPCVariant.cpp +++ b/js/xpconnect/src/XPCVariant.cpp @@ -87,7 +87,7 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(XPCVariant) JS::Value val = tmp->GetJSValPreserveColor(); if (val.isObjectOrNull()) { NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mJSVal"); - cb.NoteJSChild(JSVAL_TO_OBJECT(val)); + cb.NoteJSChild(val.toObjectOrNull()); } nsVariant::Traverse(tmp->mData, cb); diff --git a/js/xpconnect/src/XPCWrappedJSClass.cpp b/js/xpconnect/src/XPCWrappedJSClass.cpp index dbf4252ff54e..ecdc54a2cce2 100644 --- a/js/xpconnect/src/XPCWrappedJSClass.cpp +++ b/js/xpconnect/src/XPCWrappedJSClass.cpp @@ -1084,7 +1084,7 @@ nsXPCWrappedJSClass::CallMethod(nsXPCWrappedJS* wrapper, uint16_t methodIndex, if (!ok) { goto pre_call_clean_up; } - thisObj = JSVAL_TO_OBJECT(v); + thisObj = v.toObjectOrNull(); if (!JS_WrapObject(cx, &thisObj)) goto pre_call_clean_up; } diff --git a/js/xpconnect/src/XPCWrappedNativeJSOps.cpp b/js/xpconnect/src/XPCWrappedNativeJSOps.cpp index f00f01abe9eb..efb9fc8db309 100644 --- a/js/xpconnect/src/XPCWrappedNativeJSOps.cpp +++ b/js/xpconnect/src/XPCWrappedNativeJSOps.cpp @@ -122,7 +122,7 @@ GetDoubleWrappedJSObject(XPCCallContext& ccx, XPCWrappedNative* wrapper) RootedValue val(ccx); if (JS_GetPropertyById(ccx, mainObj, id, &val) && !JSVAL_IS_PRIMITIVE(val)) { - obj = JSVAL_TO_OBJECT(val); + obj = val.toObjectOrNull(); } } } @@ -381,7 +381,7 @@ DefinePropertyIfFound(XPCCallContext& ccx, MOZ_ASSERT(member->IsAttribute(), "way broken!"); propFlags |= JSPROP_GETTER | JSPROP_SHARED; - JSObject* funobj = JSVAL_TO_OBJECT(funval); + JSObject* funobj = funval.toObjectOrNull(); JSPropertyOp getter = JS_DATA_TO_FUNC_PTR(JSPropertyOp, funobj); JSStrictPropertyOp setter; if (member->IsWritableAttribute()) { diff --git a/js/xpconnect/src/nsXPConnect.cpp b/js/xpconnect/src/nsXPConnect.cpp index 92cadc558342..cd7f6f077ddf 100644 --- a/js/xpconnect/src/nsXPConnect.cpp +++ b/js/xpconnect/src/nsXPConnect.cpp @@ -835,7 +835,7 @@ nsXPConnect::CreateSandbox(JSContext *cx, nsIPrincipal *principal, "Bad return value from xpc_CreateSandboxObject()!"); if (NS_SUCCEEDED(rv) && !JSVAL_IS_PRIMITIVE(rval)) { - *_retval = XPCJSObjectHolder::newHolder(JSVAL_TO_OBJECT(rval)); + *_retval = XPCJSObjectHolder::newHolder(rval.toObjectOrNull()); NS_ENSURE_TRUE(*_retval, NS_ERROR_OUT_OF_MEMORY); NS_ADDREF(*_retval); diff --git a/js/xpconnect/src/qsgen.py b/js/xpconnect/src/qsgen.py index 3da4ed1291e2..dca7ef1f4330 100644 --- a/js/xpconnect/src/qsgen.py +++ b/js/xpconnect/src/qsgen.py @@ -563,7 +563,7 @@ def writeArgumentUnboxing(f, i, name, type, optional, rvdeclared, f.write(" if (NS_FAILED(rv)) {\n") if isSetter: assert(propIndex is not None) - f.write(" xpc_qsThrowBadSetterValue(cx, rv, JSVAL_TO_OBJECT(vp[1]), (uint16_t)%s);\n" % + f.write(" xpc_qsThrowBadSetterValue(cx, rv, vp[1].toObjectOrNull(), (uint16_t)%s);\n" % propIndex) else: f.write(" xpc_qsThrowBadArg(cx, rv, vp, %d);\n" % i) @@ -986,7 +986,7 @@ def writeQuickStub(f, customMethodCalls, stringtable, member, stubName, "cx, rv, vp);\n") else: f.write(" return xpc_qsThrowGetterSetterFailed(cx, rv, " + - "JSVAL_TO_OBJECT(vp[1]), (uint16_t)%d);\n" % + "vp[1].toObjectOrNull(), (uint16_t)%d);\n" % stringtable.stringIndex(member.name)) # Convert the return value. diff --git a/toolkit/components/ctypes/ctypes.cpp b/toolkit/components/ctypes/ctypes.cpp index 58db14353869..ba050d61c48d 100644 --- a/toolkit/components/ctypes/ctypes.cpp +++ b/toolkit/components/ctypes/ctypes.cpp @@ -96,7 +96,7 @@ InitAndSealCTypesClass(JSContext* cx, JS::Handle global) if (!JS_GetProperty(cx, global, "ctypes", &ctypes)) return false; - JS_SetCTypesCallbacks(JSVAL_TO_OBJECT(ctypes), &sCallbacks); + JS_SetCTypesCallbacks(ctypes.toObjectOrNull(), &sCallbacks); // Seal up Object, Function, Array and Error and their prototypes. (This // single object instance is shared amongst everyone who imports the ctypes diff --git a/toolkit/components/places/History.cpp b/toolkit/components/places/History.cpp index df901294270d..b35d9b11106d 100644 --- a/toolkit/components/places/History.cpp +++ b/toolkit/components/places/History.cpp @@ -271,7 +271,7 @@ GetJSValueAsURI(JSContext* aCtx, nsCOMPtr xpc = mozilla::services::GetXPConnect(); nsCOMPtr wrappedObj; - nsresult rv = xpc->GetWrappedNativeOfJSObject(aCtx, JSVAL_TO_OBJECT(aValue), + nsresult rv = xpc->GetWrappedNativeOfJSObject(aCtx, aValue.toObjectOrNull(), getter_AddRefs(wrappedObj)); NS_ENSURE_SUCCESS(rv, nullptr); nsCOMPtr uri = do_QueryWrappedNative(wrappedObj); @@ -2811,7 +2811,7 @@ History::UpdatePlaces(JS::Handle aPlaceInfos, bool rc = JS_GetProperty(aCtx, info, "visits", &visitsVal); NS_ENSURE_TRUE(rc, NS_ERROR_UNEXPECTED); if (!JSVAL_IS_PRIMITIVE(visitsVal)) { - visits = JSVAL_TO_OBJECT(visitsVal); + visits = visitsVal.toObjectOrNull(); NS_ENSURE_ARG(JS_IsArrayObject(aCtx, visits)); } }