Ignore:
Timestamp:
05/03/09 10:10:21 (14 years ago)
Author:
ehuelsmann
Message:

Make local GO restore the environment of the TAGBODY,
in case it jumps out of blocks setting the environment.

File:
1 edited

Legend:

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

    r11819 r11820  
    361361      (cond ((eq (tag-compiland tag) *current-compiland*)
    362362             ;; Does the GO leave an enclosing UNWIND-PROTECT?
    363              (when (enclosed-by-protected-block-p tag-block)
    364                (setf (block-non-local-go-p tag-block) t)))
     363             (if (enclosed-by-protected-block-p tag-block)
     364                 (setf (block-non-local-go-p tag-block) t)
     365                 ;; non-local GO's ensure environment restoration
     366                 ;; find out about this local GO
     367                 (when (null (block-needs-environment-restoration tag-block))
     368                   (setf (block-needs-environment-restoration tag-block)
     369                         (enclosed-by-environment-setting-block-p tag-block)))))
    365370            (t
    366371             (setf (block-non-local-go-p tag-block) t)))))
Note: See TracChangeset for help on using the changeset viewer.