Simply because dereferencing a dyn. arrays makes no sense because
it is more than just a simply data collection.
Realy? What else is happening in the background?
Reference counting (also of the stored data), automatic length storage.
But that has nothing to do with the fact that the identifier "MyArray" should have the
same address as "MyArray[0]" so that both should be usable for move or fillchar. The
first means the whole array while the latter means the first element only.
So what is the difference between 'MyArray[0]' and 'MyArray^'?
MyArray[0] enforces range checking if it is enabled, further
differences, see below.
Still this is not relevant when using MyArray^ instead of MyArray[0]. Both
should mean the same address (and that's the only thing that move/fillchar
need). In case the used pointer is nil a runtime error could occur when trying
to dereference it (as is done for other pointers too).
Don't they mean the same address?
I would expect to get @MyArray[0]-sizeof(pointer)*2 when doing MyArray^
(which is not allowed), because this is the start of the actual array
information.
I don't. I think it is the same as for AnsiStrings: The pointer points to the first element and the reference counter is stored at lower addresses. So you should be able to move x bytes from the beginning of MyArray without the need to know the first element number.
The identifier of a dynamic array should either be a pointer (so that it has to be dereferenced with ^ when accessing elements) or it should mean the beginning of the array (starting with the first element) *in all cases* (not only in some as it's now).
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal