Ignore:
Timestamp:
Jul 17, 2006, 2:06:57 AM (19 years ago)
Author:
ggaren
Message:

Reviewed by Maciej.


  • Changed the initialize callback to run from least derived class (parent class) to most derived class. This enables C++ style initialization, and derived class overriding of member data.


  • Added excpetion propopgation to JSObjectMake, to support initialize exceptions, and generally round out our policy of making function signatures as long as possible.
  • API/JSCallbackObject.h: Use ExecState instead of ContextRef, cuz we're in C++ land now.
File:
1 edited

Legend:

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

    r15481 r15483  
    3838const ClassInfo JSCallbackObject::info = { "CallbackObject", 0, 0, 0 };
    3939
    40 JSCallbackObject::JSCallbackObject(JSContextRef ctx, JSClassRef jsClass)
     40JSCallbackObject::JSCallbackObject(ExecState* exec, JSClassRef jsClass)
    4141    : JSObject()
    4242{
    43     init(ctx, jsClass);
    44 }
    45 
    46 JSCallbackObject::JSCallbackObject(JSContextRef ctx, JSClassRef jsClass, JSValue* prototype)
     43    init(exec, jsClass);
     44}
     45
     46JSCallbackObject::JSCallbackObject(ExecState* exec, JSClassRef jsClass, JSValue* prototype)
    4747    : JSObject(prototype)
    4848{
    49     init(ctx, jsClass);
    50 }
    51 
    52 void JSCallbackObject::init(JSContextRef ctx, JSClassRef jsClass)
    53 {
    54     ExecState* exec = toJS(ctx);
    55    
     49    init(exec, jsClass);
     50}
     51
     52void JSCallbackObject::init(ExecState* exec, JSClassRef jsClass)
     53{
    5654    m_privateData = 0;
    5755    m_class = JSClassRetain(jsClass);
    5856
    59     JSObjectRef thisRef = toRef(this);
    60    
     57    Vector<JSObjectInitializeCallback, 16> initRoutines;
    6158    do {
    6259        if (JSObjectInitializeCallback initialize = jsClass->initialize)
    63             initialize(ctx, thisRef, toRef(exec->exceptionSlot()));
     60            initRoutines.append(initialize);
    6461    } while ((jsClass = jsClass->parentClass));
     62   
     63    // initialize from base to derived
     64    for (int i = initRoutines.size() - 1; i >= 0; i--) {
     65        JSObjectInitializeCallback initialize = initRoutines[i];
     66        initialize(toRef(exec), toRef(this), toRef(exec->exceptionSlot()));
     67    }
    6568}
    6669
Note: See TracChangeset for help on using the changeset viewer.