From a29cc5e499260da077bcecfdaf344d381d89b3e4 Mon Sep 17 00:00:00 2001 From: Tom Schuster Date: Sat, 24 Jan 2015 16:38:08 +0100 Subject: [PATCH] Bug 1125356 - Introduce JS_NewPlainObject. r=Waldo --- js/src/builtin/Eval.cpp | 2 +- js/src/builtin/TestingFunctions.cpp | 4 ++-- js/src/ctypes/CTypes.cpp | 4 ++-- js/src/gdb/tests/test-JSObject.cpp | 2 +- js/src/gdb/tests/test-Root.cpp | 2 +- js/src/jsapi-tests/testAddPropertyPropcache.cpp | 2 +- .../testDefineGetterSetterNonEnumerable.cpp | 2 +- .../testDefinePropertyIgnoredAttributes.cpp | 2 +- js/src/jsapi-tests/testForOfIterator.cpp | 3 +-- js/src/jsapi-tests/testGCCellPtr.cpp | 2 +- js/src/jsapi-tests/testGCExactRooting.cpp | 4 ++-- js/src/jsapi-tests/testGCHeapPostBarriers.cpp | 2 +- js/src/jsapi-tests/testGCMarking.cpp | 2 +- js/src/jsapi-tests/testGCNursery.cpp | 16 ++++++++-------- js/src/jsapi-tests/testGCStoreBufferRemoval.cpp | 2 +- js/src/jsapi-tests/testIsInsideNursery.cpp | 2 +- js/src/jsapi-tests/testJSEvaluateScript.cpp | 2 +- js/src/jsapi-tests/testNewObject.cpp | 2 +- js/src/jsapi-tests/testSetProperty.cpp | 2 +- js/src/jsapi-tests/testStructuredClone.cpp | 2 +- js/src/jsapi-tests/testWeakMap.cpp | 4 ++-- js/src/jsapi.cpp | 10 ++++++++++ js/src/jsapi.h | 4 ++++ js/src/jsfriendapi.cpp | 2 +- js/src/shell/OSObject.cpp | 4 ++-- js/src/shell/js.cpp | 2 +- js/src/shell/jsheaptools.cpp | 2 +- 27 files changed, 51 insertions(+), 38 deletions(-) diff --git a/js/src/builtin/Eval.cpp b/js/src/builtin/Eval.cpp index 03b8c704504..49fbe49b796 100644 --- a/js/src/builtin/Eval.cpp +++ b/js/src/builtin/Eval.cpp @@ -511,7 +511,7 @@ js::ExecuteInGlobalAndReturnScope(JSContext *cx, HandleObject global, HandleScri Debugger::onNewScript(cx, script, global); } - RootedObject scope(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); + RootedObject scope(cx, JS_NewPlainObject(cx)); if (!scope) return false; diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp index 1014c12900c..2122f6e0e17 100644 --- a/js/src/builtin/TestingFunctions.cpp +++ b/js/src/builtin/TestingFunctions.cpp @@ -51,7 +51,7 @@ static bool GetBuildConfiguration(JSContext *cx, unsigned argc, jsval *vp) { CallArgs args = CallArgsFromVp(argc, vp); - RootedObject info(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); + RootedObject info(cx, JS_NewPlainObject(cx)); if (!info) return false; @@ -1425,7 +1425,7 @@ static bool GetJitCompilerOptions(JSContext *cx, unsigned argc, jsval *vp) { CallArgs args = CallArgsFromVp(argc, vp); - RootedObject info(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); + RootedObject info(cx, JS_NewPlainObject(cx)); if (!info) return false; diff --git a/js/src/ctypes/CTypes.cpp b/js/src/ctypes/CTypes.cpp index ecedba74b9f..7bd6922adde 100644 --- a/js/src/ctypes/CTypes.cpp +++ b/js/src/ctypes/CTypes.cpp @@ -935,7 +935,7 @@ InitCTypeClass(JSContext* cx, HandleObject parent) static JSObject* InitABIClass(JSContext* cx, JSObject* parent) { - RootedObject obj(cx, JS_NewObject(cx, nullptr, NullPtr(), NullPtr())); + RootedObject obj(cx, JS_NewPlainObject(cx)); if (!obj) return nullptr; @@ -4773,7 +4773,7 @@ AddFieldToArray(JSContext* cx, { RootedObject typeObj(cx, typeObj_); Rooted name(cx, name_); - RootedObject fieldObj(cx, JS_NewObject(cx, nullptr, NullPtr(), NullPtr())); + RootedObject fieldObj(cx, JS_NewPlainObject(cx)); if (!fieldObj) return false; diff --git a/js/src/gdb/tests/test-JSObject.cpp b/js/src/gdb/tests/test-JSObject.cpp index 8b48a8291fc..45a7f5cc935 100644 --- a/js/src/gdb/tests/test-JSObject.cpp +++ b/js/src/gdb/tests/test-JSObject.cpp @@ -3,7 +3,7 @@ FRAGMENT(JSObject, simple) { JS::Rooted glob(cx, JS::CurrentGlobalOrNull(cx)); - JS::Rooted plain(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); + JS::Rooted plain(cx, JS_NewPlainObject(cx)); JS::Rooted global(cx, JS::CurrentGlobalOrNull(cx)); JS::Rooted func(cx, (JSObject *) JS_NewFunction(cx, (JSNative) 1, 0, 0, global, "dys")); diff --git a/js/src/gdb/tests/test-Root.cpp b/js/src/gdb/tests/test-Root.cpp index 88c0149cca9..e2ba8bb935a 100644 --- a/js/src/gdb/tests/test-Root.cpp +++ b/js/src/gdb/tests/test-Root.cpp @@ -38,7 +38,7 @@ FRAGMENT(Root, HeapSlot) { } FRAGMENT(Root, barriers) { - JSObject *obj = JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr()); + JSObject *obj = JS_NewPlainObject(cx); js::PreBarriered prebarriered(obj); js::HeapPtr heapptr(obj); js::RelocatablePtr relocatable(obj); diff --git a/js/src/jsapi-tests/testAddPropertyPropcache.cpp b/js/src/jsapi-tests/testAddPropertyPropcache.cpp index a3d214db6f7..9e35314d6ae 100644 --- a/js/src/jsapi-tests/testAddPropertyPropcache.cpp +++ b/js/src/jsapi-tests/testAddPropertyPropcache.cpp @@ -30,7 +30,7 @@ BEGIN_TEST(testAddPropertyHook) */ static const int ExpectedCount = 100; - JS::RootedObject obj(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); + JS::RootedObject obj(cx, JS_NewPlainObject(cx)); CHECK(obj); JS::RootedValue proto(cx, OBJECT_TO_JSVAL(obj)); JS_InitClass(cx, global, obj, &AddPropertyClass, nullptr, 0, nullptr, nullptr, nullptr, diff --git a/js/src/jsapi-tests/testDefineGetterSetterNonEnumerable.cpp b/js/src/jsapi-tests/testDefineGetterSetterNonEnumerable.cpp index ac8b9a4b584..fa2a6b2c7cc 100644 --- a/js/src/jsapi-tests/testDefineGetterSetterNonEnumerable.cpp +++ b/js/src/jsapi-tests/testDefineGetterSetterNonEnumerable.cpp @@ -18,7 +18,7 @@ BEGIN_TEST(testDefineGetterSetterNonEnumerable) static const char PROPERTY_NAME[] = "foo"; JS::RootedValue vobj(cx); - JS::RootedObject obj(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); + JS::RootedObject obj(cx, JS_NewPlainObject(cx)); CHECK(obj); vobj = OBJECT_TO_JSVAL(obj); diff --git a/js/src/jsapi-tests/testDefinePropertyIgnoredAttributes.cpp b/js/src/jsapi-tests/testDefinePropertyIgnoredAttributes.cpp index 4bb6d0b6767..688ef90a425 100644 --- a/js/src/jsapi-tests/testDefinePropertyIgnoredAttributes.cpp +++ b/js/src/jsapi-tests/testDefinePropertyIgnoredAttributes.cpp @@ -41,7 +41,7 @@ CheckDescriptor(JS::Handle desc, bool enumerable, BEGIN_TEST(testDefinePropertyIgnoredAttributes) { - JS::RootedObject obj(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); + JS::RootedObject obj(cx, JS_NewPlainObject(cx)); JS::Rooted desc(cx); JS::RootedValue defineValue(cx); diff --git a/js/src/jsapi-tests/testForOfIterator.cpp b/js/src/jsapi-tests/testForOfIterator.cpp index 1f28d27f7c8..26ac57aa2fa 100644 --- a/js/src/jsapi-tests/testForOfIterator.cpp +++ b/js/src/jsapi-tests/testForOfIterator.cpp @@ -45,8 +45,7 @@ END_TEST(testForOfIterator_bug515273_part1) BEGIN_TEST(testForOfIterator_bug515273_part2) { - JS::RootedObject obj(cx, - JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); + JS::RootedObject obj(cx, JS_NewPlainObject(cx)); CHECK(obj); JS::RootedValue v(cx, JS::ObjectValue(*obj)); diff --git a/js/src/jsapi-tests/testGCCellPtr.cpp b/js/src/jsapi-tests/testGCCellPtr.cpp index f3b251544f7..8217336c1e0 100644 --- a/js/src/jsapi-tests/testGCCellPtr.cpp +++ b/js/src/jsapi-tests/testGCCellPtr.cpp @@ -20,7 +20,7 @@ GivesAndTakesCells(JS::GCCellPtr cell) BEGIN_TEST(testGCCellPtr) { - JS::RootedObject obj(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); + JS::RootedObject obj(cx, JS_NewPlainObject(cx)); CHECK(obj); JS::RootedString str(cx, JS_NewStringCopyZ(cx, "probably foobar")); diff --git a/js/src/jsapi-tests/testGCExactRooting.cpp b/js/src/jsapi-tests/testGCExactRooting.cpp index 569d84332b0..bd457e7da0c 100644 --- a/js/src/jsapi-tests/testGCExactRooting.cpp +++ b/js/src/jsapi-tests/testGCExactRooting.cpp @@ -9,8 +9,8 @@ BEGIN_TEST(testGCExactRooting) { - JS::RootedObject rootCx(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); - JS::RootedObject rootRt(cx->runtime(), JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); + JS::RootedObject rootCx(cx, JS_NewPlainObject(cx)); + JS::RootedObject rootRt(cx->runtime(), JS_NewPlainObject(cx)); JS_GC(cx->runtime()); diff --git a/js/src/jsapi-tests/testGCHeapPostBarriers.cpp b/js/src/jsapi-tests/testGCHeapPostBarriers.cpp index 5b9c765eec8..af1389aaec3 100644 --- a/js/src/jsapi-tests/testGCHeapPostBarriers.cpp +++ b/js/src/jsapi-tests/testGCHeapPostBarriers.cpp @@ -70,7 +70,7 @@ TestHeapPostBarriers(T initialObj) JSObject *NurseryObject() { - JS::RootedObject obj(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); + JS::RootedObject obj(cx, JS_NewPlainObject(cx)); if (!obj) return nullptr; JS_DefineProperty(cx, obj, "x", 42, 0); diff --git a/js/src/jsapi-tests/testGCMarking.cpp b/js/src/jsapi-tests/testGCMarking.cpp index d5100e06ab3..a624f05ef7e 100644 --- a/js/src/jsapi-tests/testGCMarking.cpp +++ b/js/src/jsapi-tests/testGCMarking.cpp @@ -53,7 +53,7 @@ BEGIN_TEST(testTracingIncomingCCWs) // Define an object in one zone, that is wrapped by a CCW in another zone. - JS::RootedObject obj(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); + JS::RootedObject obj(cx, JS_NewPlainObject(cx)); CHECK(obj->zone() == global1->zone()); JSAutoCompartment ac(cx, global2); diff --git a/js/src/jsapi-tests/testGCNursery.cpp b/js/src/jsapi-tests/testGCNursery.cpp index f0212c9b792..60969908d6b 100644 --- a/js/src/jsapi-tests/testGCNursery.cpp +++ b/js/src/jsapi-tests/testGCNursery.cpp @@ -70,9 +70,9 @@ BEGIN_TEST(testGCNurseryFinalizer) CHECK(ranFinalizer == 0); // Null finalization list with non-empty nursery. - obj = JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr()); - obj = JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr()); - obj = JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr()); + obj = JS_NewPlainObject(cx); + obj = JS_NewPlainObject(cx); + obj = JS_NewPlainObject(cx); CHECK(js::gc::IsInsideNursery(obj)); obj = nullptr; rt->gc.minorGC(JS::gcreason::EVICT_NURSERY); @@ -97,15 +97,15 @@ BEGIN_TEST(testGCNurseryFinalizer) ranFinalizer = 0; // Interleaved finalizable things in nursery. - obj = JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr()); + obj = JS_NewPlainObject(cx); obj = JS_NewObject(cx, Jsvalify(&NurseryClass), JS::NullPtr(), JS::NullPtr()); - obj = JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr()); + obj = JS_NewPlainObject(cx); obj = JS_NewObject(cx, Jsvalify(&NurseryClass), JS::NullPtr(), JS::NullPtr()); - obj = JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr()); + obj = JS_NewPlainObject(cx); obj = JS_NewObject(cx, Jsvalify(&NurseryClass), JS::NullPtr(), JS::NullPtr()); - obj = JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr()); + obj = JS_NewPlainObject(cx); obj = JS_NewObject(cx, Jsvalify(&NurseryClass), JS::NullPtr(), JS::NullPtr()); - obj = JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr()); + obj = JS_NewPlainObject(cx); CHECK(js::gc::IsInsideNursery(obj)); obj = nullptr; rt->gc.minorGC(JS::gcreason::EVICT_NURSERY); diff --git a/js/src/jsapi-tests/testGCStoreBufferRemoval.cpp b/js/src/jsapi-tests/testGCStoreBufferRemoval.cpp index 51cd3bc26f6..7b0867a13d5 100644 --- a/js/src/jsapi-tests/testGCStoreBufferRemoval.cpp +++ b/js/src/jsapi-tests/testGCStoreBufferRemoval.cpp @@ -116,6 +116,6 @@ BEGIN_TEST(testGCStoreBufferRemoval) JSObject *NurseryObject() { - return JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr()); + return JS_NewPlainObject(cx); } END_TEST(testGCStoreBufferRemoval) diff --git a/js/src/jsapi-tests/testIsInsideNursery.cpp b/js/src/jsapi-tests/testIsInsideNursery.cpp index 2853acd642b..e67e6138d49 100644 --- a/js/src/jsapi-tests/testIsInsideNursery.cpp +++ b/js/src/jsapi-tests/testIsInsideNursery.cpp @@ -15,7 +15,7 @@ BEGIN_TEST(testIsInsideNursery) JS_GC(rt); - JS::RootedObject object(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); + JS::RootedObject object(cx, JS_NewPlainObject(cx)); /* Objects are initially allocated in the nursery. */ CHECK(js::gc::IsInsideNursery(object)); diff --git a/js/src/jsapi-tests/testJSEvaluateScript.cpp b/js/src/jsapi-tests/testJSEvaluateScript.cpp index c2040af2eb7..94c2d7869c4 100644 --- a/js/src/jsapi-tests/testJSEvaluateScript.cpp +++ b/js/src/jsapi-tests/testJSEvaluateScript.cpp @@ -6,7 +6,7 @@ BEGIN_TEST(testJSEvaluateScript) { - JS::RootedObject obj(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), global)); + JS::RootedObject obj(cx, JS_NewPlainObject(cx)); CHECK(obj); CHECK(JS::RuntimeOptionsRef(cx).varObjFix()); diff --git a/js/src/jsapi-tests/testNewObject.cpp b/js/src/jsapi-tests/testNewObject.cpp index 66b4b57f7ef..74491a2c66f 100644 --- a/js/src/jsapi-tests/testNewObject.cpp +++ b/js/src/jsapi-tests/testNewObject.cpp @@ -14,7 +14,7 @@ constructHook(JSContext *cx, unsigned argc, jsval *vp) // Check that arguments were passed properly from JS_New. - JS::RootedObject obj(cx, JS_NewObject(cx, js::Jsvalify(&js::PlainObject::class_), JS::NullPtr(), JS::NullPtr())); + JS::RootedObject obj(cx, JS_NewPlainObject(cx)); if (!obj) { JS_ReportError(cx, "test failed, could not construct object"); return false; diff --git a/js/src/jsapi-tests/testSetProperty.cpp b/js/src/jsapi-tests/testSetProperty.cpp index 5ed7d80647e..81eeaf2613c 100644 --- a/js/src/jsapi-tests/testSetProperty.cpp +++ b/js/src/jsapi-tests/testSetProperty.cpp @@ -9,7 +9,7 @@ BEGIN_TEST(testSetProperty_NativeGetterStubSetter) { - JS::RootedObject obj(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); + JS::RootedObject obj(cx, JS_NewPlainObject(cx)); CHECK(obj); CHECK(JS_DefineProperty(cx, global, "globalProp", obj, JSPROP_ENUMERATE, diff --git a/js/src/jsapi-tests/testStructuredClone.cpp b/js/src/jsapi-tests/testStructuredClone.cpp index 1d214f2c54b..0cfa966d9d1 100644 --- a/js/src/jsapi-tests/testStructuredClone.cpp +++ b/js/src/jsapi-tests/testStructuredClone.cpp @@ -19,7 +19,7 @@ BEGIN_TEST(testStructuredClone_object) JSAutoCompartment ac(cx, g1); JS::RootedValue prop(cx, JS::Int32Value(1337)); - JS::RootedObject obj(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); + JS::RootedObject obj(cx, JS_NewPlainObject(cx)); v1 = JS::ObjectOrNullValue(obj); CHECK(v1.isObject()); CHECK(JS_SetProperty(cx, obj, "prop", prop)); diff --git a/js/src/jsapi-tests/testWeakMap.cpp b/js/src/jsapi-tests/testWeakMap.cpp index b49967e9cbf..22ebfd26349 100644 --- a/js/src/jsapi-tests/testWeakMap.cpp +++ b/js/src/jsapi-tests/testWeakMap.cpp @@ -49,7 +49,7 @@ BEGIN_TEST(testWeakMap_basicOperations) JSObject *newKey() { - return JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr()); + return JS_NewPlainObject(cx); } bool @@ -185,7 +185,7 @@ JSObject *newCCW(JS::HandleObject sourceZone, JS::HandleObject destZone) JS::RootedObject object(cx); { JSAutoCompartment ac(cx, destZone); - object = JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr()); + object = JS_NewPlainObject(cx); if (!object) return nullptr; } diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp index 7f36f5beaa6..2c266af6a65 100644 --- a/js/src/jsapi.cpp +++ b/js/src/jsapi.cpp @@ -2084,6 +2084,16 @@ JS_NewObjectWithGivenProto(JSContext *cx, const JSClass *jsclasp, HandleObject p return obj; } +JS_PUBLIC_API(JSObject *) +JS_NewPlainObject(JSContext *cx) +{ + MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment())); + AssertHeapIsIdle(cx); + CHECK_REQUEST(cx); + + return NewBuiltinClassInstance(cx); +} + JS_PUBLIC_API(JSObject *) JS_NewObjectForConstructor(JSContext *cx, const JSClass *clasp, const CallArgs& args) { diff --git a/js/src/jsapi.h b/js/src/jsapi.h index 2b099979263..b6f83bb0443 100644 --- a/js/src/jsapi.h +++ b/js/src/jsapi.h @@ -2793,6 +2793,10 @@ extern JS_PUBLIC_API(JSObject *) JS_NewObjectWithGivenProto(JSContext *cx, const JSClass *clasp, JS::Handle proto, JS::Handle parent); +// Creates a new plain object, like `new Object()`, with Object.prototype as [[Prototype]]. +extern JS_PUBLIC_API(JSObject *) +JS_NewPlainObject(JSContext *cx); + /* * Freeze obj, and all objects it refers to, recursively. This will not recurse * through non-extensible objects, on the assumption that those are already diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp index e0ff546a860..b64b00e1c91 100644 --- a/js/src/jsfriendapi.cpp +++ b/js/src/jsfriendapi.cpp @@ -1052,7 +1052,7 @@ JS::ObjectPtr::trace(JSTracer *trc, const char *name) JS_FRIEND_API(JSObject *) js::GetTestingFunctions(JSContext *cx) { - RootedObject obj(cx, JS_NewObject(cx, nullptr, NullPtr(), NullPtr())); + RootedObject obj(cx, JS_NewPlainObject(cx)); if (!obj) return nullptr; diff --git a/js/src/shell/OSObject.cpp b/js/src/shell/OSObject.cpp index 42d79471713..6623fe20d77 100644 --- a/js/src/shell/OSObject.cpp +++ b/js/src/shell/OSObject.cpp @@ -236,7 +236,7 @@ os_waitpid(JSContext* cx, unsigned argc, Value* vp) return false; } - RootedObject info(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); + RootedObject info(cx, JS_NewPlainObject(cx)); if (!info) return false; @@ -293,7 +293,7 @@ static const JSFunctionSpecWithHelp os_functions[] = { bool js::DefineOS(JSContext *cx, HandleObject global) { - RootedObject obj(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); + RootedObject obj(cx, JS_NewPlainObject(cx)); return obj && JS_DefineFunctionsWithHelp(cx, obj, os_functions) && JS_DefineProperty(cx, global, "os", obj, 0); diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp index 28729b3ab5e..0677cea0c12 100644 --- a/js/src/shell/js.cpp +++ b/js/src/shell/js.cpp @@ -4708,7 +4708,7 @@ static const JSFunctionSpecWithHelp console_functions[] = { bool DefineConsole(JSContext *cx, HandleObject global) { - RootedObject obj(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr())); + RootedObject obj(cx, JS_NewPlainObject(cx)); return obj && JS_DefineFunctionsWithHelp(cx, obj, console_functions) && JS_DefineProperty(cx, global, "console", obj, 0); diff --git a/js/src/shell/jsheaptools.cpp b/js/src/shell/jsheaptools.cpp index 2b766534c80..9890f15f29c 100644 --- a/js/src/shell/jsheaptools.cpp +++ b/js/src/shell/jsheaptools.cpp @@ -531,7 +531,7 @@ ReferenceFinder::addReferrer(jsval referrerArg, Path *path) JSObject * ReferenceFinder::findReferences(HandleObject target) { - result = JS_NewObject(context, nullptr, JS::NullPtr(), JS::NullPtr()); + result = JS_NewPlainObject(context); if (!result) return nullptr; if (!visit(target, nullptr))