From: Sam S. <sd...@gn...> - 2002-08-02 22:55:22
|
> * In message <ap31y9klv35.fsf@y.glue.umd.edu> > * On the subject of "[clisp bug] assoc code fails *only* when compiled..." > * Sent on 30 Jul 2002 18:17:02 -0400 > * Honorable "D. Goel" <de...@gl...> writes: > > [1] Here's a small piece of code, which works great in lisp, compiles > fine, with no warnings or errors, but gives bizarre untraceable errors > when running the compiled code. IMHO, either it should run fine when > compiled, or else---> it should break when uncompiled as well, and > should give warnings or errors when being compiled. FWIW, franz's CL > runs this code just when even when compiled. The code is: > > (assoc (list 1 2) (list (list 1 2) 3) :test #'equal :test #'equal) > > > BTW, the error message was really even more bizarre for the way i had > actually implemeted the code ---- i had defined an assoc-equal --whcih > was like assoc, except that the default was equal. Then, i had called > this assoc-equal with arguments :test #equal. patch appended -- thanks for the bug report! -- Sam Steingold (http://www.podval.org/~sds) running RedHat7.3 GNU/Linux <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.palestine-central.com/links.html> Linux - find out what you've been missing while you've been rebooting Windows --- compiler.lisp.~1.91.~ Fri Aug 2 17:53:37 2002 +++ compiler.lisp Fri Aug 2 18:32:18 2002 @@ -3863,11 +3863,17 @@ ;; and the Slot is still empty ;; for-value = NIL: ALLOW-allowed Keyword ;; or Slot already filled + (unless for-value + (c-warn + (TEXT "~S: ignored duplicate keyword ~S ~S") + fun key arg)) (let* ((*stackz* (cons 0 *stackz*)) ; 0 will be replaced later (anode (c-form arg (if for-value 'ONE 'NIL)))) (seclass-or-f seclass anode) - (push (list t (second tripel) anode *stackz*) L)) + (push (list t (second tripel) anode *stackz* + for-value) + L)) (setf (third tripel) nil))) (nreverse L)))) (let ((depth1 0) @@ -3942,7 +3948,7 @@ ;; correct stack-depth (setf (first (fourth anodeetc)) depth-now) (push (third anodeetc) codelist) - (when (second anodeetc) + (when (and (second anodeetc) (fifth anodeetc)) (push `(STORE ,(- (second anodeetc) depth2)) codelist))))) ;; now codelist-from-end: |