Permalink
Browse files

Bug 868411 - Handlify js::GetObjectProto; r=bz

  • Loading branch information...
Ms2ger committed May 5, 2013
1 parent fe34c79 commit dccecedd93cfb06f6257de71dfe65c8f911e0345
@@ -1062,7 +1062,7 @@ FindObjectClass(JSContext* cx, JSObject* aGlobalObject)
JS::Rooted<JSObject*> obj(cx), proto(cx, aGlobalObject);
do {
obj = proto;
- js::GetObjectProto(cx, obj, proto.address());
+ js::GetObjectProto(cx, obj, &proto);
} while (proto);
sObjectClass = js::GetObjectJSClass(obj);
@@ -5171,7 +5171,7 @@ nsWindowSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
if (obj == realObj) {
JS::Rooted<JSObject*> proto(cx);
- if (!js::GetObjectProto(cx, obj, proto.address())) {
+ if (!js::GetObjectProto(cx, obj, &proto)) {
*_retval = JS_FALSE;
return NS_OK;
}
@@ -6346,16 +6346,18 @@ nsHTMLDocumentSH::DocumentAllGetProperty(JSContext *cx, JSHandleObject obj_,
return JS_TRUE;
}
+ JS::Rooted<JSObject*> proto(cx);
while (js::GetObjectJSClass(obj) != &sHTMLDocumentAllClass) {
- if (!js::GetObjectProto(cx, obj, obj.address())) {
+ if (!js::GetObjectProto(cx, obj, &proto)) {
return JS_FALSE;
}
- if (!obj) {
+ if (!proto) {
NS_ERROR("The JS engine lies!");
-
return JS_TRUE;
}
+
+ obj = proto;
}
nsHTMLDocument *doc = GetDocument(obj);
@@ -953,12 +953,11 @@ nsChromeOuterWindowProxy
nsChromeOuterWindowProxy::singleton;
static JSObject*
-NewOuterWindowProxy(JSContext *cx, JSObject *aParent, bool isChrome)
+NewOuterWindowProxy(JSContext *cx, JS::Handle<JSObject*> parent, bool isChrome)
{
- JS::Rooted<JSObject*> parent(cx, aParent);
JSAutoCompartment ac(cx, parent);
JS::Rooted<JSObject*> proto(cx);
- if (!js::GetObjectProto(cx, parent, proto.address()))
+ if (!js::GetObjectProto(cx, parent, &proto))
return nullptr;
JSObject *obj = js::Wrapper::New(cx, parent, proto, parent,
@@ -2021,8 +2020,8 @@ nsGlobalWindow::CreateOuterObject(nsGlobalWindow* aNewInner)
{
AutoPushJSContext cx(mContext->GetNativeContext());
- JSObject* outer = NewOuterWindowProxy(cx, aNewInner->FastGetGlobalJSObject(),
- IsChromeWindow());
+ JS::Rooted<JSObject*> global(cx, aNewInner->FastGetGlobalJSObject());
+ JSObject* outer = NewOuterWindowProxy(cx, global, IsChromeWindow());
if (!outer) {
return NS_ERROR_FAILURE;
}
@@ -2360,8 +2359,9 @@ nsGlobalWindow::SetNewDocument(nsIDocument* aDocument,
mJSObject = mContext->GetNativeGlobal();
SetWrapper(mJSObject);
} else {
- JSObject *outerObject = NewOuterWindowProxy(cx, xpc_UnmarkGrayObject(newInnerWindow->mJSObject),
- thisChrome);
+ JS::Rooted<JSObject*> global(cx,
+ xpc_UnmarkGrayObject(newInnerWindow->mJSObject));
+ JSObject* outerObject = NewOuterWindowProxy(cx, global, thisChrome);
if (!outerObject) {
NS_ERROR("out of memory");
return NS_ERROR_FAILURE;
@@ -1239,7 +1239,7 @@ GetPropertyOnPrototype(JSContext* cx, JS::Handle<JSObject*> proxy,
JS::Value* vp)
{
JS::Rooted<JSObject*> proto(cx);
- if (!js::GetObjectProto(cx, proxy, proto.address())) {
+ if (!js::GetObjectProto(cx, proxy, &proto)) {
return false;
}
if (!proto) {
View
@@ -7015,7 +7015,7 @@ def getBody(self):
""" + get + """
JS::Rooted<JSObject*> proto(cx);
-if (!js::GetObjectProto(cx, proxy, proto.address())) {
+if (!js::GetObjectProto(cx, proxy, &proto)) {
return false;
}
if (proto) {
@@ -111,7 +111,7 @@ DOMProxyHandler::getPropertyDescriptor(JSContext* cx, JS::Handle<JSObject*> prox
}
JS::Rooted<JSObject*> proto(cx);
- if (!js::GetObjectProto(cx, proxy, proto.address())) {
+ if (!js::GetObjectProto(cx, proxy, &proto)) {
return false;
}
if (!proto) {
@@ -192,7 +192,7 @@ DOMProxyHandler::has(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid
// OK, now we have to look at the proto
JS::Rooted<JSObject*> proto(cx);
- if (!js::GetObjectProto(cx, proxy, proto.address())) {
+ if (!js::GetObjectProto(cx, proxy, &proto)) {
return false;
}
if (!proto) {
@@ -16,6 +16,7 @@
#include "jsfriendapi.h"
using namespace mozilla::jsipc;
+using namespace JS;
namespace {
@@ -178,11 +179,13 @@ ObjectWrapperParent::GetJSObject(JSContext* cx) const
}
static ObjectWrapperParent*
-Unwrap(JSContext* cx, JSObject* obj)
+Unwrap(JSContext* cx, JSObject* objArg)
{
+ RootedObject obj(cx, objArg), proto(cx);
while (js::GetObjectClass(obj) != &ObjectWrapperParent::sCPOW_JSClass) {
- if (!js::GetObjectProto(cx, obj, &obj) || !obj)
+ if (!js::GetObjectProto(cx, obj, &proto) || !proto)
return NULL;
+ obj = proto;
}
ObjectWrapperParent* self =
View
@@ -466,17 +466,17 @@ JS_FRIEND_API(void)
SetFunctionNativeReserved(JSObject *fun, size_t which, const Value &val);
inline bool
-GetObjectProto(JSContext *cx, JSObject *obj, JSObject **proto)
+GetObjectProto(JSContext *cx, JS::Handle<JSObject*> obj, JS::MutableHandle<JSObject*> proto)
{
js::Class *clasp = GetObjectClass(obj);
if (clasp == &js::ObjectProxyClass ||
clasp == &js::OuterWindowProxyClass ||
clasp == &js::FunctionProxyClass)
{
- return JS_GetPrototype(cx, obj, proto);
+ return JS_GetPrototype(cx, obj, proto.address());
}
- *proto = reinterpret_cast<const shadow::Object*>(obj)->type->proto;
+ proto.set(reinterpret_cast<const shadow::Object*>(obj.get())->type->proto);
return true;
}
@@ -1,6 +1,6 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim: set ts=8 sts=4 et sw=4 tw=99: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
@@ -476,13 +476,15 @@ nsJSIID::Enumerate(nsIXPConnectWrappedNative *wrapper,
static JSObject *
FindObjectForHasInstance(JSContext *cx, HandleObject objArg)
{
- RootedObject obj(cx, objArg);
- while (obj && !IS_WRAPPER_CLASS(js::GetObjectClass(obj)) && !IsDOMObject(obj))
- {
- if (js::IsWrapper(obj))
+ RootedObject obj(cx, objArg), proto(cx);
+ while (obj && !IS_WRAPPER_CLASS(js::GetObjectClass(obj)) && !IsDOMObject(obj)) {
+ if (js::IsWrapper(obj)) {
obj = js::CheckedUnwrap(obj, /* stopAtOuter = */ false);
- else if (!js::GetObjectProto(cx, obj, obj.address()))
+ continue;
+ }
+ if (!js::GetObjectProto(cx, obj, &proto))
return nullptr;
+ obj = proto;
}
return obj;
}
@@ -70,7 +70,7 @@ WrapperFactory::CreateXrayWaiver(JSContext *cx, HandleObject obj)
// Get a waiver for the proto.
RootedObject proto(cx);
- if (!js::GetObjectProto(cx, obj, proto.address()))
+ if (!js::GetObjectProto(cx, obj, &proto))
return nullptr;
if (proto && !(proto = WaiveXray(cx, proto)))
return nullptr;
@@ -462,7 +462,7 @@ WrapperFactory::Rewrap(JSContext *cx, HandleObject existing, HandleObject obj,
{
JSAutoCompartment ac(cx, obj);
RootedObject unwrappedProto(cx);
- if (!js::GetObjectProto(cx, obj, unwrappedProto.address()))
+ if (!js::GetObjectProto(cx, obj, &unwrappedProto))
return NULL;
if (unwrappedProto && IsCrossCompartmentWrapper(unwrappedProto))
unwrappedProto = Wrapper::wrappedObject(unwrappedProto);

0 comments on commit dcceced

Please sign in to comment.