Changeset 11851 for trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp
- Timestamp:
- 05/09/09 20:05:25 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp
r11847 r11851 4412 4412 (END-BLOCK (gensym)) 4413 4413 (EXIT (gensym)) 4414 (must-clear-values nil) 4415 environment-register) 4416 (when (block-needs-environment-restoration block) 4417 (setf environment-register (allocate-register) 4418 (block-environment-register block) environment-register)) 4414 (must-clear-values nil)) 4419 4415 ;; Scan for tags. 4420 4416 (dolist (tag (block-tags block)) 4421 4417 (push tag *visible-tags*)) 4422 4418 4423 (when environment-register4424 ;; Note: we store the environment register,4425 ;; but since we don't manipulate the environment,4426 ;; we don't need to restore.4427 ;;4428 ;; It's here so local transfers of control can restore4429 ;; what we started with.4430 ;;4431 ;; Non-local transfers of control restore the environment4432 ;; themselves (in the finally of LET/LET*, etc.4433 (save-dynamic-environment environment-register))4434 4419 (label BEGIN-BLOCK) 4435 4420 (do* ((rest body (cdr rest)) … … 4510 4495 ;; Local case with local transfer of control 4511 4496 ;; Note: Local case with non-local transfer of control handled below 4512 (when (block-environment-register tag-block) 4497 (when (and (block-needs-environment-restoration tag-block) 4498 (enclosed-by-environment-setting-block-p tag-block)) 4513 4499 ;; If there's a dynamic environment to restore, do it. 4514 (restore-dynamic-environment ( block-environment-registertag-block)))4500 (restore-dynamic-environment (environment-register-to-restore tag-block))) 4515 4501 (maybe-generate-interrupt-check) 4516 4502 (emit 'goto (tag-label tag)) … … 4620 4606 (dformat t "*all-variables* = ~S~%" 4621 4607 (mapcar #'variable-name *all-variables*)) 4622 (when (block-needs-environment-restoration block)4623 ;; Save the current dynamic environment.4624 (setf (block-environment-register block) (allocate-register))4625 (save-dynamic-environment (block-environment-register block)))4626 4608 (setf (block-catch-tag block) (gensym)) 4627 4609 (let* ((*register* *register*) … … 4658 4640 *handlers*))) 4659 4641 (label BLOCK-EXIT)) 4660 (when (block-environment-register block)4661 ;; We saved the dynamic environment above. Restore it now.4662 (restore-dynamic-environment (block-environment-register block)))4663 4642 (fix-boxing representation nil))))) 4664 4643 … … 4682 4661 (emit-clear-values)) 4683 4662 (compile-form result-form (block-target block) nil) 4663 (when (and (block-needs-environment-restoration block) 4664 (enclosed-by-environment-setting-block-p block)) 4665 (restore-dynamic-environment (environment-register-to-restore block))) 4684 4666 (emit 'goto (block-exit block)) 4685 4667 (return-from p2-return-from))))
Note: See TracChangeset
for help on using the changeset viewer.