[iterate-devel] Differences between lisps

Robert Goldman rpgoldman at sift.info
Thu Jan 5 02:22:11 UTC 2012


I find that ACL 8.2 gets 4 failed tests on the latest iterate from darcs:

4 out of 261 total tests failed: ITERATE.TEST::CODE-MOVEMENT.ELSE,
   ITERATE.TEST::CODE-MOVEMENT.FINALLY,
   ITERATE.TEST::CODE-MOVEMENT.FINALLY-PROTECTED,
   ITERATE.TEST::BUG/WALK.2.

where SBCL seems to get only 1.  I say "seems to," since the call to
ASDF:TEST-SYSTEM does not print gracefully in SBCL, probably because of
the compiler being chatty:

1 out of 261 total tests failed: ITERATE.TEST::BUG/WALK.2.

For CODE-MOVEMENT.ELSE, I see a problem on ACL -- the function
local-binding-check does not raise an error on ACL, although it *IS*
invoked.

The bug seems to further be localized to the fact that the following
returns NIL on ACL:

(free-variables form)

looking further, this suggests that something goes wrong in the
code-walker in FREE-VARS.

Looking further, I think I have identified the divergence --- in ACL,
CL:RETURN is a special-operator, and in SBCL, it is not:

Allegro:
CL-USER> (special-operator-p 'return)
#<special operator RETURN @ #x1000054c32>

SBCL:
CL-USER> (special-operator-p 'return)
NIL

I believe the appropriate fix is to include RETURN in the first list of
special symbols in the case statement.  This will be benign for SBCL (it
won't visit that, since RETURN is not a special-operator), but should
fix things for ACL.

Making that change, I see that now both ACL and SBCL have only one test
failure.

Best,
r




More information about the iterate-devel mailing list