diff -r 749ff001f9ff src/org/armedbear/lisp/compiler-pass2.lisp
a
|
b
|
|
4869 | 4869 | (*register* *register*) |
4870 | 4870 | (BEGIN-BLOCK (gensym)) |
4871 | 4871 | (END-BLOCK (gensym)) |
4872 | | (BLOCK-EXIT (block-exit block))) |
| 4872 | (BLOCK-EXIT (block-exit block)) |
| 4873 | (BLOCK-EXIT-THIS-BLOCK (gensym))) |
4873 | 4874 | (setf (block-target block) target) |
4874 | 4875 | (when (block-id-variable block) |
4875 | 4876 | ;; we have a block variable; that should be a closure variable |
… |
… |
|
4905 | 4906 | (label THIS-BLOCK) |
4906 | 4907 | (emit 'getfield +lisp-return-class+ "result" +lisp-object+) |
4907 | 4908 | (emit-move-from-stack target) ; Stack depth is 0. |
| 4909 | (emit 'goto BLOCK-EXIT-THIS-BLOCK) |
4908 | 4910 | ;; Finally... |
4909 | 4911 | (push (make-handler :from BEGIN-BLOCK |
4910 | 4912 | :to END-BLOCK |
… |
… |
|
4920 | 4922 | (when (block-id-variable block) |
4921 | 4923 | (emit 'aconst_null) ;; load null value |
4922 | 4924 | (emit-move-to-variable (block-id-variable block))) |
| 4925 | (label BLOCK-EXIT-THIS-BLOCK) |
4923 | 4926 | (fix-boxing representation nil))) |
4924 | 4927 | |
4925 | 4928 | (defknown p2-return-from (t t t) t) |