📄 jsobjectref.cpp
字号:
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 + -