n *= 2
}
av1 := reflect.NewOpenArrayValue(av.Type(), av.Len(), n);
- reflect.CopyArray(av1, av, av.Len());
+ av1.CopyFrom(av, av.Len());
pv.SetSub(av1);
av = av1;
}
}
}
for tocopy := 1; tocopy <= 7; tocopy++ {
- CopyArray(vb.(PtrValue).Sub(), va.(PtrValue).Sub(), tocopy);
+ vb.(PtrValue).Sub().(ArrayValue).CopyFrom(va.(PtrValue).Sub(), tocopy);
for i := 0; i < tocopy; i++ {
if a[i] != b[i] {
t.Errorf("1 tocopy=%d a[%d]=%d, b[%d]=%d",
Cap() int;
Elem(i int) Value;
SetLen(len int);
+ CopyFrom(src ArrayValue, n int)
}
+func copyArray(dst ArrayValue, src ArrayValue, n int);
+
/*
Run-time representation of open arrays looks like this:
struct Array {
return newValueAddr(v.elemtype, Addr(data_uint));
}
+func (v *openArrayValueStruct) CopyFrom(src ArrayValue, n int) {
+ copyArray(v, src, n);
+}
+
type fixedArrayValueStruct struct {
commonValue;
elemtype Type;
return nil
}
+func (v *fixedArrayValueStruct) CopyFrom(src ArrayValue, n int) {
+ copyArray(v, src, n);
+}
+
func arrayCreator(typ Type, addr Addr) Value {
arraytype := typ.(ArrayType);
if arraytype.Open() {
return newValueAddr(typ, Addr(array));
}
-func CopyArray(dst ArrayValue, src ArrayValue, n int) {
+// Works on both fixed and open arrays.
+func copyArray(dst ArrayValue, src ArrayValue, n int) {
if n == 0 {
return
}