+ JSArray* asArray(JSValue);
+
+ inline JSArray* asArray(JSCell* cell)
+ {
+ ASSERT(cell->inherits(&JSArray::s_info));
+ return static_cast<JSArray*>(cell);
+ }
+
+ inline JSArray* asArray(JSValue value)
+ {
+ return asArray(value.asCell());
+ }
+
+ inline bool isJSArray(JSGlobalData* globalData, JSCell* cell) { return cell->vptr() == globalData->jsArrayVPtr; }
+ inline bool isJSArray(JSGlobalData* globalData, JSValue v) { return v.isCell() && isJSArray(globalData, v.asCell()); }
+
+ inline void JSArray::visitChildrenDirect(SlotVisitor& visitor)
+ {
+ JSObject::visitChildrenDirect(visitor);
+
+ ArrayStorage* storage = m_storage;
+
+ unsigned usedVectorLength = std::min(storage->m_length, m_vectorLength);
+ visitor.appendValues(storage->m_vector, usedVectorLength, MayContainNullValues);