src/Array.cpp
changeset 236 072f1114ea5d
parent 234 26e3035cdffc
child 247 7721042bdb67
     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 *