Ignore:
Timestamp:
Aug 17, 2008, 1:23:49 PM (17 years ago)
Author:
[email protected]
Message:

JavaScriptCore:

2008-08-17 Geoffrey Garen <[email protected]>

Reviewed by Cameron Zwarich.

Made room for a free word in JSCell.


SunSpider says no change.


I changed JSCallbackObjectData, Arguments, JSArray, and RegExpObject to
store auxiliary data in a secondary structure.

I changed InternalFunction to store the function's name in the property
map.


I changed JSGlobalObjectData to use a virtual destructor, so WebCore's
JSDOMWindowBaseData could inherit from it safely. (It's a strange design
for JSDOMWindowBase to allocate an object that JSGlobalObject deletes,
but that's really our only option, given the size constraint.)


I also added a bunch of compile-time ASSERTs, and removed lots of comments
in JSObject.h because they were often out of date, and they got in the
way of reading what was actually going on.


Also renamed JSArray::getLength to JSArray::length, to match our style
guidelines.

WebCore:

2008-08-17 Geoffrey Garen <[email protected]>

Reviewed by Cameron Zwarich.

Made room for a free word in JSCell.


Changed JSDOMWindowBase to store its auxiliary data in a subclass of
JSGlobalData, so the two could share a pointer.


Added a bunch of ASSERTs, to help catch over-sized objects.

WebKit/mac:

2008-08-17 Geoffrey Garen <[email protected]>

Reviewed by Cameron Zwarich.

Made room for a free word in JSCell.


(Updated for JavaScriptCore changes.)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/API/JSCallbackObjectFunctions.h

    r35775 r35807  
    4343JSCallbackObject<Base>::JSCallbackObject(ExecState* exec, JSClassRef jsClass, JSValue* prototype, void* data)
    4444    : Base(prototype)
    45     , m_privateData(data)
    46     , m_class(JSClassRetain(jsClass))
     45    , m_callbackObjectData(new JSCallbackObjectData(data, jsClass))
    4746{
    4847    init(exec);
     
    5352template <class Base>
    5453JSCallbackObject<Base>::JSCallbackObject(JSClassRef jsClass)
    55     : m_privateData(0)
    56     , m_class(JSClassRetain(jsClass))
     54    : m_callbackObjectData(new JSCallbackObjectData(0, jsClass))
    5755{
    5856    ASSERT(Base::isGlobalObject());
     
    6664   
    6765    Vector<JSObjectInitializeCallback, 16> initRoutines;
    68     JSClassRef jsClass = m_class;
     66    JSClassRef jsClass = classRef();
    6967    do {
    7068        if (JSObjectInitializeCallback initialize = jsClass->initialize)
     
    8482    JSObjectRef thisRef = toRef(this);
    8583   
    86     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass)
    87         if (JSObjectFinalizeCallback finalize = jsClass->finalize) {
     84    for (JSClassRef jsClass = classRef(); jsClass; jsClass = jsClass->parentClass)
     85        if (JSObjectFinalizeCallback finalize = jsClass->finalize)
    8886            finalize(thisRef);
    89         }
    90            
    91     JSClassRelease(m_class);
    9287}
    9388
     
    9590UString JSCallbackObject<Base>::className() const
    9691{
    97     UString thisClassName = m_class->className();
     92    UString thisClassName = classRef()->className();
    9893    if (!thisClassName.isNull())
    9994        return thisClassName;
     
    109104    RefPtr<OpaqueJSString> propertyNameRef;
    110105   
    111     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass) {
     106    for (JSClassRef jsClass = classRef(); jsClass; jsClass = jsClass->parentClass) {
    112107        // optional optimization to bypass getProperty in cases when we only need to know if the property exists
    113108        if (JSObjectHasPropertyCallback hasProperty = jsClass->hasProperty) {
     
    162157    JSValueRef valueRef = toRef(value);
    163158   
    164     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass) {
     159    for (JSClassRef jsClass = classRef(); jsClass; jsClass = jsClass->parentClass) {
    165160        if (JSObjectSetPropertyCallback setProperty = jsClass->setProperty) {
    166161            if (!propertyNameRef)
     
    210205    RefPtr<OpaqueJSString> propertyNameRef;
    211206   
    212     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass) {
     207    for (JSClassRef jsClass = classRef(); jsClass; jsClass = jsClass->parentClass) {
    213208        if (JSObjectDeletePropertyCallback deleteProperty = jsClass->deleteProperty) {
    214209            if (!propertyNameRef)
     
    247242ConstructType JSCallbackObject<Base>::getConstructData(ConstructData& constructData)
    248243{
    249     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass) {
     244    for (JSClassRef jsClass = classRef(); jsClass; jsClass = jsClass->parentClass) {
    250245        if (jsClass->callAsConstructor) {
    251246            constructData.native.function = construct;
     
    279274bool JSCallbackObject<Base>::implementsHasInstance() const
    280275{
    281     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass)
     276    for (JSClassRef jsClass = classRef(); jsClass; jsClass = jsClass->parentClass)
    282277        if (jsClass->hasInstance)
    283278            return true;
     
    292287    JSObjectRef thisRef = toRef(this);
    293288   
    294     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass) {
     289    for (JSClassRef jsClass = classRef(); jsClass; jsClass = jsClass->parentClass) {
    295290        if (JSObjectHasInstanceCallback hasInstance = jsClass->hasInstance)
    296291            return hasInstance(execRef, thisRef, toRef(value), toRef(exec->exceptionSlot()));
     
    303298CallType JSCallbackObject<Base>::getCallData(CallData& callData)
    304299{
    305     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass) {
     300    for (JSClassRef jsClass = classRef(); jsClass; jsClass = jsClass->parentClass) {
    306301        if (jsClass->callAsFunction) {
    307302            callData.native.function = call;
     
    319314    JSObjectRef thisObjRef = toRef(thisValue->toThisObject(exec));
    320315   
    321     for (JSClassRef jsClass = static_cast<JSCallbackObject<Base>*>(functionObject)->m_class; jsClass; jsClass = jsClass->parentClass) {
     316    for (JSClassRef jsClass = static_cast<JSCallbackObject<Base>*>(functionObject)->classRef(); jsClass; jsClass = jsClass->parentClass) {
    322317        if (JSObjectCallAsFunctionCallback callAsFunction = jsClass->callAsFunction) {
    323318            int argumentCount = static_cast<int>(args.size());
     
    339334    JSObjectRef thisRef = toRef(this);
    340335   
    341     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass) {
     336    for (JSClassRef jsClass = classRef(); jsClass; jsClass = jsClass->parentClass) {
    342337        if (JSObjectGetPropertyNamesCallback getPropertyNames = jsClass->getPropertyNames)
    343338            getPropertyNames(execRef, thisRef, toRef(&propertyNames));
     
    380375    JSObjectRef thisRef = toRef(this);
    381376   
    382     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass)
     377    for (JSClassRef jsClass = classRef(); jsClass; jsClass = jsClass->parentClass)
    383378        if (JSObjectConvertToTypeCallback convertToType = jsClass->convertToType) {
    384379            if (JSValueRef value = convertToType(ctx, thisRef, kJSTypeNumber, toRef(exec->exceptionSlot())))
     
    395390    JSObjectRef thisRef = toRef(this);
    396391   
    397     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass)
     392    for (JSClassRef jsClass = classRef(); jsClass; jsClass = jsClass->parentClass)
    398393        if (JSObjectConvertToTypeCallback convertToType = jsClass->convertToType) {
    399394            JSValueRef value = convertToType(ctx, thisRef, kJSTypeString, toRef(exec->exceptionSlot()));
     
    408403void JSCallbackObject<Base>::setPrivate(void* data)
    409404{
    410     m_privateData = data;
     405    m_callbackObjectData->privateData = data;
    411406}
    412407
     
    414409void* JSCallbackObject<Base>::getPrivate()
    415410{
    416     return m_privateData;
     411    return m_callbackObjectData->privateData;
    417412}
    418413
     
    420415bool JSCallbackObject<Base>::inherits(JSClassRef c) const
    421416{
    422     for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass)
     417    for (JSClassRef jsClass = classRef(); jsClass; jsClass = jsClass->parentClass)
    423418        if (jsClass == c)
    424419            return true;
     
    444439    RefPtr<OpaqueJSString> propertyNameRef;
    445440   
    446     for (JSClassRef jsClass = thisObj->m_class; jsClass; jsClass = jsClass->parentClass)
     441    for (JSClassRef jsClass = thisObj->classRef(); jsClass; jsClass = jsClass->parentClass)
    447442        if (OpaqueJSClassStaticValuesTable* staticValues = jsClass->staticValues(exec))
    448443            if (StaticValueEntry* entry = staticValues->get(propertyName.ustring().rep()))
     
    468463        return slot2.getValue(exec, propertyName);
    469464   
    470     for (JSClassRef jsClass = thisObj->m_class; jsClass; jsClass = jsClass->parentClass) {
     465    for (JSClassRef jsClass = thisObj->classRef(); jsClass; jsClass = jsClass->parentClass) {
    471466        if (OpaqueJSClassStaticFunctionsTable* staticFunctions = jsClass->staticFunctions(exec)) {
    472467            if (StaticFunctionEntry* entry = staticFunctions->get(propertyName.ustring().rep())) {
     
    492487    RefPtr<OpaqueJSString> propertyNameRef;
    493488   
    494     for (JSClassRef jsClass = thisObj->m_class; jsClass; jsClass = jsClass->parentClass)
     489    for (JSClassRef jsClass = thisObj->classRef(); jsClass; jsClass = jsClass->parentClass)
    495490        if (JSObjectGetPropertyCallback getProperty = jsClass->getProperty) {
    496491            if (!propertyNameRef)
Note: See TracChangeset for help on using the changeset viewer.