diff options
author | Ben Murdoch <benm@google.com> | 2010-08-11 14:44:44 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2010-08-12 19:15:41 +0100 |
commit | dd8bb3de4f353a81954234999f1fea748aee2ea9 (patch) | |
tree | 729b52bf09294f0d6c67cd5ea80aee1b727b7bd8 /JavaScriptCore/runtime/JSArray.h | |
parent | f3d41ba51d86bf719c7a65ab5297aea3c17e2d98 (diff) | |
download | external_webkit-dd8bb3de4f353a81954234999f1fea748aee2ea9.zip external_webkit-dd8bb3de4f353a81954234999f1fea748aee2ea9.tar.gz external_webkit-dd8bb3de4f353a81954234999f1fea748aee2ea9.tar.bz2 |
Merge WebKit at r65072 : Initial merge by git.
Change-Id: Ibcf418498376b2660aacb7f8d46ea7085ef91585
Diffstat (limited to 'JavaScriptCore/runtime/JSArray.h')
-rw-r--r-- | JavaScriptCore/runtime/JSArray.h | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/JavaScriptCore/runtime/JSArray.h b/JavaScriptCore/runtime/JSArray.h index a7ce328..f718d7e 100644 --- a/JavaScriptCore/runtime/JSArray.h +++ b/JavaScriptCore/runtime/JSArray.h @@ -39,6 +39,7 @@ namespace JSC { unsigned m_numValuesInVector; SparseArrayValueMap* m_sparseValueMap; void* subclassData; // A JSArray subclass can use this to fill the vector lazily. + void* m_allocBase; // Pointer to base address returned by malloc(). Keeping this pointer does eliminate false positives from the leak detector. size_t reportedMapCapacity; #if CHECK_ARRAY_CONSISTENCY bool m_inCompactInitialization; @@ -61,6 +62,9 @@ namespace JSC { friend class Walker; public: + enum VPtrStealingHackType { VPtrStealingHack }; + JSArray(VPtrStealingHackType); + explicit JSArray(NonNullPassRefPtr<Structure>); JSArray(NonNullPassRefPtr<Structure>, unsigned initialLength, ArrayCreationMode); JSArray(NonNullPassRefPtr<Structure>, const ArgList& initialValues); @@ -73,7 +77,7 @@ namespace JSC { static JS_EXPORTDATA const ClassInfo info; - unsigned length() const { return arrayStorage()->m_length; } + unsigned length() const { return m_storage->m_length; } void setLength(unsigned); // OK to use on new arrays, but not if it might be a RegExpMatchArray. void sort(ExecState*); @@ -86,11 +90,11 @@ namespace JSC { void shiftCount(ExecState*, int count); void unshiftCount(ExecState*, int count); - bool canGetIndex(unsigned i) { return i < m_vectorLength && m_vector[i]; } + bool canGetIndex(unsigned i) { return i < m_vectorLength && m_storage->m_vector[i]; } JSValue getIndex(unsigned i) { ASSERT(canGetIndex(i)); - return m_vector[i]; + return m_storage->m_vector[i]; } bool canSetIndex(unsigned i) { return i < m_vectorLength; } @@ -98,9 +102,9 @@ namespace JSC { { ASSERT(canSetIndex(i)); - JSValue& x = m_vector[i]; + JSValue& x = m_storage->m_vector[i]; if (!x) { - ArrayStorage *storage = arrayStorage(); + ArrayStorage *storage = m_storage; ++storage->m_numValuesInVector; if (i >= storage->m_length) storage->m_length = i + 1; @@ -111,7 +115,7 @@ namespace JSC { void uncheckedSetIndex(unsigned i, JSValue v) { ASSERT(canSetIndex(i)); - ArrayStorage *storage = arrayStorage(); + ArrayStorage *storage = m_storage; #if CHECK_ARRAY_CONSISTENCY ASSERT(storage->m_inCompactInitialization); #endif @@ -139,16 +143,6 @@ namespace JSC { void* subclassData() const; void setSubclassData(void*); - inline ArrayStorage *arrayStorage() const - { - return reinterpret_cast<ArrayStorage*>(reinterpret_cast<char*>(m_vector) - (sizeof(ArrayStorage) - sizeof(JSValue))); - } - - inline void setArrayStorage(ArrayStorage *storage) - { - m_vector = &storage->m_vector[0]; - } - private: virtual const ClassInfo* classInfo() const { return &info; } @@ -166,7 +160,7 @@ namespace JSC { unsigned m_vectorLength; // The valid length of m_vector int m_indexBias; // The number of JSValue sized blocks before ArrayStorage. - JSValue* m_vector; // Copy of ArrayStorage.m_vector. Used for quick vector access and to materialize ArrayStorage ptr. + ArrayStorage *m_storage; }; JSArray* asArray(JSValue); @@ -192,7 +186,7 @@ namespace JSC { { JSObject::markChildrenDirect(markStack); - ArrayStorage* storage = arrayStorage(); + ArrayStorage* storage = m_storage; unsigned usedVectorLength = std::min(storage->m_length, m_vectorLength); markStack.appendValues(storage->m_vector, usedVectorLength, MayContainNullValues); |