Fix transform-type and make next-type an internal procedure

This commit is contained in:
Oliver Payne 2022-03-12 20:20:29 +00:00
parent 75d6bb8e05
commit 86b044fd13
1 changed files with 9 additions and 9 deletions

View File

@ -79,21 +79,21 @@
#f
(tower-iter tower)))
(define tower '(integer rational scheme-number complex))
(define (next-type type tower)
(cond ((or (null? tower)
(null? (cdr tower))) '())
((eq? type (car tower)) (cadr tower))
(else (next-type type (cdr tower)))))
(define (transform-type x tower)
(define (next-type type tower)
(cond ((or (null? tower)
(null? (cdr tower))) '())
((eq? type (car tower)) (cadr tower))
(else (next-type type (cdr tower)))))
(and (type-tagged? x)
(let* ((type (type-tag x))
(proj-type (next-type type tower)))
(if proj-type
((get-coercion type proj-type) (contents x))
'()))))
(if (null? proj-type)
'()
((get-coercion type proj-type) (contents x))))))
(define (raise x)
(transform-type x tower))