js::UnwrapObjectChecked(JSContext *cx, JSObject *obj) { while (obj->isWrapper() && !JS_UNLIKELY(!!obj->getClass()->ext.innerObject)) { JSObject *wrapper = obj; Wrapper *handler = Wrapper::wrapperHandler(obj); bool rvOnFailure; if (!handler->enter(cx, wrapper, JSID_VOID, Wrapper::PUNCTURE, &rvOnFailure)) return rvOnFailure ? obj : NULL; obj = Wrapper::wrappedObject(obj); JS_ASSERT(obj); } return obj; }
js::UnwrapOneChecked(JSContext *cx, JSObject *obj) { // Checked unwraps should never unwrap outer windows. if (!obj->isWrapper() || JS_UNLIKELY(!!obj->getClass()->ext.innerObject)) { return obj; } Wrapper *handler = Wrapper::wrapperHandler(obj); bool rvOnFailure; if (!handler->enter(cx, obj, JSID_VOID, Wrapper::PUNCTURE, &rvOnFailure)) { return rvOnFailure ? obj : NULL; } obj = Wrapper::wrappedObject(obj); JS_ASSERT(obj); return obj; }