Changeset 11814
- Timestamp:
- 05/02/09 20:14:16 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp
r11798 r11814 7865 7865 (result-register (allocate-register)) 7866 7866 (values-register (allocate-register)) 7867 (return-address-register (allocate-register))7868 7867 (BEGIN-PROTECTED-RANGE (gensym)) 7869 7868 (END-PROTECTED-RANGE (gensym)) 7870 7869 (HANDLER (gensym)) 7871 (EXIT (gensym)) 7872 (CLEANUP (gensym))) 7870 (EXIT (gensym))) 7873 7871 ;; Make sure there are no leftover multiple return values from previous calls. 7874 7872 (emit-clear-values) … … 7881 7879 (astore values-register) 7882 7880 (label END-PROTECTED-RANGE)) 7883 (emit 'jsr CLEANUP) 7881 (dolist (subform cleanup-forms) 7882 (compile-form subform nil nil)) 7884 7883 (emit 'goto EXIT) ; Jump over handler. 7885 7884 (label HANDLER) ; Start of exception handler. 7886 7885 ;; The Throwable object is on the runtime stack. Stack depth is 1. 7887 7886 (astore exception-register) 7888 (emit 'jsr CLEANUP) ; Call cleanup forms. 7887 (dolist (subform cleanup-forms) 7888 (compile-form subform nil nil)) 7889 7889 (emit-clear-values) 7890 7890 (aload exception-register) 7891 7891 (emit 'athrow) ; Re-throw exception. 7892 (label CLEANUP) ; Cleanup forms.7893 ;; Return address is on stack here.7894 (astore return-address-register)7895 (dolist (subform cleanup-forms)7896 (compile-form subform nil nil))7897 (emit 'ret return-address-register)7898 7892 (label EXIT) 7899 7893 ;; Restore multiple values returned by protected form.
Note: See TracChangeset
for help on using the changeset viewer.