Hi,
I have almost finished the new implementation of SUBTYPEP, and intend to=20
commit it to the CVS repository tomorrow afternoon. This implies severe=20
changes on the system, and, even though the new implementation solves man=
y=20
errors (There will be now only about 700 failures in the GCL testsuite),=
=20
there might pieces of ECL which still rely on old quirks.
So, I have tagged the CVS, as it is (with several fixes to the LOG*=20
operations), as STABLE. Therefore,
++++++++
+++ Please notify before tomorrow afternoon any problem to build ECL!
++++++++
Weak hearts should stay with this release until otherwise stated.
As a side note, the new implementation is based on Henry Baker's paper=20
(http://home.pipeline.com/~hbaker1/). However, I did not use separate tag=
s=20
for different type classes (arrays, intervals, classes, etc), but rather =
keep=20
them together.
Furthermore, handling of intervals is a bit more clever: the basic elemen=
t is=20
the interval (REAL a *) (Where "A" may be *, an integer, or a list with o=
ne=20
integer), and all other intervals are based on this:
INTEGER =3D> (AND INTEGER (REAL * *))
(RATIO 2 3) =3D> (AND RATIO (REAL 2 *) (NOT (REAL (3) *)))
(INTEGER 0 2) (AND INTEGER (REAL 0 *) (NOT (REAL 3 *)))
etc.
When facing a (SATISFIES whatever) or an unknown symbol, the algorithm si=
mply=20
gives up. There are NO OTHER situations in which the routine does not giv=
e a=20
definitive answer. I will probably add a flag, so that the system may sig=
nal=20
a correctable error when unknown type specifiers are found.
The best thing about having reimplemented SUBTYPEP is that now it is poss=
ible=20
to do types intersections and type inference accurately, and the compiler=
=20
will soon benefit from that!
Best regards
Juanjo
