Changeset 13528


Ignore:
Timestamp:
08/21/11 20:03:44 (10 years ago)
Author:
ehuelsmann
Message:

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp

    r13527 r13528  
    30063006    (emit-getfield +lisp-thread+ "_values" +lisp-object-array+)
    30073007    (astore values-register)
    3008 
    3009     ;; we need to clear the values again:
    3010     ;;  some parts will consider a non-null _values array
    3011     ;;  by itself a legitimate return value (multiple values)
    3012     ;;  however, if we have a non-local return after the previous form
    3013     ;;  set the values array, other code may pick up the values instead
    3014     ;;  of the actual return code. (Fixes MULTIPLE-VALUE-PROG1.10)
    3015     (emit-clear-values)
    30163008    (compile-progn-body subforms nil nil)
    30173009    ;; Restore multiple values returned by first subform.
     
    38953887        ;; inside the block we're returning from?
    38963888        (unless (enclosed-by-protected-block-p block)
    3897           (unless (compiland-single-valued-p *current-compiland*)
    3898             (emit-clear-values))
     3889          (emit-clear-values)
    38993890          (compile-form result-form (block-target block) nil)
    39003891          (when (and (block-needs-environment-restoration block)
Note: See TracChangeset for help on using the changeset viewer.