Implementing CATCH and OOPS |
|
(define (eval-catch exp env)
;; (CATCH name normal error)
(let ((labels *labels*))
(define (done)
(set! *labels* labels)
(eval (fourth exp) env))
(add-label (second exp) done)
(let ((result (eval (third exp) env)))
(set! *labels* labels)
result)))
(define (eval-oops exp env)
;; (OOPS name)
(let ((label (find-label (second exp))))
(if label
(label)
(error "No handler for error" name))))
| Jim Miller |