#460: upgraded-array-element-type/class-of for arrays -------------------------+---------------------------- Reporter: mevenson | Owner: Type: defect | Status: new Priority: major | Milestone: 1.5.1 Component: interpreter | Version: 1.6.0-dev Keywords: | Parent Tickets: -------------------------+---------------------------- Alan notes in https://github.com/armedbear/abcl/issues/84 {{{ No code of mine depends on this, but I was reading an article and it prompted me to check types of arrays and how upgraded-array-element-type works.
Bottom line is that it isn't consistent.
CL-USER> (make-array 1 :element-type '(unsigned-byte 16)) #(0) CL-USER> (jobject-class *) #<java class org.armedbear.lisp.BasicVector_UnsignedByte16 {6F28B4E2}> CL-USER> (class-of (make-array 1 :element-type '(unsigned-byte 16))) #<built-in-class vector {352D86C9}> CL-USER> (upgraded-array-element-type '(unsigned-byte 16)) (unsigned-byte 16) CL-USER> (make-array 1 :element-type '(unsigned-byte 17)) #(0) CL-USER> (jobject-class *) #<java class org.armedbear.lisp.BasicVector_UnsignedByte32 {1C49E33C}> CL-USER> (upgraded-array-element-type '(unsigned-byte 17)) t CL-USER> (class-of (make-array 1 :element-type '(unsigned-byte 17))) #<built-in-class vector {352D86C9}>
Summary:
Implementation of arrays of unsigned byte 16 vs 17 are different class-of reports the same type upgraded-array-element-type of (unsigned-byte 17) reports t, but it is in fact (unsigned-byte 32) trying to set array element of (unsigned-byte 17) to int larger than 2^17 works, but not setting to a symbol, as type t would imply }}}
-- Ticket URL: http://abcl.org/trac/ticket/460 armedbear http://abcl.org armedbear