Changeset 13449
- Timestamp:
- 08/07/11 14:20:58 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp
r13275 r13449 3116 3116 ) 3117 3117 3118 (defun restore-environment-and-make-handler (register label-START)3119 (let ((label-END (gensym "U"))3120 (label-EXIT (gensym "E")))3121 (emit 'goto label-EXIT)3122 (label label-END)3123 (restore-dynamic-environment register)3124 (emit 'athrow)3125 ;; Restore dynamic environment.3126 (label label-EXIT)3127 (restore-dynamic-environment register)3128 (add-exception-handler label-START label-END label-END nil)))3129 3130 3118 (defun p2-m-v-b-node (block target) 3131 3119 (let* ((*register* *register*) … … 3134 3122 (vars (second form)) 3135 3123 (bind-special-p nil) 3136 (variables (m-v-b-vars block)) 3137 (label-START (gensym "F"))) 3124 (variables (m-v-b-vars block))) 3138 3125 (dolist (variable variables) 3139 3126 (let ((special-p (variable-special-p variable))) … … 3149 3136 ;; Save current dynamic environment. 3150 3137 (setf (m-v-b-environment-register block) (allocate-register nil)) 3151 (save-dynamic-environment (m-v-b-environment-register block)) 3152 (label label-START)) 3138 (save-dynamic-environment (m-v-b-environment-register block))) 3153 3139 ;; Make sure there are no leftover values from previous calls. 3154 3140 (emit-clear-values) … … 3539 3525 (form (let-form block)) 3540 3526 (*visible-variables* *visible-variables*) 3541 (specialp nil) 3542 (label-START (gensym "F"))) 3527 (specialp nil)) 3543 3528 ;; Walk the variable list looking for special bindings and unused lexicals. 3544 3529 (dolist (variable (let-vars block)) … … 3551 3536 ;; We need to save current dynamic environment. 3552 3537 (setf (let-environment-register block) (allocate-register nil)) 3553 (save-dynamic-environment (let-environment-register block)) 3554 (label label-START)) 3538 (save-dynamic-environment (let-environment-register block))) 3555 3539 (propagate-vars block) 3556 3540 (ecase (car form) … … 3953 3937 (*register* *register*) 3954 3938 (environment-register 3955 (setf (progv-environment-register block) (allocate-register nil))) 3956 (label-START (gensym "F"))) 3939 (setf (progv-environment-register block) (allocate-register nil)))) 3957 3940 (with-operand-accumulation 3958 3941 ((compile-operand symbols-form nil) … … 3962 3945 (emit-clear-values)) 3963 3946 (save-dynamic-environment environment-register) 3964 (label label-START)3965 3947 ;; Compile call to Lisp.progvBindVars(). 3966 3948 (emit-push-current-thread) … … 7139 7121 7140 7122 (*thread* nil) 7141 (*initialize-thread-var* nil) 7142 (label-START (gensym "F"))) 7123 (*initialize-thread-var* nil)) 7143 7124 7144 7125 (class-add-method class-file method) … … 7283 7264 (allocate-register nil)) 7284 7265 (save-dynamic-environment (compiland-environment-register compiland)) 7285 (label label-START)7286 7266 (dolist (variable (compiland-arg-vars compiland)) 7287 7267 (when (variable-special-p variable)
Note: See TracChangeset
for help on using the changeset viewer.