⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jsobjectref.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    ExecState* exec = toJS(ctx);    exec->globalData().heap.registerThread();    JSLock lock(exec);    JSObject* jsObject = toJS(object);    JSValuePtr jsValue = jsObject->get(exec, propertyName->identifier(&exec->globalData()));    if (exec->hadException()) {        if (exception)            *exception = toRef(exec->exception());        exec->clearException();    }    return toRef(jsValue);}void JSObjectSetProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef value, JSPropertyAttributes attributes, JSValueRef* exception){    ExecState* exec = toJS(ctx);    exec->globalData().heap.registerThread();    JSLock lock(exec);    JSObject* jsObject = toJS(object);    Identifier name(propertyName->identifier(&exec->globalData()));    JSValuePtr jsValue = toJS(value);    if (attributes && !jsObject->hasProperty(exec, name))        jsObject->putWithAttributes(exec, name, jsValue, attributes);    else {        PutPropertySlot slot;        jsObject->put(exec, name, jsValue, slot);    }    if (exec->hadException()) {        if (exception)            *exception = toRef(exec->exception());        exec->clearException();    }}JSValueRef JSObjectGetPropertyAtIndex(JSContextRef ctx, JSObjectRef object, unsigned propertyIndex, JSValueRef* exception){    ExecState* exec = toJS(ctx);    exec->globalData().heap.registerThread();    JSLock lock(exec);    JSObject* jsObject = toJS(object);    JSValuePtr jsValue = jsObject->get(exec, propertyIndex);    if (exec->hadException()) {        if (exception)            *exception = toRef(exec->exception());        exec->clearException();    }    return toRef(jsValue);}void JSObjectSetPropertyAtIndex(JSContextRef ctx, JSObjectRef object, unsigned propertyIndex, JSValueRef value, JSValueRef* exception){    ExecState* exec = toJS(ctx);    exec->globalData().heap.registerThread();    JSLock lock(exec);    JSObject* jsObject = toJS(object);    JSValuePtr jsValue = toJS(value);        jsObject->put(exec, propertyIndex, jsValue);    if (exec->hadException()) {        if (exception)            *exception = toRef(exec->exception());        exec->clearException();    }}bool JSObjectDeleteProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception){    ExecState* exec = toJS(ctx);    exec->globalData().heap.registerThread();    JSLock lock(exec);    JSObject* jsObject = toJS(object);    bool result = jsObject->deleteProperty(exec, propertyName->identifier(&exec->globalData()));    if (exec->hadException()) {        if (exception)            *exception = toRef(exec->exception());        exec->clearException();    }    return result;}void* JSObjectGetPrivate(JSObjectRef object){    JSObject* jsObject = toJS(object);        if (jsObject->inherits(&JSCallbackObject<JSGlobalObject>::info))        return static_cast<JSCallbackObject<JSGlobalObject>*>(jsObject)->getPrivate();    else if (jsObject->inherits(&JSCallbackObject<JSObject>::info))        return static_cast<JSCallbackObject<JSObject>*>(jsObject)->getPrivate();        return 0;}bool JSObjectSetPrivate(JSObjectRef object, void* data){    JSObject* jsObject = toJS(object);        if (jsObject->inherits(&JSCallbackObject<JSGlobalObject>::info)) {        static_cast<JSCallbackObject<JSGlobalObject>*>(jsObject)->setPrivate(data);        return true;    } else if (jsObject->inherits(&JSCallbackObject<JSObject>::info)) {        static_cast<JSCallbackObject<JSObject>*>(jsObject)->setPrivate(data);        return true;    }            return false;}bool JSObjectIsFunction(JSContextRef, JSObjectRef object){    CallData callData;    return toJS(object)->getCallData(callData) != CallTypeNone;}JSValueRef JSObjectCallAsFunction(JSContextRef ctx, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception){    ExecState* exec = toJS(ctx);    exec->globalData().heap.registerThread();    JSLock lock(exec);    JSObject* jsObject = toJS(object);    JSObject* jsThisObject = toJS(thisObject);    if (!jsThisObject)        jsThisObject = exec->globalThisValue();    ArgList argList;    for (size_t i = 0; i < argumentCount; i++)        argList.append(toJS(arguments[i]));    CallData callData;    CallType callType = jsObject->getCallData(callData);    if (callType == CallTypeNone)        return 0;    JSValueRef result = toRef(call(exec, jsObject, callType, callData, jsThisObject, argList));    if (exec->hadException()) {        if (exception)            *exception = toRef(exec->exception());        exec->clearException();        result = 0;    }    return result;}bool JSObjectIsConstructor(JSContextRef, JSObjectRef object){    JSObject* jsObject = toJS(object);    ConstructData constructData;    return jsObject->getConstructData(constructData) != ConstructTypeNone;}JSObjectRef JSObjectCallAsConstructor(JSContextRef ctx, JSObjectRef object, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception){    ExecState* exec = toJS(ctx);    exec->globalData().heap.registerThread();    JSLock lock(exec);    JSObject* jsObject = toJS(object);    ConstructData constructData;    ConstructType constructType = jsObject->getConstructData(constructData);    if (constructType == ConstructTypeNone)        return 0;    ArgList argList;    for (size_t i = 0; i < argumentCount; i++)        argList.append(toJS(arguments[i]));    JSObjectRef result = toRef(construct(exec, jsObject, constructType, constructData, argList));    if (exec->hadException()) {        if (exception)            *exception = toRef(exec->exception());        exec->clearException();        result = 0;    }    return result;}struct OpaqueJSPropertyNameArray {    OpaqueJSPropertyNameArray(JSGlobalData* globalData)        : refCount(0)        , globalData(globalData)    {    }        unsigned refCount;    JSGlobalData* globalData;    Vector<JSRetainPtr<JSStringRef> > array;};JSPropertyNameArrayRef JSObjectCopyPropertyNames(JSContextRef ctx, JSObjectRef object){    JSObject* jsObject = toJS(object);    ExecState* exec = toJS(ctx);    exec->globalData().heap.registerThread();    JSLock lock(exec);    JSGlobalData* globalData = &exec->globalData();    JSPropertyNameArrayRef propertyNames = new OpaqueJSPropertyNameArray(globalData);    PropertyNameArray array(globalData);    jsObject->getPropertyNames(exec, array);    size_t size = array.size();    propertyNames->array.reserveInitialCapacity(size);    for (size_t i = 0; i < size; ++i)        propertyNames->array.append(JSRetainPtr<JSStringRef>(Adopt, OpaqueJSString::create(array[i].ustring()).releaseRef()));        return JSPropertyNameArrayRetain(propertyNames);}JSPropertyNameArrayRef JSPropertyNameArrayRetain(JSPropertyNameArrayRef array){    ++array->refCount;    return array;}void JSPropertyNameArrayRelease(JSPropertyNameArrayRef array){    if (--array->refCount == 0) {        JSLock lock(array->globalData->isSharedInstance);        delete array;    }}size_t JSPropertyNameArrayGetCount(JSPropertyNameArrayRef array){    return array->array.size();}JSStringRef JSPropertyNameArrayGetNameAtIndex(JSPropertyNameArrayRef array, size_t index){    return array->array[static_cast<unsigned>(index)].get();}void JSPropertyNameAccumulatorAddName(JSPropertyNameAccumulatorRef array, JSStringRef propertyName){    PropertyNameArray* propertyNames = toJS(array);    propertyNames->globalData()->heap.registerThread();    JSLock lock(propertyNames->globalData()->isSharedInstance);    propertyNames->add(propertyName->identifier(propertyNames->globalData()));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -