[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