コード例 #1
0
ファイル: jswrapper.cpp プロジェクト: lofter2011/Icefox
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;
}
コード例 #2
0
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;
}