1.1 --- a/src/Array.cpp Mon Dec 24 02:56:02 2012 -0800
1.2 +++ b/src/Array.cpp Mon Dec 24 16:09:13 2012 -0800
1.3 @@ -273,6 +273,18 @@
1.4 if (!Struct::Copy(zone, left, right))
1.5 return false;
1.6 }
1.7 + } else if (contained->isArray() && ArrayType::cast(contained)->isFixedLength()) {
1.8 + assert(ArrayType::cast(source->type())->fixedLength() ==
1.9 + ArrayType::cast(contained)->fixedLength());
1.10 +
1.11 + Local<Array> left(zone);
1.12 + Local<Array> right(zone);
1.13 + for (unsigned i = 0; i < source->length(); i++) {
1.14 + left = Array::cast(dest->readObject(i));
1.15 + right = Array::cast(source->readObject(i));
1.16 + if (!Array::ShallowCopy(zone, left, right))
1.17 + return false;
1.18 + }
1.19 } else {
1.20 assert(dest->length() == source->length());
1.21 for (unsigned i = 0; i < source->length(); i++)
1.22 @@ -295,26 +307,9 @@
1.23 bool
1.24 Array::ShallowCopy(Zone *zone, Handle<Array> dest, Handle<Array> source)
1.25 {
1.26 -#if 0
1.27 - Local<Type> contained(zone, source->type()->contained());
1.28 - if (contained->isArray() && ArrayType::cast(contained)->isFixedLength()) {
1.29 - assert(dest->type()->contained()->isArray());
1.30 - assert(source->length() == dest->length());
1.31 + Local<Type> contained(zone, dest->type()->contained());
1.32
1.33 - Local<Array> left(zone);
1.34 - Local<Array> right(zone);
1.35 - for (unsigned i = 0; i < source->length(); i++) {
1.36 - left = Array::cast(dest->readObject(i));
1.37 - right = Array::cast(source->readObject(i));
1.38 - if (!ShallowCopy(zone, left, right))
1.39 - return false;
1.40 - }
1.41 - return true;
1.42 - }
1.43 -
1.44 -#endif
1.45 - assert(false);
1.46 - return false;
1.47 + return CopyArrayElements(zone, contained, dest, source);
1.48 }
1.49
1.50 Array *