Changeset 210829 in webkit for trunk/Source/JavaScriptCore/API/JSObjectRef.cpp
- Timestamp:
- Jan 17, 2017, 3:52:55 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/API/JSObjectRef.cpp
r210824 r210829 381 381 } 382 382 383 // API objects have private properties, which may get accessed during destruction. This 384 // helper lets us get the ClassInfo of an API object from a function that may get called 385 // during destruction. 386 static const ClassInfo* classInfoPrivate(JSObject* jsObject) 387 { 388 VM* vm = jsObject->vm(); 389 390 if (vm->currentlyDestructingCallbackObject != jsObject) 391 return jsObject->classInfo(); 392 393 return vm->currentlyDestructingCallbackObjectClassInfo; 394 } 395 383 396 void* JSObjectGetPrivate(JSObjectRef object) 384 397 { 385 398 JSObject* jsObject = uncheckedToJS(object); 386 399 400 const ClassInfo* classInfo = classInfoPrivate(jsObject); 401 387 402 // Get wrapped object if proxied 388 if (jsObject->inherits(JSProxy::info())) 403 if (classInfo->isSubClassOf(JSProxy::info())) { 404 jsObject = static_cast<JSProxy*>(jsObject)->target(); 405 classInfo = jsObject->classInfo(); 406 } 407 408 if (classInfo->isSubClassOf(JSCallbackObject<JSGlobalObject>::info())) 409 return static_cast<JSCallbackObject<JSGlobalObject>*>(jsObject)->getPrivate(); 410 if (classInfo->isSubClassOf(JSCallbackObject<JSDestructibleObject>::info())) 411 return static_cast<JSCallbackObject<JSDestructibleObject>*>(jsObject)->getPrivate(); 412 #if JSC_OBJC_API_ENABLED 413 if (classInfo->isSubClassOf(JSCallbackObject<JSAPIWrapperObject>::info())) 414 return static_cast<JSCallbackObject<JSAPIWrapperObject>*>(jsObject)->getPrivate(); 415 #endif 416 417 return 0; 418 } 419 420 bool JSObjectSetPrivate(JSObjectRef object, void* data) 421 { 422 JSObject* jsObject = uncheckedToJS(object); 423 424 const ClassInfo* classInfo = classInfoPrivate(jsObject); 425 426 // Get wrapped object if proxied 427 if (classInfo->isSubClassOf(JSProxy::info())) { 389 428 jsObject = jsCast<JSProxy*>(jsObject)->target(); 390 391 if (jsObject->inherits(JSCallbackObject<JSGlobalObject>::info())) 392 return jsCast<JSCallbackObject<JSGlobalObject>*>(jsObject)->getPrivate(); 393 if (jsObject->inherits(JSCallbackObject<JSDestructibleObject>::info())) 394 return jsCast<JSCallbackObject<JSDestructibleObject>*>(jsObject)->getPrivate(); 429 classInfo = jsObject->classInfo(); 430 } 431 432 if (classInfo->isSubClassOf(JSCallbackObject<JSGlobalObject>::info())) { 433 jsCast<JSCallbackObject<JSGlobalObject>*>(jsObject)->setPrivate(data); 434 return true; 435 } 436 if (classInfo->isSubClassOf(JSCallbackObject<JSDestructibleObject>::info())) { 437 jsCast<JSCallbackObject<JSDestructibleObject>*>(jsObject)->setPrivate(data); 438 return true; 439 } 395 440 #if JSC_OBJC_API_ENABLED 396 if (jsObject->inherits(JSCallbackObject<JSAPIWrapperObject>::info())) 397 return jsCast<JSCallbackObject<JSAPIWrapperObject>*>(jsObject)->getPrivate(); 398 #endif 399 400 return 0; 401 } 402 403 bool JSObjectSetPrivate(JSObjectRef object, void* data) 404 { 405 JSObject* jsObject = uncheckedToJS(object); 406 407 // Get wrapped object if proxied 408 if (jsObject->inherits(JSProxy::info())) 409 jsObject = jsCast<JSProxy*>(jsObject)->target(); 410 411 if (jsObject->inherits(JSCallbackObject<JSGlobalObject>::info())) { 412 jsCast<JSCallbackObject<JSGlobalObject>*>(jsObject)->setPrivate(data); 413 return true; 414 } 415 if (jsObject->inherits(JSCallbackObject<JSDestructibleObject>::info())) { 416 jsCast<JSCallbackObject<JSDestructibleObject>*>(jsObject)->setPrivate(data); 417 return true; 418 } 419 #if JSC_OBJC_API_ENABLED 420 if (jsObject->inherits(JSCallbackObject<JSAPIWrapperObject>::info())) { 441 if (classInfo->isSubClassOf(JSCallbackObject<JSAPIWrapperObject>::info())) { 421 442 jsCast<JSCallbackObject<JSAPIWrapperObject>*>(jsObject)->setPrivate(data); 422 443 return true;
Note:
See TracChangeset
for help on using the changeset viewer.