diff -r 9308d52205a0 -r bab29bcec7fe src/ObjectVisitor.h --- a/src/ObjectVisitor.h Sun Sep 16 19:02:23 2012 -0700 +++ b/src/ObjectVisitor.h Sun Sep 16 21:34:10 2012 -0700 @@ -117,14 +117,9 @@ } size_t iterateArray(Array *array, ArrayMap *map) { - assert(map->type()->isArray()); - if (map->type()->contained()->isTraceable()) { - unsigned length = array->length(); - Object **vec = array->objVec(); - for (unsigned i = 0; i < length; i++) - this->visit(vec + i); - } - return Array::SizeOf(array); + if (!map->type()->fixedLength() || map->type()->contained()->isTraceable()) + visitField(array, Array::offsetOfElements()); + return array->objSize(map); } size_t iterateBox(Box *obj) { @@ -289,7 +284,7 @@ return sizeof(Native); case MapKind_Array: - return Align(Array::SizeOf(Array::cast(obj)), kObjectAlignment); + return Align(Array::cast(obj)->objSize(ArrayMap::cast(map)), kObjectAlignment); case MapKind_Box: return sizeof(Box);