Ignore:
Timestamp:
Jul 15, 2006, 6:28:25 PM (19 years ago)
Author:
ggaren
Message:

Reviewed by Maciej.

  • Moved the arguments passed to JSClassCreate into a single structure, called JSClassDefinition. This will enable easier structure migration/versioning in the future, if necessary.


  • Added support for class names.


  • kJSClassDefinitionNull replaces kJSObjectCallbacksNone.


  • JSClass is becoming a fairly complex struct, so I migrated all of its implementation other than reference counting to the sruct.


  • Also moved JSClass* functions in the API to JSObjectRef.cpp, since they're declared in JSObjectRef.h


  • Also added some more informative explanation to the class structure doc.
File:
1 edited

Legend:

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

    r15444 r15462  
    6060   
    6161    do {
    62         if (JSObjectInitializeCallback initialize = jsClass->callbacks.initialize)
     62        if (JSObjectInitializeCallback initialize = jsClass->initialize)
    6363            initialize(context, thisRef, toRef(exec->exceptionSlot()));
    64     } while ((jsClass = jsClass->parent));
     64    } while ((jsClass = jsClass->parentClass));
    6565}
    6666
     
    6969    JSObjectRef thisRef = toRef(this);
    7070   
    71     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parent)
    72         if (JSObjectFinalizeCallback finalize = jsClass->callbacks.finalize)
     71    for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass)
     72        if (JSObjectFinalizeCallback finalize = jsClass->finalize)
    7373            finalize(thisRef);
    7474   
     
    7878UString JSCallbackObject::className() const
    7979{
    80     return classInfo()->className;
     80    if (!m_class->className.isNull())
     81        return m_class->className;
     82   
     83    return JSObject::className();
    8184}
    8285
     
    8790    JSStringRef propertyNameRef = toRef(propertyName.ustring().rep());
    8891
    89     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parent) {
     92    for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass) {
    9093        // optional optimization to bypass getProperty in cases when we only need to know if the property exists
    91         if (JSObjectHasPropertyCallback hasProperty = jsClass->callbacks.hasProperty) {
     94        if (JSObjectHasPropertyCallback hasProperty = jsClass->hasProperty) {
    9295            if (hasProperty(context, thisRef, propertyNameRef)) {
    9396                slot.setCustom(this, callbackGetter);
    9497                return true;
    9598            }
    96         } else if (JSObjectGetPropertyCallback getProperty = jsClass->callbacks.getProperty) {
     99        } else if (JSObjectGetPropertyCallback getProperty = jsClass->getProperty) {
    97100            if (JSValueRef value = getProperty(context, thisRef, propertyNameRef, toRef(exec->exceptionSlot()))) {
    98101                // cache the value so we don't have to compute it again
     
    136139    JSValueRef valueRef = toRef(value);
    137140
    138     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parent) {
    139         if (JSObjectSetPropertyCallback setProperty = jsClass->callbacks.setProperty) {
     141    for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass) {
     142        if (JSObjectSetPropertyCallback setProperty = jsClass->setProperty) {
    140143            if (setProperty(context, thisRef, propertyNameRef, valueRef, toRef(exec->exceptionSlot())))
    141144                return;
     
    177180    JSStringRef propertyNameRef = toRef(propertyName.ustring().rep());
    178181   
    179     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parent) {
    180         if (JSObjectDeletePropertyCallback deleteProperty = jsClass->callbacks.deleteProperty) {
     182    for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass) {
     183        if (JSObjectDeletePropertyCallback deleteProperty = jsClass->deleteProperty) {
    181184            if (deleteProperty(context, thisRef, propertyNameRef, toRef(exec->exceptionSlot())))
    182185                return true;
     
    210213bool JSCallbackObject::implementsConstruct() const
    211214{
    212     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parent)
    213         if (jsClass->callbacks.callAsConstructor)
     215    for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass)
     216        if (jsClass->callAsConstructor)
    214217            return true;
    215218
     
    222225    JSObjectRef thisRef = toRef(this);
    223226   
    224     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parent) {
    225         if (JSObjectCallAsConstructorCallback callAsConstructor = jsClass->callbacks.callAsConstructor) {
     227    for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass) {
     228        if (JSObjectCallAsConstructorCallback callAsConstructor = jsClass->callAsConstructor) {
    226229            size_t argumentCount = args.size();
    227230            JSValueRef arguments[argumentCount];
     
    238241bool JSCallbackObject::implementsHasInstance() const
    239242{
    240     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parent)
    241         if (jsClass->callbacks.hasInstance)
     243    for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass)
     244        if (jsClass->hasInstance)
    242245            return true;
    243246
     
    250253    JSObjectRef thisRef = toRef(this);
    251254
    252     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parent)
    253         if (JSObjectHasInstanceCallback hasInstance = jsClass->callbacks.hasInstance)
     255    for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass)
     256        if (JSObjectHasInstanceCallback hasInstance = jsClass->hasInstance)
    254257            return hasInstance(execRef, thisRef, toRef(value), toRef(exec->exceptionSlot()));
    255258
     
    261264bool JSCallbackObject::implementsCall() const
    262265{
    263     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parent)
    264         if (jsClass->callbacks.callAsFunction)
     266    for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass)
     267        if (jsClass->callAsFunction)
    265268            return true;
    266269   
     
    274277    JSObjectRef thisObjRef = toRef(thisObj);
    275278
    276     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parent) {
    277         if (JSObjectCallAsFunctionCallback callAsFunction = jsClass->callbacks.callAsFunction) {
     279    for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass) {
     280        if (JSObjectCallAsFunctionCallback callAsFunction = jsClass->callAsFunction) {
    278281            size_t argumentCount = args.size();
    279282            JSValueRef arguments[argumentCount];
     
    292295    JSObjectRef thisRef = toRef(this);
    293296
    294     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parent) {
    295         if (JSObjectAddPropertiesToListCallback addPropertiesToList = jsClass->callbacks.addPropertiesToList)
     297    for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass) {
     298        if (JSObjectAddPropertiesToListCallback addPropertiesToList = jsClass->addPropertiesToList)
    296299            addPropertiesToList(thisRef, toRef(&propertyList));
    297300
     
    327330    JSObjectRef thisRef = toRef(this);
    328331
    329     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parent)
    330         if (JSObjectConvertToTypeCallback convertToType = jsClass->callbacks.convertToType)
     332    for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass)
     333        if (JSObjectConvertToTypeCallback convertToType = jsClass->convertToType)
    331334            if (JSValueRef value = convertToType(context, thisRef, kJSTypeNumber, toRef(exec->exceptionSlot())))
    332335                return toJS(value)->getNumber();
     
    340343    JSObjectRef thisRef = toRef(this);
    341344
    342     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parent)
    343         if (JSObjectConvertToTypeCallback convertToType = jsClass->callbacks.convertToType)
     345    for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass)
     346        if (JSObjectConvertToTypeCallback convertToType = jsClass->convertToType)
    344347            if (JSValueRef value = convertToType(context, thisRef, kJSTypeString, toRef(exec->exceptionSlot())))
    345348                return toJS(value)->getString();
     
    360363bool JSCallbackObject::inherits(JSClassRef c) const
    361364{
    362     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parent)
     365    for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass)
    363366        if (jsClass == c)
    364367            return true;
     
    382385    JSStringRef propertyNameRef = toRef(propertyName.ustring().rep());
    383386
    384     for (JSClassRef jsClass = thisObj->m_class; jsClass; jsClass = jsClass->parent)
     387    for (JSClassRef jsClass = thisObj->m_class; jsClass; jsClass = jsClass->parentClass)
    385388        if (__JSClass::StaticValuesTable* staticValues = jsClass->staticValues)
    386389            if (StaticValueEntry* entry = staticValues->get(propertyName.ustring().rep()))
     
    400403        return cachedOrOverrideValue;
    401404
    402     for (JSClassRef jsClass = thisObj->m_class; jsClass; jsClass = jsClass->parent) {
     405    for (JSClassRef jsClass = thisObj->m_class; jsClass; jsClass = jsClass->parentClass) {
    403406        if (__JSClass::StaticFunctionsTable* staticFunctions = jsClass->staticFunctions) {
    404407            if (StaticFunctionEntry* entry = staticFunctions->get(propertyName.ustring().rep())) {
     
    421424    JSStringRef propertyNameRef = toRef(propertyName.ustring().rep());
    422425
    423     for (JSClassRef jsClass = thisObj->m_class; jsClass; jsClass = jsClass->parent)
    424         if (JSObjectGetPropertyCallback getProperty = jsClass->callbacks.getProperty)
     426    for (JSClassRef jsClass = thisObj->m_class; jsClass; jsClass = jsClass->parentClass)
     427        if (JSObjectGetPropertyCallback getProperty = jsClass->getProperty)
    425428            if (JSValueRef value = getProperty(toRef(exec), thisRef, propertyNameRef, toRef(exec->exceptionSlot())))
    426429                return toJS(value);
Note: See TracChangeset for help on using the changeset viewer.