From ad0d549d4cc13433f77c1ac8f0ab379c83d93f28 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Fri, 24 Feb 2012 16:36:50 +0100 Subject: Imported WebKit commit bb52bf3c0119e8a128cd93afe5572413a8617de9 (http://svn.webkit.org/repository/webkit/trunk@108790) --- Source/JavaScriptCore/runtime/JSArray.h | 35 +++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 13 deletions(-) (limited to 'Source/JavaScriptCore/runtime/JSArray.h') diff --git a/Source/JavaScriptCore/runtime/JSArray.h b/Source/JavaScriptCore/runtime/JSArray.h index a3354c602..3bb4c6320 100644 --- a/Source/JavaScriptCore/runtime/JSArray.h +++ b/Source/JavaScriptCore/runtime/JSArray.h @@ -28,6 +28,7 @@ namespace JSC { class JSArray; + class LLIntOffsetsExtractor; struct SparseArrayEntry : public WriteBarrier { typedef WriteBarrier Base; @@ -116,12 +117,15 @@ namespace JSC { unsigned m_numValuesInVector; void* m_allocBase; // Pointer to base address returned by malloc(). Keeping this pointer does eliminate false positives from the leak detector. #if CHECK_ARRAY_CONSISTENCY - bool m_inCompactInitialization; + uintptr_t m_inCompactInitialization; // Needs to be a uintptr_t for alignment purposes. +#else + uintptr_t m_padding; #endif WriteBarrier m_vector[1]; }; class JSArray : public JSNonFinalObject { + friend class LLIntOffsetsExtractor; friend class Walker; protected: @@ -135,23 +139,14 @@ namespace JSC { static void finalize(JSCell*); - static JSArray* create(JSGlobalData& globalData, Structure* structure, unsigned initialLength = 0) - { - JSArray* array = new (NotNull, allocateCell(globalData.heap)) JSArray(globalData, structure); - array->finishCreation(globalData, initialLength); - return array; - } + static JSArray* create(JSGlobalData&, Structure*, unsigned initialLength = 0); // tryCreateUninitialized is used for fast construction of arrays whose size and // contents are known at time of creation. Clients of this interface must: // - null-check the result (indicating out of memory, or otherwise unable to allocate vector). // - call 'initializeIndex' for all properties in sequence, for 0 <= i < initialLength. // - called 'completeInitialization' after all properties have been initialized. - static JSArray* tryCreateUninitialized(JSGlobalData& globalData, Structure* structure, unsigned initialLength) - { - JSArray* array = new (NotNull, allocateCell(globalData.heap)) JSArray(globalData, structure); - return array->tryFinishCreationUninitialized(globalData, initialLength); - } + static JSArray* tryCreateUninitialized(JSGlobalData&, Structure*, unsigned initialLength); JS_EXPORT_PRIVATE static bool defineOwnProperty(JSObject*, ExecState*, const Identifier&, PropertyDescriptor&, bool throwException); @@ -253,6 +248,8 @@ namespace JSC { JS_EXPORT_PRIVATE static void visitChildren(JSCell*, SlotVisitor&); + void enterDictionaryMode(JSGlobalData&); + protected: static const unsigned StructureFlags = OverridesGetOwnPropertySlot | OverridesVisitChildren | OverridesGetPropertyNames | JSObject::StructureFlags; static void put(JSCell*, ExecState*, const Identifier& propertyName, JSValue, PutPropertySlot&); @@ -274,7 +271,6 @@ namespace JSC { void setLengthWritable(ExecState*, bool writable); void putDescriptor(ExecState*, SparseArrayEntry*, PropertyDescriptor&, PropertyDescriptor& old); bool defineOwnNumericProperty(ExecState*, unsigned, PropertyDescriptor&, bool throwException); - void enterDictionaryMode(JSGlobalData&); void allocateSparseMap(JSGlobalData&); void deallocateSparseMap(); @@ -299,6 +295,19 @@ namespace JSC { void* m_subclassData; // A JSArray subclass can use this to fill the vector lazily. }; + inline JSArray* JSArray::create(JSGlobalData& globalData, Structure* structure, unsigned initialLength) + { + JSArray* array = new (NotNull, allocateCell(globalData.heap)) JSArray(globalData, structure); + array->finishCreation(globalData, initialLength); + return array; + } + + inline JSArray* JSArray::tryCreateUninitialized(JSGlobalData& globalData, Structure* structure, unsigned initialLength) + { + JSArray* array = new (NotNull, allocateCell(globalData.heap)) JSArray(globalData, structure); + return array->tryFinishCreationUninitialized(globalData, initialLength); + } + JSArray* asArray(JSValue); inline JSArray* asArray(JSCell* cell) -- cgit v1.2.1