0.7.2.7:
making SUBTYPEP work better on ATOM (which is tricky because
it contains a naughty NOT, and which CMU CL SUBTYPEP
mostly punted on in a way that ANSI forbids), in a way
inspired by but different from CSR "get atom subtype"
patch...
...Do CALL-NEXT-METHOD, more or less, when before UNION-TYPE's
COMPLEX-SUBTYPEP-ARG2 would return NIL NIL.
...reviewed all COMPLEX-SUBTYPEP-ARG1 methods adding defensive
code to handle the new TYPE2 args that they may see now
...hacked HAIRY-COMPLEX-SUBTYPEP-ARG1 type method so that it
understands that ATOM isn't a subtype of any built-in
type except T and ATOM itself
(After changes above, we can deal with most of the cases that
CSR's patch did, but not yet (SUBTYPEP 'ATOM NIL). I
posted the code to sbcl-devel, got the green flag from
CSR, and forged ahead.)
...factored out the CALL-NEXT-METHOD-ish logic used in the
UNION-TYPE COMPLEX-SUBTYPEP-ARG2 method so that it can
be used in other COMPLEX-SUBTYPEP-ARG2 methods
...used the CALL-NEXT-METHOD-ish logic not only for NAMED
(to deal with (SUBTYPEP 'ATOM NIL)) but also in other
COMPLEX-SUBTYPEP-ARG2 methods which looked as though
they could (or just might) benefit from it
...The precondition "this will never be called with a hairy
type as TYPE2" in !HAS-SUPERCLASSES-COMPLEX-SUBTYPEP-ARG1
is now broken. (It would've been easier to figure this
out if the precondition had been expressed as an
assertion instead of just a comment. Oh well...)
...The SATISFIES FBOUNDP types floating around (mostly in pprint)
aren't really very good types in the sense of ANSI CL,
because they're not in general fixed sets, but can
change with time, so when the compiler attempts
reasonable tests and optimziations on them, things
will get confused. So convert them to explicit calls
to FBOUNDP, and/or just punt them somehow.
...Factor out the "type can conceal other types" predicate
in general. (Replace FLET SIMPLE-CTYPE?, and various
expressions involving HAIRY-TYPE-P, with a
TYPE-MIGHT-CONTAIN-OTHER-TYPES? CTYPE slot accessor,
and set that slot for HAIRY and COMPOUND CTYPEs.)
...Since there's an extra slot in CTYPE, we need to change
+FASL-FILE-VERSION+ again.
(Remove ridiculous #+(OR SBCL CMU) in my local CLOCC "ANSI"
test cases :TYPE-LEGACY-405, :TYPE-LEGACY-410, and
:TYPE-LEGACY-437. Otherwise we *fail* those tests now
that we have ANSI behavior! What were the CLOCC guys
thinking??)
Now bug #58 is gone too. Cool!