Ignore:
Timestamp:
Jan 4, 2010, 11:18:31 AM (15 years ago)
Author:
[email protected]
Message:

https://bugs.webkit.org/show_bug.cgi?id=33158
Refactor JSC API entry/exit to use RAII instead of copy/pasting code.
Make it easier to change set of actions taken when passing across the API boundary.

Reviewed by Sam "Shimmey Shimmey" Weinig.

  • API/APIShims.h: Added.

(JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
(JSC::APIEntryShimWithoutLock::~APIEntryShimWithoutLock):
(JSC::APIEntryShim::APIEntryShim):
(JSC::APICallbackShim::APICallbackShim):
(JSC::APICallbackShim::~APICallbackShim):

  • API/JSBase.cpp:

(JSEvaluateScript):
(JSCheckScriptSyntax):
(JSGarbageCollect):
(JSReportExtraMemoryCost):

  • API/JSCallbackConstructor.cpp:

(JSC::constructJSCallback):

  • API/JSCallbackFunction.cpp:

(JSC::JSCallbackFunction::call):

  • API/JSCallbackObjectFunctions.h:

(JSC::::init):
(JSC::::getOwnPropertySlot):
(JSC::::put):
(JSC::::deleteProperty):
(JSC::::construct):
(JSC::::hasInstance):
(JSC::::call):
(JSC::::getOwnPropertyNames):
(JSC::::toNumber):
(JSC::::toString):
(JSC::::staticValueGetter):
(JSC::::callbackGetter):

  • API/JSContextRef.cpp:
  • API/JSObjectRef.cpp:

(JSObjectMake):
(JSObjectMakeFunctionWithCallback):
(JSObjectMakeConstructor):
(JSObjectMakeFunction):
(JSObjectMakeArray):
(JSObjectMakeDate):
(JSObjectMakeError):
(JSObjectMakeRegExp):
(JSObjectGetPrototype):
(JSObjectSetPrototype):
(JSObjectHasProperty):
(JSObjectGetProperty):
(JSObjectSetProperty):
(JSObjectGetPropertyAtIndex):
(JSObjectSetPropertyAtIndex):
(JSObjectDeleteProperty):
(JSObjectCallAsFunction):
(JSObjectCallAsConstructor):
(JSObjectCopyPropertyNames):
(JSPropertyNameArrayRelease):
(JSPropertyNameAccumulatorAddName):

  • API/JSValueRef.cpp:

(JSValueGetType):
(JSValueIsUndefined):
(JSValueIsNull):
(JSValueIsBoolean):
(JSValueIsNumber):
(JSValueIsString):
(JSValueIsObject):
(JSValueIsObjectOfClass):
(JSValueIsEqual):
(JSValueIsStrictEqual):
(JSValueIsInstanceOfConstructor):
(JSValueMakeUndefined):
(JSValueMakeNull):
(JSValueMakeBoolean):
(JSValueMakeNumber):
(JSValueMakeString):
(JSValueToBoolean):
(JSValueToNumber):
(JSValueToStringCopy):
(JSValueToObject):
(JSValueProtect):
(JSValueUnprotect):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/API/JSObjectRef.cpp

    r51512 r52751  
    7777{
    7878    ExecState* exec = toJS(ctx);
    79     exec->globalData().heap.registerThread();
    80     JSLock lock(exec);
     79    APIEntryShim entryShim(exec);
    8180
    8281    if (!jsClass)
     
    9392{
    9493    ExecState* exec = toJS(ctx);
    95     exec->globalData().heap.registerThread();
    96     JSLock lock(exec);
     94    APIEntryShim entryShim(exec);
    9795
    9896    Identifier nameID = name ? name->identifier(&exec->globalData()) : Identifier(exec, "anonymous");
     
    104102{
    105103    ExecState* exec = toJS(ctx);
    106     exec->globalData().heap.registerThread();
    107     JSLock lock(exec);
     104    APIEntryShim entryShim(exec);
    108105
    109106    JSValue jsPrototype = jsClass ? jsClass->prototype(exec) : 0;
     
    119116{
    120117    ExecState* exec = toJS(ctx);
    121     exec->globalData().heap.registerThread();
    122     JSLock lock(exec);
     118    APIEntryShim entryShim(exec);
    123119
    124120    Identifier nameID = name ? name->identifier(&exec->globalData()) : Identifier(exec, "anonymous");
     
    142138{
    143139    ExecState* exec = toJS(ctx);
    144     exec->globalData().heap.registerThread();
    145     JSLock lock(exec);
     140    APIEntryShim entryShim(exec);
    146141
    147142    JSObject* result;
     
    168163{
    169164    ExecState* exec = toJS(ctx);
    170     exec->globalData().heap.registerThread();
    171     JSLock lock(exec);
     165    APIEntryShim entryShim(exec);
    172166
    173167    MarkedArgumentBuffer argList;
     
    189183{
    190184    ExecState* exec = toJS(ctx);
    191     exec->globalData().heap.registerThread();
    192     JSLock lock(exec);
     185    APIEntryShim entryShim(exec);
    193186
    194187    MarkedArgumentBuffer argList;
     
    210203{
    211204    ExecState* exec = toJS(ctx);
    212     exec->globalData().heap.registerThread();
    213     JSLock lock(exec);
     205    APIEntryShim entryShim(exec);
    214206
    215207    MarkedArgumentBuffer argList;
     
    231223{
    232224    ExecState* exec = toJS(ctx);
    233     exec->globalData().heap.registerThread();
    234     JSLock lock(exec);
     225    APIEntryShim entryShim(exec);
    235226
    236227    JSObject* jsObject = toJS(object);
     
    241232{
    242233    ExecState* exec = toJS(ctx);
    243     exec->globalData().heap.registerThread();
    244     JSLock lock(exec);
     234    APIEntryShim entryShim(exec);
    245235
    246236    JSObject* jsObject = toJS(object);
     
    253243{
    254244    ExecState* exec = toJS(ctx);
    255     exec->globalData().heap.registerThread();
    256     JSLock lock(exec);
     245    APIEntryShim entryShim(exec);
    257246
    258247    JSObject* jsObject = toJS(object);
     
    264253{
    265254    ExecState* exec = toJS(ctx);
    266     exec->globalData().heap.registerThread();
    267     JSLock lock(exec);
     255    APIEntryShim entryShim(exec);
    268256
    269257    JSObject* jsObject = toJS(object);
     
    281269{
    282270    ExecState* exec = toJS(ctx);
    283     exec->globalData().heap.registerThread();
    284     JSLock lock(exec);
     271    APIEntryShim entryShim(exec);
    285272
    286273    JSObject* jsObject = toJS(object);
     
    305292{
    306293    ExecState* exec = toJS(ctx);
    307     exec->globalData().heap.registerThread();
    308     JSLock lock(exec);
     294    APIEntryShim entryShim(exec);
    309295
    310296    JSObject* jsObject = toJS(object);
     
    323309{
    324310    ExecState* exec = toJS(ctx);
    325     exec->globalData().heap.registerThread();
    326     JSLock lock(exec);
     311    APIEntryShim entryShim(exec);
    327312
    328313    JSObject* jsObject = toJS(object);
     
    340325{
    341326    ExecState* exec = toJS(ctx);
    342     exec->globalData().heap.registerThread();
    343     JSLock lock(exec);
     327    APIEntryShim entryShim(exec);
    344328
    345329    JSObject* jsObject = toJS(object);
     
    390374{
    391375    ExecState* exec = toJS(ctx);
    392     exec->globalData().heap.registerThread();
    393     JSLock lock(exec);
     376    APIEntryShim entryShim(exec);
    394377
    395378    JSObject* jsObject = toJS(object);
     
    428411{
    429412    ExecState* exec = toJS(ctx);
    430     exec->globalData().heap.registerThread();
    431     JSLock lock(exec);
     413    APIEntryShim entryShim(exec);
    432414
    433415    JSObject* jsObject = toJS(object);
     
    467449    JSObject* jsObject = toJS(object);
    468450    ExecState* exec = toJS(ctx);
    469     exec->globalData().heap.registerThread();
    470     JSLock lock(exec);
     451    APIEntryShim entryShim(exec);
    471452
    472453    JSGlobalData* globalData = &exec->globalData();
     
    493474{
    494475    if (--array->refCount == 0) {
    495         JSLock lock(array->globalData->isSharedInstance ? LockForReal : SilenceAssertionsOnly);
     476        APIEntryShim entryShim(array->globalData, false);
    496477        delete array;
    497478    }
     
    511492{
    512493    PropertyNameArray* propertyNames = toJS(array);
    513 
    514     propertyNames->globalData()->heap.registerThread();
    515     JSLock lock(propertyNames->globalData()->isSharedInstance ? LockForReal : SilenceAssertionsOnly);
    516 
     494    APIEntryShim entryShim(propertyNames->globalData());
    517495    propertyNames->add(propertyName->identifier(propertyNames->globalData()));
    518496}
Note: See TracChangeset for help on using the changeset viewer.