Ignore:
Timestamp:
Aug 7, 2010, 10:29:38 PM (15 years ago)
Author:
[email protected]
Message:

2010-08-07 Michael Saboff <[email protected]>

Reviewed by Geoffrey Garen.

Revert JSArray to point to the beginning of the contained ArrayStorage
struct. This is described in
https://bugs.webkit.org/show_bug.cgi?id=43526.

  • jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emit_op_put_by_val): (JSC::JIT::privateCompilePatchGetArrayLength):
  • jit/JITPropertyAccess32_64.cpp: (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emit_op_put_by_val): (JSC::JIT::privateCompilePatchGetArrayLength):
  • runtime/JSArray.cpp: (JSC::JSArray::JSArray): (JSC::JSArray::~JSArray): (JSC::JSArray::getOwnPropertySlot): (JSC::JSArray::getOwnPropertyDescriptor): (JSC::JSArray::put): (JSC::JSArray::putSlowCase): (JSC::JSArray::deleteProperty): (JSC::JSArray::getOwnPropertyNames): (JSC::JSArray::getNewVectorLength): (JSC::JSArray::increaseVectorLength): (JSC::JSArray::increaseVectorPrefixLength): (JSC::JSArray::setLength): (JSC::JSArray::pop): (JSC::JSArray::push): (JSC::JSArray::shiftCount): (JSC::JSArray::unshiftCount): (JSC::JSArray::sortNumeric): (JSC::JSArray::sort): (JSC::JSArray::fillArgList): (JSC::JSArray::copyToRegisters): (JSC::JSArray::compactForSorting): (JSC::JSArray::subclassData): (JSC::JSArray::setSubclassData): (JSC::JSArray::checkConsistency):
  • runtime/JSArray.h: (JSC::JSArray::length): (JSC::JSArray::canGetIndex): (JSC::JSArray::getIndex): (JSC::JSArray::setIndex): (JSC::JSArray::uncheckedSetIndex): (JSC::JSArray::markChildrenDirect):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/runtime/JSArray.h

    r64602 r64937  
    7878        static JS_EXPORTDATA const ClassInfo info;
    7979       
    80         unsigned length() const { return arrayStorage()->m_length; }
     80        unsigned length() const { return m_storage->m_length; }
    8181        void setLength(unsigned); // OK to use on new arrays, but not if it might be a RegExpMatchArray.
    8282
     
    9191        void unshiftCount(ExecState*, int count);
    9292
    93         bool canGetIndex(unsigned i) { return i < m_vectorLength && m_vector[i]; }
     93        bool canGetIndex(unsigned i) { return i < m_vectorLength && m_storage->m_vector[i]; }
    9494        JSValue getIndex(unsigned i)
    9595        {
    9696            ASSERT(canGetIndex(i));
    97             return m_vector[i];
     97            return m_storage->m_vector[i];
    9898        }
    9999
     
    103103            ASSERT(canSetIndex(i));
    104104           
    105             JSValue& x = m_vector[i];
     105            JSValue& x = m_storage->m_vector[i];
    106106            if (!x) {
    107                 ArrayStorage *storage = arrayStorage();
     107                ArrayStorage *storage = m_storage;
    108108                ++storage->m_numValuesInVector;
    109109                if (i >= storage->m_length)
     
    116116        {
    117117            ASSERT(canSetIndex(i));
    118             ArrayStorage *storage = arrayStorage();
     118            ArrayStorage *storage = m_storage;
    119119#if CHECK_ARRAY_CONSISTENCY
    120120            ASSERT(storage->m_inCompactInitialization);
     
    144144        void setSubclassData(void*);
    145145       
    146         inline ArrayStorage *arrayStorage() const
    147         {
    148             return reinterpret_cast<ArrayStorage*>(reinterpret_cast<char*>(m_vector) - (sizeof(ArrayStorage) - sizeof(JSValue)));
    149         }
    150 
    151         inline void setArrayStorage(ArrayStorage *storage)
    152         {
    153             m_vector = &storage->m_vector[0];
    154         }
    155 
    156146    private:
    157147        virtual const ClassInfo* classInfo() const { return &info; }
     
    171161        unsigned m_vectorLength; // The valid length of m_vector
    172162        int m_indexBias; // The number of JSValue sized blocks before ArrayStorage.
    173         JSValue* m_vector; // Copy of ArrayStorage.m_vector.  Used for quick vector access and to materialize ArrayStorage ptr.
     163        ArrayStorage *m_storage;
    174164    };
    175165
     
    197187        JSObject::markChildrenDirect(markStack);
    198188       
    199         ArrayStorage* storage = arrayStorage();
     189        ArrayStorage* storage = m_storage;
    200190
    201191        unsigned usedVectorLength = std::min(storage->m_length, m_vectorLength);
Note: See TracChangeset for help on using the changeset viewer.