Changeset 11823 for trunk/abcl/src
- Timestamp:
- 05/03/09 19:01:53 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp
r11820 r11823 7872 7872 (result-register (allocate-register)) 7873 7873 (values-register (allocate-register)) 7874 (return-address-register (allocate-register)) 7874 7875 (BEGIN-PROTECTED-RANGE (gensym)) 7875 7876 (END-PROTECTED-RANGE (gensym)) 7876 7877 (HANDLER (gensym)) 7877 (EXIT (gensym))) 7878 (EXIT (gensym)) 7879 (CLEANUP (gensym))) 7878 7880 ;; Make sure there are no leftover multiple return values from previous calls. 7879 7881 (emit-clear-values) … … 7887 7889 (astore values-register)) 7888 7890 (label END-PROTECTED-RANGE)) 7889 (dolist (subform cleanup-forms) 7890 (compile-form subform nil nil)) 7891 (emit 'jsr CLEANUP) 7891 7892 (emit 'goto EXIT) ; Jump over handler. 7892 7893 (label HANDLER) ; Start of exception handler. 7893 7894 ;; The Throwable object is on the runtime stack. Stack depth is 1. 7894 7895 (astore exception-register) 7895 (dolist (subform cleanup-forms) 7896 (compile-form subform nil nil)) 7896 (emit 'jsr CLEANUP) ; Call cleanup forms. 7897 7897 (maybe-emit-clear-values cleanup-forms) 7898 7898 (aload exception-register) 7899 7899 (emit 'athrow) ; Re-throw exception. 7900 (label CLEANUP) ; Cleanup forms. 7901 ;; Return address is on stack here. 7902 (astore return-address-register) 7903 (dolist (subform cleanup-forms) 7904 (compile-form subform nil nil)) 7905 (emit 'ret return-address-register) 7900 7906 (label EXIT) 7901 7907 ;; Restore multiple values returned by protected form.
Note: See TracChangeset
for help on using the changeset viewer.