[armedbear-cvs] r13528 - trunk/abcl/src/org/armedbear/lisp

ehuelsmann at common-lisp.net ehuelsmann at common-lisp.net
Sun Aug 21 20:03:45 UTC 2011


Author: ehuelsmann
Date: Sun Aug 21 13:03:44 2011
New Revision: 13528

Log:
Fix MULTIPLE-VALUE-PROG1.10 the right way.

Modified:
   trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp

Modified: trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp	Sun Aug 21 11:58:07 2011	(r13527)
+++ trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp	Sun Aug 21 13:03:44 2011	(r13528)
@@ -3005,14 +3005,6 @@
     (emit-push-current-thread)
     (emit-getfield +lisp-thread+ "_values" +lisp-object-array+)
     (astore values-register)
-
-    ;; we need to clear the values again:
-    ;;  some parts will consider a non-null _values array
-    ;;  by itself a legitimate return value (multiple values)
-    ;;  however, if we have a non-local return after the previous form
-    ;;  set the values array, other code may pick up the values instead
-    ;;  of the actual return code. (Fixes MULTIPLE-VALUE-PROG1.10)
-    (emit-clear-values)
     (compile-progn-body subforms nil nil)
     ;; Restore multiple values returned by first subform.
     (emit-push-current-thread)
@@ -3894,8 +3886,7 @@
         ;; Local case. Is the RETURN nested inside an UNWIND-PROTECT which is
         ;; inside the block we're returning from?
         (unless (enclosed-by-protected-block-p block)
-          (unless (compiland-single-valued-p *current-compiland*)
-            (emit-clear-values))
+          (emit-clear-values)
           (compile-form result-form (block-target block) nil)
           (when (and (block-needs-environment-restoration block)
                      (enclosed-by-environment-setting-block-p block))




More information about the armedbear-cvs mailing list