Changeset 11705
- Timestamp:
- 03/14/09 20:18:57 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp
r11704 r11705 4089 4089 (vars (second form)) 4090 4090 (bind-special-p nil) 4091 (variables (block-vars block))) 4091 (variables (block-vars block)) 4092 (label-START (gensym)) 4093 (label-END (gensym)) 4094 (label-EXIT (gensym))) 4092 4095 (dolist (variable variables) 4093 4096 (let ((special-p (variable-special-p variable))) … … 4104 4107 (emit-push-current-thread) 4105 4108 (emit 'getfield +lisp-thread-class+ "lastSpecialBinding" +lisp-special-binding+) 4106 (astore (block-environment-register block))) 4109 (astore (block-environment-register block)) 4110 (label label-START)) 4107 4111 ;; Make sure there are no leftover values from previous calls. 4108 4112 (emit-clear-values) … … 4161 4165 (compile-progn-body (cdddr form) target) 4162 4166 (when bind-special-p 4163 ;; Restore dynamic environment. 4167 (emit 'goto label-EXIT) 4168 (label label-END) 4164 4169 (aload *thread*) 4165 4170 (aload (block-environment-register block)) 4166 (emit 'putfield +lisp-thread-class+ "lastSpecialBinding" +lisp-special-binding+)))) 4171 (emit 'putfield +lisp-thread-class+ "lastSpecialBinding" 4172 +lisp-special-binding+) 4173 (emit 'athrow) 4174 4175 ;; Restore dynamic environment. 4176 (label label-EXIT) 4177 (aload *thread*) 4178 (aload (block-environment-register block)) 4179 (emit 'putfield +lisp-thread-class+ "lastSpecialBinding" +lisp-special-binding+) 4180 (push (make-handler :from label-START 4181 :to label-END 4182 :code label-END 4183 :catch-type 0) *handlers*)))) 4167 4184 4168 4185 (defun propagate-vars (block)
Note: See TracChangeset
for help on using the changeset viewer.