Bug 952650 (part 12) - Remove JSVAL_TO_OBJECT. r=till.

--HG--
extra : rebase_source : 60dcaa2b778d3cf6eb7dc1a4949aab010ed8c130
This commit is contained in:
Nicholas Nethercote 2014-04-27 19:58:52 -07:00
parent 3a5329b969
commit 530542eecd
52 changed files with 110 additions and 120 deletions

View File

@ -12155,7 +12155,7 @@ nsIDocument::WrapObject(JSContext *aCx)
NS_NAMED_LITERAL_STRING(doc_str, "document"); 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), doc_str.Length(), JS::ObjectValue(*obj),
JS_PropertyStub, JS_StrictPropertyStub, JS_PropertyStub, JS_StrictPropertyStub,
JSPROP_READONLY | JSPROP_ENUMERATE)) { JSPROP_READONLY | JSPROP_ENUMERATE)) {

View File

@ -2451,7 +2451,7 @@ GetRequestBody(nsIVariant* aBody, nsIInputStream** aResult, uint64_t* aContentLe
nsresult rv = aBody->GetAsJSVal(&realVal); nsresult rv = aBody->GetAsJSVal(&realVal);
if (NS_SUCCEEDED(rv) && !JSVAL_IS_PRIMITIVE(realVal)) { if (NS_SUCCEEDED(rv) && !JSVAL_IS_PRIMITIVE(realVal)) {
JS::Rooted<JSObject*> obj(cx, JSVAL_TO_OBJECT(realVal)); JS::Rooted<JSObject*> obj(cx, realVal.toObjectOrNull());
if (JS_IsArrayBufferObject(obj)) { if (JS_IsArrayBufferObject(obj)) {
ArrayBuffer buf(obj); ArrayBuffer buf(obj);
return GetRequestBody(buf.Data(), buf.Length(), aResult, return GetRequestBody(buf.Data(), buf.Length(), aResult,

View File

@ -107,7 +107,7 @@ JSValToDashArray(JSContext* cx, const JS::Value& patternArray,
static const uint32_t MAX_NUM_DASHES = 1 << 14; static const uint32_t MAX_NUM_DASHES = 1 << 14;
if (!JSVAL_IS_PRIMITIVE(patternArray)) { if (!JSVAL_IS_PRIMITIVE(patternArray)) {
JS::Rooted<JSObject*> obj(cx, JSVAL_TO_OBJECT(patternArray)); JS::Rooted<JSObject*> obj(cx, patternArray.toObjectOrNull());
uint32_t length; uint32_t length;
if (!JS_GetArrayLength(cx, obj, &length)) { if (!JS_GetArrayLength(cx, obj, &length)) {
// Not an array-like thing // Not an array-like thing

View File

@ -1392,7 +1392,7 @@ nsXULTemplateBuilder::InitHTMLTemplateRoot()
rv = nsContentUtils::WrapNative(jscontext, mRoot, mRoot, &v); rv = nsContentUtils::WrapNative(jscontext, mRoot, mRoot, &v);
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
JS::Rooted<JSObject*> jselement(jscontext, JSVAL_TO_OBJECT(v)); JS::Rooted<JSObject*> jselement(jscontext, v.toObjectOrNull());
if (mDB) { if (mDB) {
// database // database

View File

@ -109,7 +109,7 @@ PostMessageReadStructuredClone(JSContext* cx,
if (JS_ReadBytes(reader, &supports, sizeof(supports))) { if (JS_ReadBytes(reader, &supports, sizeof(supports))) {
JS::Rooted<JS::Value> val(cx); JS::Rooted<JS::Value> val(cx);
if (NS_SUCCEEDED(nsContentUtils::WrapNative(cx, supports, &val))) { if (NS_SUCCEEDED(nsContentUtils::WrapNative(cx, supports, &val))) {
return JSVAL_TO_OBJECT(val); return val.toObjectOrNull();
} }
} }
} }

View File

@ -2390,7 +2390,7 @@ nsDOMWindowUtils::GetClassName(JS::Handle<JS::Value> aObject, JSContext* aCx,
return NS_ERROR_XPC_BAD_CONVERT_JS; 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."); NS_ABORT_IF_FALSE(*aName, "NS_strdup should be infallible.");
return NS_OK; return NS_OK;
} }
@ -3213,7 +3213,7 @@ nsDOMWindowUtils::GetFileId(JS::Handle<JS::Value> aFile, JSContext* aCx,
} }
if (!JSVAL_IS_PRIMITIVE(aFile)) { if (!JSVAL_IS_PRIMITIVE(aFile)) {
JSObject* obj = JSVAL_TO_OBJECT(aFile); JSObject* obj = aFile.toObjectOrNull();
file::FileHandle* fileHandle; file::FileHandle* fileHandle;
if (NS_SUCCEEDED(UNWRAP_OBJECT(FileHandle, obj, fileHandle))) { if (NS_SUCCEEDED(UNWRAP_OBJECT(FileHandle, obj, fileHandle))) {

View File

@ -837,7 +837,7 @@ public:
return nullptr; return nullptr;
} }
return JSVAL_TO_OBJECT(wrappedBlob); return wrappedBlob.toObjectOrNull();
} }
nsCOMPtr<nsIDOMFile> domFile; nsCOMPtr<nsIDOMFile> domFile;
@ -862,7 +862,7 @@ public:
return nullptr; return nullptr;
} }
return JSVAL_TO_OBJECT(wrappedFile); return wrappedFile.toObjectOrNull();
} }
}; };

View File

@ -655,7 +655,7 @@ IndexedDatabaseManager::InitWindowless(JS::Handle<JS::Value> aGlobal, JSContext*
{ {
NS_ENSURE_TRUE(nsContentUtils::IsCallerChrome(), NS_ERROR_NOT_AVAILABLE); NS_ENSURE_TRUE(nsContentUtils::IsCallerChrome(), NS_ERROR_NOT_AVAILABLE);
JS::Rooted<JSObject*> global(aCx, JSVAL_TO_OBJECT(aGlobal)); JS::Rooted<JSObject*> global(aCx, aGlobal.toObjectOrNull());
if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) { if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
NS_WARNING("Passed object is not a global object!"); NS_WARNING("Passed object is not a global object!");
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;

View File

@ -96,7 +96,7 @@ GetJSValFromKeyPathString(JSContext* aCx,
nsString targetObjectPropName; nsString targetObjectPropName;
JS::Rooted<JSObject*> targetObject(aCx, nullptr); JS::Rooted<JSObject*> targetObject(aCx, nullptr);
JS::Rooted<JSObject*> obj(aCx, JS::Rooted<JSObject*> obj(aCx,
JSVAL_IS_PRIMITIVE(aValue) ? nullptr : JSVAL_TO_OBJECT(aValue)); JSVAL_IS_PRIMITIVE(aValue) ? nullptr : aValue.toObjectOrNull());
while (tokenizer.hasMoreTokens()) { while (tokenizer.hasMoreTokens()) {
const nsDependentSubstring& token = tokenizer.nextToken(); const nsDependentSubstring& token = tokenizer.nextToken();
@ -132,7 +132,7 @@ GetJSValFromKeyPathString(JSContext* aCx,
if (JSVAL_IS_PRIMITIVE(intermediate)) { if (JSVAL_IS_PRIMITIVE(intermediate)) {
return NS_ERROR_DOM_INDEXEDDB_DATA_ERR; return NS_ERROR_DOM_INDEXEDDB_DATA_ERR;
} }
obj = JSVAL_TO_OBJECT(intermediate); obj = intermediate.toObjectOrNull();
} }
else { else {
// ...otherwise use it as key // ...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. // See if this is a JS array.
if (JS_IsArrayObject(aCx, aValue)) { if (JS_IsArrayObject(aCx, aValue)) {
JS::Rooted<JSObject*> obj(aCx, JSVAL_TO_OBJECT(aValue)); JS::Rooted<JSObject*> obj(aCx, aValue.toObjectOrNull());
uint32_t length; uint32_t length;
if (!JS_GetArrayLength(aCx, obj, &length)) { if (!JS_GetArrayLength(aCx, obj, &length)) {

View File

@ -435,7 +435,7 @@ JSValToNPVariant(NPP npp, JSContext *cx, JS::Value val, NPVariant *variant)
JS::Rooted<JSObject*> obj(cx, val.toObjectOrNull()); JS::Rooted<JSObject*> obj(cx, val.toObjectOrNull());
obj = js::CheckedUnwrap(obj); obj = js::CheckedUnwrap(obj);
if (!obj) { if (!obj) {
obj = JSVAL_TO_OBJECT(val); obj = val.toObjectOrNull();
} }
NPObject *npobj = nsJSObjWrapper::GetNewOrUsed(npp, cx, obj); 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); bool ok = GetProperty(cx, npjsobj->mJSObj, id, &v);
return ok && !JSVAL_IS_PRIMITIVE(v) && return ok && !JSVAL_IS_PRIMITIVE(v) &&
::JS_ObjectIsFunction(cx, JSVAL_TO_OBJECT(v)); ::JS_ObjectIsFunction(cx, v.toObjectOrNull());
} }
static bool static bool
@ -1352,7 +1352,7 @@ CallNPMethodInternal(JSContext *cx, JS::Handle<JSObject*> obj, unsigned argc,
NPVariant v; NPVariant v;
VOID_TO_NPVARIANT(v); VOID_TO_NPVARIANT(v);
JSObject *funobj = JSVAL_TO_OBJECT(argv[-2]); JSObject *funobj = argv[-2].toObjectOrNull();
bool ok; bool ok;
const char *msg = "Error calling method on NPObject!"; const char *msg = "Error calling method on NPObject!";
@ -1594,7 +1594,7 @@ NPObjWrapper_Convert(JSContext *cx, JS::Handle<JSObject*> obj, JSType hint, JS::
JS::Rooted<JS::Value> v(cx, JSVAL_VOID); JS::Rooted<JS::Value> v(cx, JSVAL_VOID);
if (!JS_GetProperty(cx, obj, "toString", &v)) if (!JS_GetProperty(cx, obj, "toString", &v))
return false; 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)) if (!JS_CallFunctionValue(cx, obj, v, JS::HandleValueArray::empty(), vp))
return false; return false;
if (JSVAL_IS_PRIMITIVE(vp)) if (JSVAL_IS_PRIMITIVE(vp))

View File

@ -63,7 +63,7 @@ DefineChromeWorkerFunctions(JSContext* aCx, JS::Handle<JSObject*> aGlobal)
UnicodeToNative UnicodeToNative
}; };
JS_SetCTypesCallbacks(JSVAL_TO_OBJECT(ctypes), &callbacks); JS_SetCTypesCallbacks(ctypes.toObjectOrNull(), &callbacks);
} }
#endif // BUILD_CTYPES #endif // BUILD_CTYPES

View File

@ -99,7 +99,7 @@ PostToNFC(JSContext* aCx,
data = abs.ptr(); data = abs.ptr();
size = abs.length(); size = abs.length();
} else if (!JSVAL_IS_PRIMITIVE(v)) { } else if (!JSVAL_IS_PRIMITIVE(v)) {
JSObject* obj = JSVAL_TO_OBJECT(v); JSObject* obj = v.toObjectOrNull();
if (!JS_IsTypedArrayObject(obj)) { if (!JS_IsTypedArrayObject(obj)) {
JS_ReportError(aCx, "Object passed in wasn't a typed array"); JS_ReportError(aCx, "Object passed in wasn't a typed array");
return false; return false;

View File

@ -104,7 +104,7 @@ PostToRIL(JSContext *aCx,
data = abs.ptr(); data = abs.ptr();
size = abs.length(); size = abs.length();
} else if (!JSVAL_IS_PRIMITIVE(v)) { } else if (!JSVAL_IS_PRIMITIVE(v)) {
JSObject *obj = JSVAL_TO_OBJECT(v); JSObject *obj = v.toObjectOrNull();
if (!JS_IsTypedArrayObject(obj)) { if (!JS_IsTypedArrayObject(obj)) {
JS_ReportError(aCx, "Object passed in wasn't a typed array"); JS_ReportError(aCx, "Object passed in wasn't a typed array");
return false; return false;

View File

@ -222,7 +222,7 @@ jsd_GetJSDObjectForJSObject(JSDContext* jsdc, JSObject* jsobj)
JSDObject* JSDObject*
jsd_GetObjectForValue(JSDContext* jsdc, JSDValue* jsdval) jsd_GetObjectForValue(JSDContext* jsdc, JSDValue* jsdval)
{ {
return jsd_GetJSDObjectForJSObject(jsdc, JSVAL_TO_OBJECT(jsdval->val)); return jsd_GetJSDObjectForJSObject(jsdc, jsdval->val.toObjectOrNull());
} }
JSDValue* JSDValue*

View File

@ -99,7 +99,7 @@ _callHook(JSDContext *jsdc, JSContext *cx, JSAbstractFramePtr frame, bool isCons
JS::RootedValue newObj(cx); JS::RootedValue newObj(cx);
if (!frame.getThisValue(cx, &newObj)) if (!frame.getThisValue(cx, &newObj))
return false; return false;
jsd_Constructing(jsdc, cx, JSVAL_TO_OBJECT(newObj), frame); jsd_Constructing(jsdc, cx, newObj.toObjectOrNull(), frame);
} }
jsscript = frame.script(); jsscript = frame.script();

View File

@ -116,7 +116,7 @@ jsd_IsValueFunction(JSDContext* jsdc, JSDValue* jsdval)
{ {
AutoSafeJSContext cx; // NB: Actually unused. AutoSafeJSContext cx; // NB: Actually unused.
return !JSVAL_IS_PRIMITIVE(jsdval->val) && return !JSVAL_IS_PRIMITIVE(jsdval->val) &&
JS_ObjectIsCallable(cx, JSVAL_TO_OBJECT(jsdval->val)); JS_ObjectIsCallable(cx, jsdval->val.toObjectOrNull());
} }
bool bool
@ -127,7 +127,7 @@ jsd_IsValueNative(JSDContext* jsdc, JSDValue* jsdval)
if(jsd_IsValueFunction(jsdc, jsdval)) if(jsd_IsValueFunction(jsdc, jsdval))
{ {
JSAutoCompartment ac(cx, JSVAL_TO_OBJECT(jsdval->val)); JSAutoCompartment ac(cx, jsdval->val.toObjectOrNull());
AutoSaveExceptionState as(cx); AutoSaveExceptionState as(cx);
bool ok = false; bool ok = false;
fun = JSD_GetValueFunction(jsdc, jsdval); fun = JSD_GetValueFunction(jsdc, jsdval);
@ -185,7 +185,7 @@ jsd_GetValueString(JSDContext* jsdc, JSDValue* jsdval)
} }
/* Objects call JS_ValueToString in their own compartment. */ /* 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); JSAutoCompartment ac(cx, scopeObj);
AutoSaveExceptionState as(cx); AutoSaveExceptionState as(cx);
@ -216,7 +216,7 @@ jsd_GetValueFunctionId(JSDContext* jsdc, JSDValue* jsdval)
if(!jsdval->funName && jsd_IsValueFunction(jsdc, 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); AutoSaveExceptionState as(cx);
fun = JSD_GetValueFunction(jsdc, jsdval); fun = JSD_GetValueFunction(jsdc, jsdval);
if(!fun) if(!fun)
@ -367,7 +367,7 @@ static bool _buildProps(JSDContext* jsdc, JSDValue* jsdval)
if(JSVAL_IS_PRIMITIVE(jsdval->val)) if(JSVAL_IS_PRIMITIVE(jsdval->val))
return false; return false;
obj = JSVAL_TO_OBJECT(jsdval->val); obj = jsdval->val.toObjectOrNull();
JSAutoCompartment ac(cx, obj); JSAutoCompartment ac(cx, obj);
@ -505,7 +505,7 @@ jsd_GetValueProperty(JSDContext* jsdc, JSDValue* jsdval, JSString* nameStr)
if(!JS_ValueToId(cx, nameval, &nameid)) if(!JS_ValueToId(cx, nameval, &nameid))
return nullptr; return nullptr;
if(!(obj = JSVAL_TO_OBJECT(jsdval->val))) if(!(obj = jsdval->val.toObjectOrNull()))
return nullptr; return nullptr;
JS::Rooted<JSPropertyDescriptor> desc(cx); JS::Rooted<JSPropertyDescriptor> desc(cx);
@ -570,7 +570,7 @@ jsd_GetValueFunction(JSDContext* jsdc, JSDValue* jsdval)
if (JSVAL_IS_PRIMITIVE(jsdval->val)) if (JSVAL_IS_PRIMITIVE(jsdval->val))
return nullptr; return nullptr;
obj = js::UncheckedUnwrap(JSVAL_TO_OBJECT(jsdval->val)); obj = js::UncheckedUnwrap(jsdval->val.toObjectOrNull());
JSAutoCompartment ac(cx, obj); JSAutoCompartment ac(cx, obj);
JS::RootedValue funval(cx, JS::ObjectValue(*obj)); JS::RootedValue funval(cx, JS::ObjectValue(*obj));
fun = JS_ValueToFunction(cx, funval); fun = JS_ValueToFunction(cx, funval);
@ -590,7 +590,7 @@ jsd_GetValuePrototype(JSDContext* jsdc, JSDValue* jsdval)
SET_BIT_FLAG(jsdval->flags, GOT_PROTO); SET_BIT_FLAG(jsdval->flags, GOT_PROTO);
if(JSVAL_IS_PRIMITIVE(jsdval->val)) if(JSVAL_IS_PRIMITIVE(jsdval->val))
return nullptr; return nullptr;
obj = JSVAL_TO_OBJECT(jsdval->val); obj = jsdval->val.toObjectOrNull();
if(!JS_GetPrototype(cx, obj, &proto)) if(!JS_GetPrototype(cx, obj, &proto))
return nullptr; return nullptr;
if(!proto) if(!proto)
@ -614,7 +614,7 @@ jsd_GetValueParent(JSDContext* jsdc, JSDValue* jsdval)
SET_BIT_FLAG(jsdval->flags, GOT_PARENT); SET_BIT_FLAG(jsdval->flags, GOT_PARENT);
if(JSVAL_IS_PRIMITIVE(jsdval->val)) if(JSVAL_IS_PRIMITIVE(jsdval->val))
return nullptr; return nullptr;
obj = JSVAL_TO_OBJECT(jsdval->val); obj = jsdval->val.toObjectOrNull();
{ {
JSAutoCompartment ac(cx, obj); JSAutoCompartment ac(cx, obj);
parent = JS_GetParentOrScopeChain(cx, obj); parent = JS_GetParentOrScopeChain(cx, obj);
@ -641,7 +641,7 @@ jsd_GetValueConstructor(JSDContext* jsdc, JSDValue* jsdval)
SET_BIT_FLAG(jsdval->flags, GOT_CTOR); SET_BIT_FLAG(jsdval->flags, GOT_CTOR);
if(JSVAL_IS_PRIMITIVE(jsdval->val)) if(JSVAL_IS_PRIMITIVE(jsdval->val))
return nullptr; return nullptr;
obj = JSVAL_TO_OBJECT(jsdval->val); obj = jsdval->val.toObjectOrNull();
if(!JS_GetPrototype(cx, obj, &proto)) if(!JS_GetPrototype(cx, obj, &proto))
return nullptr; return nullptr;
if(!proto) if(!proto)
@ -665,7 +665,7 @@ jsd_GetValueClassName(JSDContext* jsdc, JSDValue* jsdval)
jsval val = jsdval->val; jsval val = jsdval->val;
if(!jsdval->className && !JSVAL_IS_PRIMITIVE(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; AutoSafeJSContext cx;
JSAutoCompartment ac(cx, obj); JSAutoCompartment ac(cx, obj);
jsdval->className = JS_GetDebugClassName(obj); jsdval->className = JS_GetDebugClassName(obj);
@ -685,7 +685,7 @@ jsd_GetScriptForValue(JSDContext* jsdc, JSDValue* jsdval)
return nullptr; return nullptr;
{ {
JSAutoCompartment ac(cx, JSVAL_TO_OBJECT(val)); JSAutoCompartment ac(cx, val.toObjectOrNull());
AutoSaveExceptionState as(cx); AutoSaveExceptionState as(cx);
JS::RootedFunction fun(cx, JSD_GetValueFunction(jsdc, jsdval)); JS::RootedFunction fun(cx, JSD_GetValueFunction(jsdc, jsdval));
if (fun) if (fun)

View File

@ -388,7 +388,7 @@ CallArgsFromSp(unsigned argc, Value *sp)
* take a const JS::CallArgs&. * 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 * Note: if this method returns null, an error has occurred and must be

View File

@ -916,7 +916,6 @@ CanonicalizeNaN(double d)
* provide similar functionality. But there are a few key differences. One * provide similar functionality. But there are a few key differences. One
* is that JS::Value gives null a separate type. Thus * is that JS::Value gives null a separate type. Thus
* *
* JSVAL_IS_OBJECT(v) === v.isObjectOrNull()
* !JSVAL_IS_PRIMITIVE(v) === v.isObject() * !JSVAL_IS_PRIMITIVE(v) === v.isObject()
* *
* Also, to help prevent mistakenly boxing a nullable JSObject* as an object, * 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)); 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 static inline jsval
OBJECT_TO_JSVAL(JSObject *obj) OBJECT_TO_JSVAL(JSObject *obj)
{ {

View File

@ -1308,7 +1308,7 @@ static bool GetObjectProperty(JSContext *cx, HandleObject obj,
return false; return false;
} }
result.set(JSVAL_TO_OBJECT(val)); result.set(val.toObjectOrNull());
return true; return true;
} }
@ -1616,7 +1616,7 @@ jsvalToInteger(JSContext* cx, jsval val, IntegerType* result)
return ConvertExact(d, result); return ConvertExact(d, result);
} }
if (!JSVAL_IS_PRIMITIVE(val)) { if (!JSVAL_IS_PRIMITIVE(val)) {
JSObject* obj = JSVAL_TO_OBJECT(val); JSObject* obj = val.toObjectOrNull();
if (CData::IsCData(obj)) { if (CData::IsCData(obj)) {
JSObject* typeObj = CData::GetCType(obj); JSObject* typeObj = CData::GetCType(obj);
void* data = CData::GetData(obj); void* data = CData::GetData(obj);
@ -1705,7 +1705,7 @@ jsvalToFloat(JSContext *cx, jsval val, FloatType* result)
return true; return true;
} }
if (!JSVAL_IS_PRIMITIVE(val)) { if (!JSVAL_IS_PRIMITIVE(val)) {
JSObject* obj = JSVAL_TO_OBJECT(val); JSObject* obj = val.toObjectOrNull();
if (CData::IsCData(obj)) { if (CData::IsCData(obj)) {
JSObject* typeObj = CData::GetCType(obj); JSObject* typeObj = CData::GetCType(obj);
void* data = CData::GetData(obj); void* data = CData::GetData(obj);
@ -1829,7 +1829,7 @@ jsvalToBigInteger(JSContext* cx,
} }
if (!JSVAL_IS_PRIMITIVE(val)) { if (!JSVAL_IS_PRIMITIVE(val)) {
// Allow conversion from an Int64 or UInt64 object directly. // Allow conversion from an Int64 or UInt64 object directly.
JSObject* obj = JSVAL_TO_OBJECT(val); JSObject* obj = val.toObjectOrNull();
if (UInt64::IsUInt64(obj)) { if (UInt64::IsUInt64(obj)) {
// Make sure the integer fits in IntegerType. // Make sure the integer fits in IntegerType.
@ -1952,7 +1952,7 @@ jsvalToIntegerExplicit(jsval val, IntegerType* result)
} }
if (!JSVAL_IS_PRIMITIVE(val)) { if (!JSVAL_IS_PRIMITIVE(val)) {
// Convert Int64 and UInt64 values by C-style cast. // Convert Int64 and UInt64 values by C-style cast.
JSObject* obj = JSVAL_TO_OBJECT(val); JSObject* obj = val.toObjectOrNull();
if (Int64::IsInt64(obj)) { if (Int64::IsInt64(obj)) {
int64_t i = Int64Base::GetInt(obj); int64_t i = Int64Base::GetInt(obj);
*result = IntegerType(i); *result = IntegerType(i);
@ -1996,7 +1996,7 @@ jsvalToPtrExplicit(JSContext* cx, jsval val, uintptr_t* result)
return double(*result) == d; return double(*result) == d;
} }
if (!JSVAL_IS_PRIMITIVE(val)) { if (!JSVAL_IS_PRIMITIVE(val)) {
JSObject* obj = JSVAL_TO_OBJECT(val); JSObject* obj = val.toObjectOrNull();
if (Int64::IsInt64(obj)) { if (Int64::IsInt64(obj)) {
int64_t i = Int64Base::GetInt(obj); int64_t i = Int64Base::GetInt(obj);
intptr_t p = intptr_t(i); intptr_t p = intptr_t(i);
@ -2243,7 +2243,7 @@ ImplicitConvert(JSContext* cx,
JSObject* sourceType = nullptr; JSObject* sourceType = nullptr;
RootedObject valObj(cx, nullptr); RootedObject valObj(cx, nullptr);
if (!JSVAL_IS_PRIMITIVE(val)) { if (!JSVAL_IS_PRIMITIVE(val)) {
valObj = JSVAL_TO_OBJECT(val); valObj = val.toObjectOrNull();
if (CData::IsCData(valObj)) { if (CData::IsCData(valObj)) {
sourceData = valObj; sourceData = valObj;
sourceType = CData::GetCType(sourceData); 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. // Get the requested ctypes.{Pointer,Array,Struct,Function}Type.prototype.
jsval result = JS_GetReservedSlot(proto, slot); jsval result = JS_GetReservedSlot(proto, slot);
JS_ASSERT(!JSVAL_IS_PRIMITIVE(result)); JS_ASSERT(!JSVAL_IS_PRIMITIVE(result));
return JSVAL_TO_OBJECT(result); return result.toObjectOrNull();
} }
bool bool
@ -4639,7 +4639,7 @@ ExtractStructField(JSContext* cx, jsval val, JSObject** typeObj)
return nullptr; return nullptr;
} }
RootedObject obj(cx, JSVAL_TO_OBJECT(val)); RootedObject obj(cx, val.toObjectOrNull());
RootedObject iter(cx, JS_NewPropertyIterator(cx, obj)); RootedObject iter(cx, JS_NewPropertyIterator(cx, obj));
if (!iter) if (!iter)
return nullptr; return nullptr;
@ -5003,7 +5003,7 @@ StructType::Define(JSContext* cx, unsigned argc, jsval* vp)
JS_ReportError(cx, "argument must be an array"); JS_ReportError(cx, "argument must be an array");
return false; return false;
} }
RootedObject arr(cx, JSVAL_TO_OBJECT(arg)); RootedObject arr(cx, arg.toObjectOrNull());
if (!JS_IsArrayObject(cx, arr)) { if (!JS_IsArrayObject(cx, arr)) {
JS_ReportError(cx, "argument must be an array"); JS_ReportError(cx, "argument must be an array");
return false; return false;
@ -5314,7 +5314,7 @@ GetABI(JSContext* cx, jsval abiType, ffi_abi* result)
if (JSVAL_IS_PRIMITIVE(abiType)) if (JSVAL_IS_PRIMITIVE(abiType))
return false; 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 // determine the ABI from the subset of those available on the
// given platform. ABI_DEFAULT specifies the default // given platform. ABI_DEFAULT specifies the default
@ -5343,13 +5343,12 @@ GetABI(JSContext* cx, jsval abiType, ffi_abi* result)
static JSObject* static JSObject*
PrepareType(JSContext* cx, jsval type) PrepareType(JSContext* cx, jsval type)
{ {
if (JSVAL_IS_PRIMITIVE(type) || if (JSVAL_IS_PRIMITIVE(type) || !CType::IsCType(type.toObjectOrNull())) {
!CType::IsCType(JSVAL_TO_OBJECT(type))) {
JS_ReportError(cx, "not a ctypes type"); JS_ReportError(cx, "not a ctypes type");
return nullptr; return nullptr;
} }
JSObject* result = JSVAL_TO_OBJECT(type); JSObject* result = type.toObjectOrNull();
TypeCode typeCode = CType::GetTypeCode(result); TypeCode typeCode = CType::GetTypeCode(result);
if (typeCode == TYPE_array) { if (typeCode == TYPE_array) {
@ -5380,13 +5379,12 @@ PrepareType(JSContext* cx, jsval type)
static JSObject* static JSObject*
PrepareReturnType(JSContext* cx, jsval type) PrepareReturnType(JSContext* cx, jsval type)
{ {
if (JSVAL_IS_PRIMITIVE(type) || if (JSVAL_IS_PRIMITIVE(type) || !CType::IsCType(type.toObjectOrNull())) {
!CType::IsCType(JSVAL_TO_OBJECT(type))) {
JS_ReportError(cx, "not a ctypes type"); JS_ReportError(cx, "not a ctypes type");
return nullptr; return nullptr;
} }
JSObject* result = JSVAL_TO_OBJECT(type); JSObject* result = type.toObjectOrNull();
TypeCode typeCode = CType::GetTypeCode(result); TypeCode typeCode = CType::GetTypeCode(result);
// Arrays and functions can never be return types. // Arrays and functions can never be return types.
@ -5524,7 +5522,7 @@ NewFunctionInfo(JSContext* cx,
JS_ReportError(cx, "Invalid ABI specification"); JS_ReportError(cx, "Invalid ABI specification");
return nullptr; return nullptr;
} }
fninfo->mABI = JSVAL_TO_OBJECT(abiType); fninfo->mABI = abiType.toObjectOrNull();
// prepare the result type // prepare the result type
fninfo->mReturnType = PrepareReturnType(cx, returnType); fninfo->mReturnType = PrepareReturnType(cx, returnType);
@ -6297,7 +6295,7 @@ CData::Create(JSContext* cx,
jsval slot = JS_GetReservedSlot(typeObj, SLOT_PROTO); jsval slot = JS_GetReservedSlot(typeObj, SLOT_PROTO);
JS_ASSERT(!JSVAL_IS_PRIMITIVE(slot)); JS_ASSERT(!JSVAL_IS_PRIMITIVE(slot));
RootedObject proto(cx, JSVAL_TO_OBJECT(slot)); RootedObject proto(cx, slot.toObjectOrNull());
RootedObject parent(cx, JS_GetParent(typeObj)); RootedObject parent(cx, JS_GetParent(typeObj));
JS_ASSERT(parent); JS_ASSERT(parent);
@ -6375,7 +6373,7 @@ CData::GetCType(JSObject* dataObj)
JS_ASSERT(CData::IsCData(dataObj)); JS_ASSERT(CData::IsCData(dataObj));
jsval slot = JS_GetReservedSlot(dataObj, SLOT_CTYPE); jsval slot = JS_GetReservedSlot(dataObj, SLOT_CTYPE);
JSObject* typeObj = JSVAL_TO_OBJECT(slot); JSObject* typeObj = slot.toObjectOrNull();
JS_ASSERT(CType::IsCType(typeObj)); JS_ASSERT(CType::IsCType(typeObj));
return typeObj; return typeObj;
} }
@ -6746,7 +6744,7 @@ CDataFinalizer::Methods::ToSource(JSContext *cx, unsigned argc, jsval *vp)
return false; return false;
} }
RootedObject typeObj(cx, JSVAL_TO_OBJECT(valCodePtrType)); RootedObject typeObj(cx, valCodePtrType.toObjectOrNull());
JSString *srcDispose = CData::GetSourceString(cx, typeObj, &(p->code)); JSString *srcDispose = CData::GetSourceString(cx, typeObj, &(p->code));
if (!srcDispose) { if (!srcDispose) {
return false; return false;
@ -6817,7 +6815,7 @@ CDataFinalizer::GetCType(JSContext *cx, JSObject *obj)
return nullptr; return nullptr;
} }
return JSVAL_TO_OBJECT(valData); return valData.toObjectOrNull();
} }
JSObject* JSObject*
@ -6839,7 +6837,7 @@ CDataFinalizer::GetCData(JSContext *cx, JSObject *obj)
JS_ReportError(cx, "Empty CDataFinalizer"); JS_ReportError(cx, "Empty CDataFinalizer");
return nullptr; return nullptr;
} }
return JSVAL_TO_OBJECT(val); return val.toObjectOrNull();
} }
bool bool
@ -7408,7 +7406,7 @@ Int64::Construct(JSContext* cx,
RootedValue slot(cx); RootedValue slot(cx);
RootedObject callee(cx, &args.callee()); RootedObject callee(cx, &args.callee());
ASSERT_OK(JS_GetProperty(cx, callee, "prototype", &slot)); 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); JS_ASSERT(JS_GetClass(proto) == &sInt64ProtoClass);
JSObject* result = Int64Base::Construct(cx, proto, i, false); JSObject* result = Int64Base::Construct(cx, proto, i, false);

View File

@ -53,7 +53,7 @@ BEGIN_TEST(testAddPropertyHook)
obj = JS_NewObject(cx, &AddPropertyClass, JS::NullPtr(), JS::NullPtr()); obj = JS_NewObject(cx, &AddPropertyClass, JS::NullPtr(), JS::NullPtr());
CHECK(obj); CHECK(obj);
JS::RootedValue vobj(cx, OBJECT_TO_JSVAL(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, CHECK(JS_DefineElement(cx, arrObj, i, vobj,
JS_PropertyStub, JS_StrictPropertyStub, JS_PropertyStub, JS_StrictPropertyStub,
JSPROP_ENUMERATE)); JSPROP_ENUMERATE));

View File

@ -83,7 +83,7 @@ ExhaustiveTest(const char funcode[])
EVAL(funcode, &v); EVAL(funcode, &v);
EVAL(CALL_CODES[ArgCount], &v); EVAL(CALL_CODES[ArgCount], &v);
Rooted<ArgumentsObject*> argsobj(cx, &JSVAL_TO_OBJECT(v)->as<ArgumentsObject>()); Rooted<ArgumentsObject*> argsobj(cx, &v.toObjectOrNull()->as<ArgumentsObject>());
JS::AutoValueArray<MAX_ELEMS> elems(cx); JS::AutoValueArray<MAX_ELEMS> elems(cx);

View File

@ -14,8 +14,8 @@ BEGIN_TEST(test_BindCallable)
EVAL("(function() { return this.somename; })", &func); EVAL("(function() { return this.somename; })", &func);
CHECK(func.isObject()); CHECK(func.isObject());
JS::RootedObject funcObj(cx, JSVAL_TO_OBJECT(func)); JS::RootedObject funcObj(cx, func.toObjectOrNull());
JS::RootedObject vObj(cx, JSVAL_TO_OBJECT(v)); JS::RootedObject vObj(cx, v.toObjectOrNull());
JSObject* newCallable = JS_BindCallable(cx, funcObj, vObj); JSObject* newCallable = JS_BindCallable(cx, funcObj, vObj);
CHECK(newCallable); CHECK(newCallable);

View File

@ -15,7 +15,7 @@ BEGIN_TEST(testConservativeGC)
EVAL("({foo: 'bar'});", &v2); EVAL("({foo: 'bar'});", &v2);
CHECK(v2.isObject()); CHECK(v2.isObject());
char objCopy[sizeof(JSObject)]; char objCopy[sizeof(JSObject)];
js_memcpy(&objCopy, JSVAL_TO_OBJECT(v2), sizeof(JSObject)); js_memcpy(&objCopy, v2.toObjectOrNull(), sizeof(JSObject));
JS::RootedValue v3(cx); JS::RootedValue v3(cx);
EVAL("String(Math.PI);", &v3); EVAL("String(Math.PI);", &v3);
@ -26,7 +26,7 @@ BEGIN_TEST(testConservativeGC)
JS::RootedValue tmp(cx); JS::RootedValue tmp(cx);
EVAL("({foo2: 'bar2'});", &tmp); EVAL("({foo2: 'bar2'});", &tmp);
CHECK(tmp.isObject()); CHECK(tmp.isObject());
JS::RootedObject obj2(cx, JSVAL_TO_OBJECT(tmp)); JS::RootedObject obj2(cx, tmp.toObjectOrNull());
char obj2Copy[sizeof(JSObject)]; char obj2Copy[sizeof(JSObject)];
js_memcpy(&obj2Copy, obj2, sizeof(JSObject)); js_memcpy(&obj2Copy, obj2, sizeof(JSObject));
@ -47,7 +47,7 @@ BEGIN_TEST(testConservativeGC)
JS_GC(rt); JS_GC(rt);
checkObjectFields((JSObject *)objCopy, JSVAL_TO_OBJECT(v2)); checkObjectFields((JSObject *)objCopy, v2.toObjectOrNull());
CHECK(!memcmp(strCopy, v3.toString(), sizeof(strCopy))); CHECK(!memcmp(strCopy, v3.toString(), sizeof(strCopy)));
checkObjectFields((JSObject *)obj2Copy, obj2); checkObjectFields((JSObject *)obj2Copy, obj2);

View File

@ -11,7 +11,7 @@ BEGIN_TEST(testDeepFreeze_bug535703)
{ {
JS::RootedValue v(cx); JS::RootedValue v(cx);
EVAL("var x = {}; x;", &v); 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 CHECK(JS_DeepFreezeObject(cx, obj)); // don't crash
EVAL("Object.isFrozen(x)", &v); EVAL("Object.isFrozen(x)", &v);
CHECK_SAME(v, JSVAL_TRUE); CHECK_SAME(v, JSVAL_TRUE);
@ -28,7 +28,7 @@ BEGIN_TEST(testDeepFreeze_deep)
EVAL("a", &a); EVAL("a", &a);
EVAL("o", &o); EVAL("o", &o);
JS::RootedObject aobj(cx, JSVAL_TO_OBJECT(a)); JS::RootedObject aobj(cx, a.toObjectOrNull());
CHECK(JS_DeepFreezeObject(cx, aobj)); CHECK(JS_DeepFreezeObject(cx, aobj));
JS::RootedValue b(cx); JS::RootedValue b(cx);
@ -47,7 +47,7 @@ BEGIN_TEST(testDeepFreeze_loop)
EVAL("x", &x); EVAL("x", &x);
EVAL("y", &y); EVAL("y", &y);
JS::RootedObject xobj(cx, JSVAL_TO_OBJECT(x)); JS::RootedObject xobj(cx, x.toObjectOrNull());
CHECK(JS_DeepFreezeObject(cx, xobj)); CHECK(JS_DeepFreezeObject(cx, xobj));
JS::RootedValue b(cx); JS::RootedValue b(cx);

View File

@ -32,7 +32,7 @@ BEGIN_TEST(testDefineGetterSetterNonEnumerable)
JS::RootedObject funSetObj(cx, JS_GetFunctionObject(funSet)); JS::RootedObject funSetObj(cx, JS_GetFunctionObject(funSet));
JS::RootedValue vset(cx, OBJECT_TO_JSVAL(funSetObj)); 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, CHECK(JS_DefineProperty(cx, vObject, PROPERTY_NAME,
JS::UndefinedHandleValue, JS::UndefinedHandleValue,
JSPROP_GETTER | JSPROP_SETTER | JSPROP_ENUMERATE, JSPROP_GETTER | JSPROP_SETTER | JSPROP_ENUMERATE,

View File

@ -15,7 +15,7 @@ BEGIN_TEST(testDefineProperty_bug564344)
"x.p(); // brand x's scope\n" "x.p(); // brand x's scope\n"
"x;", &x); "x;", &x);
JS::RootedObject obj(cx, JSVAL_TO_OBJECT(x)); JS::RootedObject obj(cx, x.toObjectOrNull());
for (int i = 0; i < 2; i++) for (int i = 0; i < 2; i++)
CHECK(JS_DefineProperty(cx, obj, "q", JS::UndefinedHandleValue, JSPROP_SHARED)); CHECK(JS_DefineProperty(cx, obj, "q", JS::UndefinedHandleValue, JSPROP_SHARED));
return true; return true;

View File

@ -12,7 +12,7 @@ BEGIN_TEST(testFunctionProperties)
JS::RootedValue x(cx); JS::RootedValue x(cx);
EVAL("(function f() {})", &x); EVAL("(function f() {})", &x);
JS::RootedObject obj(cx, JSVAL_TO_OBJECT(x)); JS::RootedObject obj(cx, x.toObjectOrNull());
JS::RootedValue y(cx); JS::RootedValue y(cx);
CHECK(JS_GetProperty(cx, obj, "arguments", &y)); CHECK(JS_GetProperty(cx, obj, "arguments", &y));

View File

@ -23,7 +23,7 @@ BEGIN_TEST(testLookup_bug522590)
// Now make x.f a method. // Now make x.f a method.
EVAL("mkobj()", &x); 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. // This lookup must not return an internal function object.
JS::RootedValue r(cx); JS::RootedValue r(cx);

View File

@ -128,7 +128,7 @@ bool TestCloneObject()
CHECK(cloned_buffer.write(cx, v1, callbacks, nullptr)); CHECK(cloned_buffer.write(cx, v1, callbacks, nullptr));
JS::RootedValue v2(cx); JS::RootedValue v2(cx);
CHECK(cloned_buffer.read(cx, &v2, callbacks, nullptr)); 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)); CHECK(VerifyObject(obj2, 8, 12, false));
return true; return true;
@ -164,7 +164,7 @@ bool TestTransferObject()
CHECK(cloned_buffer.write(cx, v1, transferable, callbacks, nullptr)); CHECK(cloned_buffer.write(cx, v1, transferable, callbacks, nullptr));
JS::RootedValue v2(cx); JS::RootedValue v2(cx);
CHECK(cloned_buffer.read(cx, &v2, callbacks, nullptr)); 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(VerifyObject(obj2, 8, 12, true));
CHECK(isNeutered(obj1)); CHECK(isNeutered(obj1));

View File

@ -60,7 +60,7 @@ BEGIN_TEST(testNewObject_1)
JS::RootedValue v(cx); JS::RootedValue v(cx);
EVAL("Array", &v); EVAL("Array", &v);
JS::RootedObject Array(cx, JSVAL_TO_OBJECT(v)); JS::RootedObject Array(cx, v.toObjectOrNull());
// With no arguments. // With no arguments.
JS::RootedObject obj(cx, JS_New(cx, Array, JS::HandleValueArray::empty())); JS::RootedObject obj(cx, JS_New(cx, Array, JS::HandleValueArray::empty()));

View File

@ -104,14 +104,14 @@ BEGIN_TEST(testParseJSON_success)
CHECK(Parse(cx, "[]", &v)); CHECK(Parse(cx, "[]", &v));
CHECK(!JSVAL_IS_PRIMITIVE(v)); CHECK(!JSVAL_IS_PRIMITIVE(v));
obj = JSVAL_TO_OBJECT(v); obj = v.toObjectOrNull();
CHECK(JS_IsArrayObject(cx, obj)); CHECK(JS_IsArrayObject(cx, obj));
CHECK(JS_GetProperty(cx, obj, "length", &v2)); CHECK(JS_GetProperty(cx, obj, "length", &v2));
CHECK_SAME(v2, JSVAL_ZERO); CHECK_SAME(v2, JSVAL_ZERO);
CHECK(Parse(cx, "[1]", &v)); CHECK(Parse(cx, "[1]", &v));
CHECK(!JSVAL_IS_PRIMITIVE(v)); CHECK(!JSVAL_IS_PRIMITIVE(v));
obj = JSVAL_TO_OBJECT(v); obj = v.toObjectOrNull();
CHECK(JS_IsArrayObject(cx, obj)); CHECK(JS_IsArrayObject(cx, obj));
CHECK(JS_GetProperty(cx, obj, "0", &v2)); CHECK(JS_GetProperty(cx, obj, "0", &v2));
CHECK_SAME(v2, JSVAL_ONE); CHECK_SAME(v2, JSVAL_ONE);
@ -122,12 +122,12 @@ BEGIN_TEST(testParseJSON_success)
// Objects // Objects
CHECK(Parse(cx, "{}", &v)); CHECK(Parse(cx, "{}", &v));
CHECK(!JSVAL_IS_PRIMITIVE(v)); CHECK(!JSVAL_IS_PRIMITIVE(v));
obj = JSVAL_TO_OBJECT(v); obj = v.toObjectOrNull();
CHECK(!JS_IsArrayObject(cx, obj)); CHECK(!JS_IsArrayObject(cx, obj));
CHECK(Parse(cx, "{ \"f\": 17 }", &v)); CHECK(Parse(cx, "{ \"f\": 17 }", &v));
CHECK(!JSVAL_IS_PRIMITIVE(v)); CHECK(!JSVAL_IS_PRIMITIVE(v));
obj = JSVAL_TO_OBJECT(v); obj = v.toObjectOrNull();
CHECK(!JS_IsArrayObject(cx, obj)); CHECK(!JS_IsArrayObject(cx, obj));
CHECK(JS_GetProperty(cx, obj, "f", &v2)); CHECK(JS_GetProperty(cx, obj, "f", &v2));
CHECK_SAME(v2, INT_TO_JSVAL(17)); CHECK_SAME(v2, INT_TO_JSVAL(17));

View File

@ -9,11 +9,11 @@ BEGIN_TEST(testObjectIsRegExp)
JS::RootedValue val(cx); JS::RootedValue val(cx);
EVAL("new Object", &val); EVAL("new Object", &val);
JS::RootedObject obj(cx, JSVAL_TO_OBJECT(val)); JS::RootedObject obj(cx, val.toObjectOrNull());
CHECK(!JS_ObjectIsRegExp(cx, obj)); CHECK(!JS_ObjectIsRegExp(cx, obj));
EVAL("/foopy/", &val); EVAL("/foopy/", &val);
obj = JSVAL_TO_OBJECT(val); obj = val.toObjectOrNull();
CHECK(JS_ObjectIsRegExp(cx, obj)); CHECK(JS_ObjectIsRegExp(cx, obj));
return true; return true;
@ -26,15 +26,15 @@ BEGIN_TEST(testGetRegExpFlags)
JS::RootedObject obj(cx); JS::RootedObject obj(cx);
EVAL("/foopy/", &val); EVAL("/foopy/", &val);
obj = JSVAL_TO_OBJECT(val); obj = val.toObjectOrNull();
CHECK_EQUAL(JS_GetRegExpFlags(cx, obj), 0); CHECK_EQUAL(JS_GetRegExpFlags(cx, obj), 0);
EVAL("/foopy/g", &val); EVAL("/foopy/g", &val);
obj = JSVAL_TO_OBJECT(val); obj = val.toObjectOrNull();
CHECK_EQUAL(JS_GetRegExpFlags(cx, obj), JSREG_GLOB); CHECK_EQUAL(JS_GetRegExpFlags(cx, obj), JSREG_GLOB);
EVAL("/foopy/gi", &val); EVAL("/foopy/gi", &val);
obj = JSVAL_TO_OBJECT(val); obj = val.toObjectOrNull();
CHECK_EQUAL(JS_GetRegExpFlags(cx, obj), (JSREG_FOLD | JSREG_GLOB)); CHECK_EQUAL(JS_GetRegExpFlags(cx, obj), (JSREG_FOLD | JSREG_GLOB));
return true; return true;
@ -47,7 +47,7 @@ BEGIN_TEST(testGetRegExpSource)
JS::RootedObject obj(cx); JS::RootedObject obj(cx);
EVAL("/foopy/", &val); EVAL("/foopy/", &val);
obj = JSVAL_TO_OBJECT(val); obj = val.toObjectOrNull();
JSString *source = JS_GetRegExpSource(cx, obj); JSString *source = JS_GetRegExpSource(cx, obj);
CHECK(JS_FlatStringEqualsAscii(JS_ASSERT_STRING_IS_FLAT(source), "foopy")); CHECK(JS_FlatStringEqualsAscii(JS_ASSERT_STRING_IS_FLAT(source), "foopy"));

View File

@ -16,7 +16,7 @@ BEGIN_TEST(testRegExpInstanceProperties)
jsval regexpProtoVal; jsval regexpProtoVal;
EVAL("RegExp.prototype", &regexpProtoVal); EVAL("RegExp.prototype", &regexpProtoVal);
JSObject *regexpProto = JSVAL_TO_OBJECT(regexpProtoVal); JSObject *regexpProto = regexpProtoVal.toObjectOrNull();
if (!helper(regexpProto)) if (!helper(regexpProto))
return false; return false;
@ -27,7 +27,7 @@ BEGIN_TEST(testRegExpInstanceProperties)
jsval regexp; jsval regexp;
EVAL("/foopy/", &regexp); EVAL("/foopy/", &regexp);
JSObject *robj = JSVAL_TO_OBJECT(regexp); JSObject *robj = regexp.toObjectOrNull();
CHECK(robj->lastProperty()); CHECK(robj->lastProperty());
CHECK_EQUAL(robj->compartment()->initialRegExpShape, robj->lastProperty()); CHECK_EQUAL(robj->compartment()->initialRegExpShape, robj->lastProperty());

View File

@ -758,7 +758,7 @@ js_ReportUncaughtException(JSContext *cx)
if (JSVAL_IS_PRIMITIVE(exn)) { if (JSVAL_IS_PRIMITIVE(exn)) {
exnObject = nullptr; exnObject = nullptr;
} else { } else {
exnObject = JSVAL_TO_OBJECT(exn); exnObject = exn.toObjectOrNull();
} }
JS_ClearPendingException(cx); JS_ClearPendingException(cx);

View File

@ -823,7 +823,7 @@ ToDisassemblySource(JSContext *cx, HandleValue v, JSAutoByteString *bytes)
} }
if (!JSVAL_IS_PRIMITIVE(v)) { if (!JSVAL_IS_PRIMITIVE(v)) {
JSObject *obj = JSVAL_TO_OBJECT(v); JSObject *obj = v.toObjectOrNull();
if (obj->is<StaticBlockObject>()) { if (obj->is<StaticBlockObject>()) {
Rooted<StaticBlockObject*> block(cx, &obj->as<StaticBlockObject>()); Rooted<StaticBlockObject*> block(cx, &obj->as<StaticBlockObject>());
char *source = JS_sprintf_append(nullptr, "depth %d {", block->localOffset()); char *source = JS_sprintf_append(nullptr, "depth %d {", block->localOffset());

View File

@ -267,7 +267,7 @@ ExtractPerfMeasurement(jsval wrapper)
// This is what JS_GetInstancePrivate does internally. We can't // This is what JS_GetInstancePrivate does internally. We can't
// call JS_anything from here, because we don't have a JSContext. // 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)) if (obj->getClass() != js::Valueify(&pm_class))
return 0; return 0;

View File

@ -3071,7 +3071,7 @@ static bool
resolver_enumerate(JSContext *cx, HandleObject obj) resolver_enumerate(JSContext *cx, HandleObject obj)
{ {
jsval v = JS_GetReservedSlot(obj, 0); 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)); AutoIdArray ida(cx, JS_Enumerate(cx, referent));
bool ok = !!ida; bool ok = !!ida;
@ -4201,7 +4201,7 @@ Wrap(JSContext *cx, unsigned argc, jsval *vp)
return true; return true;
} }
RootedObject obj(cx, JSVAL_TO_OBJECT(v)); RootedObject obj(cx, v.toObjectOrNull());
JSObject *wrapped = Wrapper::New(cx, obj, &obj->global(), JSObject *wrapped = Wrapper::New(cx, obj, &obj->global(),
&Wrapper::singleton); &Wrapper::singleton);
if (!wrapped) if (!wrapped)
@ -4983,7 +4983,7 @@ Help(JSContext *cx, unsigned argc, jsval *vp)
JS_ReportError(cx, "primitive arg"); JS_ReportError(cx, "primitive arg");
return false; return false;
} }
obj = JSVAL_TO_OBJECT(v); obj = v.toObjectOrNull();
if (!PrintHelp(cx, obj)) if (!PrintHelp(cx, obj))
return false; return false;
} }

View File

@ -5,7 +5,7 @@
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
var BUGNUMBER = 457065; 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 actual = '';
var expect = ''; var expect = '';

View File

@ -5,7 +5,7 @@
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
var BUGNUMBER = 457065; 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 actual = '';
var expect = ''; var expect = '';

View File

@ -5,7 +5,7 @@
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
var BUGNUMBER = 457065; 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 actual = '';
var expect = ''; var expect = '';

View File

@ -45,7 +45,7 @@ function test()
// ===== // =====
(function(){ eval("for (x in ['', {}, '', {}]) { this; }" )})(); (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(){} )} for each (let x in ['', '', '']) { (new function(){} )}

View File

@ -2469,7 +2469,7 @@ nsXPCComponents_Constructor::CallOrConstruct(nsIXPConnectWrappedNative *wrapper,
return ThrowAndFail(NS_ERROR_XPC_BAD_CID, cx, _retval); return ThrowAndFail(NS_ERROR_XPC_BAD_CID, cx, _retval);
nsCOMPtr<nsIXPConnectWrappedNative> wn; nsCOMPtr<nsIXPConnectWrappedNative> wn;
if (NS_FAILED(xpc->GetWrappedNativeOfJSObject(cx, JSVAL_TO_OBJECT(val), if (NS_FAILED(xpc->GetWrappedNativeOfJSObject(cx, val.toObjectOrNull(),
getter_AddRefs(wn))) || !wn || getter_AddRefs(wn))) || !wn ||
!(cClassID = do_QueryWrappedNative(wn))) { !(cClassID = do_QueryWrappedNative(wn))) {
return ThrowAndFail(NS_ERROR_XPC_UNEXPECTED, cx, _retval); return ThrowAndFail(NS_ERROR_XPC_UNEXPECTED, cx, _retval);

View File

@ -1124,7 +1124,7 @@ XPCConvert::JSValToXPCException(MutableHandleValue s,
if (!JSVAL_IS_PRIMITIVE(s)) { if (!JSVAL_IS_PRIMITIVE(s)) {
// we have a JSObject // we have a JSObject
RootedObject obj(cx, JSVAL_TO_OBJECT(s)); RootedObject obj(cx, s.toObjectOrNull());
if (!obj) { if (!obj) {
NS_ERROR("when is an object not an object?"); NS_ERROR("when is an object not an object?");

View File

@ -645,7 +645,7 @@ GetIIDArg(uint32_t argc, const JS::Value& val, JSContext* cx)
if (argc) { if (argc) {
JSObject* iidobj; JSObject* iidobj;
if (JSVAL_IS_PRIMITIVE(val) || if (JSVAL_IS_PRIMITIVE(val) ||
!(iidobj = JSVAL_TO_OBJECT(val)) || !(iidobj = val.toObjectOrNull()) ||
!(iid = xpc_JSObjectToID(cx, iidobj))) { !(iid = xpc_JSObjectToID(cx, iidobj))) {
return nullptr; return nullptr;
} }

View File

@ -597,7 +597,7 @@ PropertyOpForwarder(JSContext *cx, unsigned argc, jsval *vp)
JS::RootedValue v(cx, js::GetFunctionNativeReserved(callee, 0)); JS::RootedValue v(cx, js::GetFunctionNativeReserved(callee, 0));
JSObject *ptrobj = JSVAL_TO_OBJECT(v); JSObject *ptrobj = v.toObjectOrNull();
Op *popp = static_cast<Op *>(JS_GetPrivate(ptrobj)); Op *popp = static_cast<Op *>(JS_GetPrivate(ptrobj));
v = js::GetFunctionNativeReserved(callee, 1); v = js::GetFunctionNativeReserved(callee, 1);

View File

@ -87,7 +87,7 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(XPCVariant)
JS::Value val = tmp->GetJSValPreserveColor(); JS::Value val = tmp->GetJSValPreserveColor();
if (val.isObjectOrNull()) { if (val.isObjectOrNull()) {
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mJSVal"); NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mJSVal");
cb.NoteJSChild(JSVAL_TO_OBJECT(val)); cb.NoteJSChild(val.toObjectOrNull());
} }
nsVariant::Traverse(tmp->mData, cb); nsVariant::Traverse(tmp->mData, cb);

View File

@ -1084,7 +1084,7 @@ nsXPCWrappedJSClass::CallMethod(nsXPCWrappedJS* wrapper, uint16_t methodIndex,
if (!ok) { if (!ok) {
goto pre_call_clean_up; goto pre_call_clean_up;
} }
thisObj = JSVAL_TO_OBJECT(v); thisObj = v.toObjectOrNull();
if (!JS_WrapObject(cx, &thisObj)) if (!JS_WrapObject(cx, &thisObj))
goto pre_call_clean_up; goto pre_call_clean_up;
} }

View File

@ -122,7 +122,7 @@ GetDoubleWrappedJSObject(XPCCallContext& ccx, XPCWrappedNative* wrapper)
RootedValue val(ccx); RootedValue val(ccx);
if (JS_GetPropertyById(ccx, mainObj, id, &val) && if (JS_GetPropertyById(ccx, mainObj, id, &val) &&
!JSVAL_IS_PRIMITIVE(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!"); MOZ_ASSERT(member->IsAttribute(), "way broken!");
propFlags |= JSPROP_GETTER | JSPROP_SHARED; propFlags |= JSPROP_GETTER | JSPROP_SHARED;
JSObject* funobj = JSVAL_TO_OBJECT(funval); JSObject* funobj = funval.toObjectOrNull();
JSPropertyOp getter = JS_DATA_TO_FUNC_PTR(JSPropertyOp, funobj); JSPropertyOp getter = JS_DATA_TO_FUNC_PTR(JSPropertyOp, funobj);
JSStrictPropertyOp setter; JSStrictPropertyOp setter;
if (member->IsWritableAttribute()) { if (member->IsWritableAttribute()) {

View File

@ -835,7 +835,7 @@ nsXPConnect::CreateSandbox(JSContext *cx, nsIPrincipal *principal,
"Bad return value from xpc_CreateSandboxObject()!"); "Bad return value from xpc_CreateSandboxObject()!");
if (NS_SUCCEEDED(rv) && !JSVAL_IS_PRIMITIVE(rval)) { 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_ENSURE_TRUE(*_retval, NS_ERROR_OUT_OF_MEMORY);
NS_ADDREF(*_retval); NS_ADDREF(*_retval);

View File

@ -563,7 +563,7 @@ def writeArgumentUnboxing(f, i, name, type, optional, rvdeclared,
f.write(" if (NS_FAILED(rv)) {\n") f.write(" if (NS_FAILED(rv)) {\n")
if isSetter: if isSetter:
assert(propIndex is not None) 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) propIndex)
else: else:
f.write(" xpc_qsThrowBadArg(cx, rv, vp, %d);\n" % i) 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") "cx, rv, vp);\n")
else: else:
f.write(" return xpc_qsThrowGetterSetterFailed(cx, rv, " + 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)) stringtable.stringIndex(member.name))
# Convert the return value. # Convert the return value.

View File

@ -96,7 +96,7 @@ InitAndSealCTypesClass(JSContext* cx, JS::Handle<JSObject*> global)
if (!JS_GetProperty(cx, global, "ctypes", &ctypes)) if (!JS_GetProperty(cx, global, "ctypes", &ctypes))
return false; 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 // Seal up Object, Function, Array and Error and their prototypes. (This
// single object instance is shared amongst everyone who imports the ctypes // single object instance is shared amongst everyone who imports the ctypes

View File

@ -271,7 +271,7 @@ GetJSValueAsURI(JSContext* aCtx,
nsCOMPtr<nsIXPConnect> xpc = mozilla::services::GetXPConnect(); nsCOMPtr<nsIXPConnect> xpc = mozilla::services::GetXPConnect();
nsCOMPtr<nsIXPConnectWrappedNative> wrappedObj; nsCOMPtr<nsIXPConnectWrappedNative> wrappedObj;
nsresult rv = xpc->GetWrappedNativeOfJSObject(aCtx, JSVAL_TO_OBJECT(aValue), nsresult rv = xpc->GetWrappedNativeOfJSObject(aCtx, aValue.toObjectOrNull(),
getter_AddRefs(wrappedObj)); getter_AddRefs(wrappedObj));
NS_ENSURE_SUCCESS(rv, nullptr); NS_ENSURE_SUCCESS(rv, nullptr);
nsCOMPtr<nsIURI> uri = do_QueryWrappedNative(wrappedObj); nsCOMPtr<nsIURI> uri = do_QueryWrappedNative(wrappedObj);
@ -2811,7 +2811,7 @@ History::UpdatePlaces(JS::Handle<JS::Value> aPlaceInfos,
bool rc = JS_GetProperty(aCtx, info, "visits", &visitsVal); bool rc = JS_GetProperty(aCtx, info, "visits", &visitsVal);
NS_ENSURE_TRUE(rc, NS_ERROR_UNEXPECTED); NS_ENSURE_TRUE(rc, NS_ERROR_UNEXPECTED);
if (!JSVAL_IS_PRIMITIVE(visitsVal)) { if (!JSVAL_IS_PRIMITIVE(visitsVal)) {
visits = JSVAL_TO_OBJECT(visitsVal); visits = visitsVal.toObjectOrNull();
NS_ENSURE_ARG(JS_IsArrayObject(aCtx, visits)); NS_ENSURE_ARG(JS_IsArrayObject(aCtx, visits));
} }
} }