From: Christophe R. <cs...@ca...> - 2004-09-05 21:35:39
|
Brian Mastenbrook <bma...@cs...> writes: > On Sep 3, 2004, at 8:43 PM, Brian Mastenbrook wrote: > >> Is this really the right thing to do? I haven't been following the >> character branch but this looks to me like simple-base-string is now >> a string of characters, not just base-chars. I am making these >> changes on the sparc backend right now and this was a bit of a red >> flag to me. > > Oops. "we're never going to want to distinguish the CHARACTERness vs > BASE-CHARness of characters by their widetags, because we can do it > based on their CHAR-CODE; thus, calling the primitive type and storage > classes BASE-CHAR is unneccesarily confusing." I guess this makes > sense in that context, since base-char and character are the same > storage class. I sent Brian mail explaining more-or-less this in a little more detail: for the interested, here's the text of my reply: They're right, I think: that's because the types that the backends deal with aren't lisp types (where BASE-CHAR and CHARACTER are distinct) but "primitive types", or possibly representational types: to the underlying system, there is no difference in representation between a base-char and a character -- they share a lowtag/widetag, but are different in the immediate data. So, from the point of view of the vm, the primitive type that CHAR on a base-string returns is a CHARACTER, and it needs to fit in a CHARACTER-REG: we rely on the typechecking in layers above to enforce the constraint that only BASE-CHARs fit in a BASE-STRING. Cheers, Christophe |