I think the compiler is a little confused over its UNBOXED-ARRAY and
The UNBOXED-ARRAY type is used in the compiler and fopcompiler to mean
"no pointers are contained in this object". This is the only use of
either type with arbitrary dimensions, apart from what I think is an
erroneous one in src/compiler/array-tran.lisp, in DEFTRANSFORM AREF,
using simple-unboxed-array where it should be using
(simple-unboxed-array (*)). [Also, why is there no %aset transform
The remaining uses of this type are of (simple-unboxed-array (*)), to
mean "immediate data vector with no GC implications". Note that in
both cases "unboxed" is a bit of a misnomer, as the fixnum array
contains boxes. Nathan Froyd (on #lisp) observed that the type test
for that type was awful, and indeed it is: it involves masses of
lowtag/widetag test pairs, because each of the array types is tested
separately. (This latter problem is where I came in).
Fixing the type testing is straightforward: defining a new set of type
vops in src/compiler/generic/late-type-vops.lisp would let backends
check the widetag set in a few instructions instead of many. But I
don't want to do that before clarifying what these types are for, so
that I can rename them to something sensible at the same time.
(Oh, there's also one use in fd-streams. It's a little bit of a weird
Get latest updates about Open Source Projects, Conferences and News.