finished resolve-type
svn: r13786 original commit: 7020ff07a5e71f9b57bafbf7f912200b4526d948
This commit is contained in:
parent
4b70cd02b8
commit
28fece8d89
|
@ -31,50 +31,3 @@
|
|||
[(Mu: _ _) (unfold t)]
|
||||
[(App: r r* s) (resolve-app r r* s)]
|
||||
[(Name: _) (resolve-name t)]))
|
||||
|
||||
#|
|
||||
|
||||
(define (resolve-tc-result tcr)
|
||||
(match tcr
|
||||
[(tc-result: t e1s e2s)
|
||||
(ret (resolve-type t) (map resolve-effect e1s) (map resolve-effect e2s))]))
|
||||
|
||||
(define (resolve-effect* e)
|
||||
(effect-case resolve-type resolve-effect e))
|
||||
|
||||
|
||||
|
||||
(define (resolve-type* t)
|
||||
(define (int t)
|
||||
(type-case resolve-type t
|
||||
[#:Name stx (lookup-type-name stx)]
|
||||
[#:Poly #:matcher Poly: names body (make-Poly names (resolve-type body))]
|
||||
[#:Mu #:matcher Mu: name body (make-Mu name (resolve-type body))]
|
||||
[#:App rator rands stx
|
||||
(let ([rator (resolve-type rator)]
|
||||
[rands (map resolve-type rands)])
|
||||
(unless (Poly? rator)
|
||||
(tc-error/stx stx "Cannot apply non-polymorphic type: ~a, arguments were: ~a" rator rands))
|
||||
(instantiate-poly rator rands))]))
|
||||
(let loop ([t (int t)])
|
||||
(if (or (Name? t) (App? t))
|
||||
(loop (resolve-type t))
|
||||
t)))
|
||||
|
||||
(define table (make-hash-table))
|
||||
|
||||
(define (resolve-type t)
|
||||
(hash-table-get table t
|
||||
(lambda () (let ([v (resolve-type* t)])
|
||||
(hash-table-put! table t v)
|
||||
v))))
|
||||
|
||||
(define (resolve-effect t)
|
||||
(hash-table-get table t
|
||||
(lambda () (let ([v (resolve-effect* t)])
|
||||
(hash-table-put! table t v)
|
||||
v))))
|
||||
|
||||
;(trace resolve-type)
|
||||
|
||||
|#
|
||||
|
|
Loading…
Reference in New Issue
Block a user