Hi Stas, Blake,
On Wed, Oct 26, 2011 at 11:54 AM, Stas Boukarev stassats@gmail.com wrote:
Blake McBride blake@mcbride.name writes:
Figured it out:
(array-element-type (make-array '(2 2) :element-type 'fixnum :initial-contents '((1 2)(3 4))))
T
You could check that with (upgraded-array-element-type 'fixnum) => T
And to check all types (loop for symbol being the symbols in :cl when (not (eql t (or (ignore-errors (upgraded-array-element-type symbol)) t))) collect symbol) => (BIT STANDARD-CHAR BASE-CHAR CHARACTER)
Seems we need to be better at detecting specializer types:
We have types for vectors and arrays of higher rank with elements of:
* UNSIGNED-BYTE 8 * UNSIGNED-BYTE 16 * UNSIGNED-BYTE 32
But it seems that the upgraded type of FIXNUM doesn't fit in UNSIGNED-BYTE 32; I'd say we need specialized arrays for SIGNED-BYTE 8, SIGNED-BYTE 32 (aka fixnum) and maybe SIGNED-BYTE 64 (aka JAVA-LONG) as well.
It's easy to implement. Nobody did it yet, that's all.
BTW: I answered this mail by looking at src/org/armedbear/lisp/make_array.java -- for those interested.
Hope that helps.
Bye,
Erik.