diff -r 43287eef2fff -r 072f1114ea5d src/Array.cpp --- a/src/Array.cpp Mon Dec 24 02:56:02 2012 -0800 +++ b/src/Array.cpp Mon Dec 24 16:09:13 2012 -0800 @@ -273,6 +273,18 @@ if (!Struct::Copy(zone, left, right)) return false; } + } else if (contained->isArray() && ArrayType::cast(contained)->isFixedLength()) { + assert(ArrayType::cast(source->type())->fixedLength() == + ArrayType::cast(contained)->fixedLength()); + + Local left(zone); + Local right(zone); + for (unsigned i = 0; i < source->length(); i++) { + left = Array::cast(dest->readObject(i)); + right = Array::cast(source->readObject(i)); + if (!Array::ShallowCopy(zone, left, right)) + return false; + } } else { assert(dest->length() == source->length()); for (unsigned i = 0; i < source->length(); i++) @@ -295,26 +307,9 @@ bool Array::ShallowCopy(Zone *zone, Handle dest, Handle source) { -#if 0 - Local contained(zone, source->type()->contained()); - if (contained->isArray() && ArrayType::cast(contained)->isFixedLength()) { - assert(dest->type()->contained()->isArray()); - assert(source->length() == dest->length()); + Local contained(zone, dest->type()->contained()); - Local left(zone); - Local right(zone); - for (unsigned i = 0; i < source->length(); i++) { - left = Array::cast(dest->readObject(i)); - right = Array::cast(source->readObject(i)); - if (!ShallowCopy(zone, left, right)) - return false; - } - return true; - } - -#endif - assert(false); - return false; + return CopyArrayElements(zone, contained, dest, source); } Array *