Thank you, Rupert, for your answer. About my expectations.
First example
-------------
1) x is an array, because we call x[-4/5], x[-1], x[0], x[1], x[4/5], x[6/10] in
makelist;
2) after x:makelist(...) x is a list;
3) x is a list therefore x[0] not exists.
Second example
--------------
1) x is an array and x[1]=a;
2) after x:makelist(...) x is a list (listp=true);
3) ... but x[0], x[-4/5], etc. are safe and sound
4) ... but (list)x[1] is not (array)x[-4/5]