Add cache for `resolve-once'.
Substantial speedups on "new-metrics.rkt" test. original commit: 79061150efbc304ac6b9c3f74ba0ac0df342857e
This commit is contained in:
parent
13b93f380a
commit
70e0482625
|
@ -1,7 +1,7 @@
|
|||
#lang scheme/base
|
||||
(require "../utils/utils.rkt")
|
||||
|
||||
(require (rep type-rep)
|
||||
(require (rep type-rep rep-utils)
|
||||
(env type-name-env)
|
||||
(utils tc-utils)
|
||||
(types utils)
|
||||
|
@ -46,12 +46,20 @@
|
|||
(define (needs-resolving? t)
|
||||
(or (Mu? t) (App? t) (Name? t)))
|
||||
|
||||
(define resolver-cache (make-hasheq))
|
||||
|
||||
(define (resolve-once t)
|
||||
(match t
|
||||
[(Mu: _ _) (unfold t)]
|
||||
[(App: r r* s)
|
||||
(resolve-app r r* s)]
|
||||
[(Name: _) (resolve-name t)]))
|
||||
(define seq (Rep-seq t))
|
||||
(define r (hash-ref resolver-cache seq #f))
|
||||
(or r
|
||||
(let ([r* (match t
|
||||
[(Mu: _ _) (unfold t)]
|
||||
[(App: r r* s)
|
||||
(resolve-app r r* s)]
|
||||
[(Name: _) (resolve-name t)])])
|
||||
(when r*
|
||||
(hash-set! resolver-cache seq r*))
|
||||
r*)))
|
||||
|
||||
(define (resolve t)
|
||||
(if (needs-resolving? t) (resolve-once t) t))
|
||||
|
|
Loading…
Reference in New Issue
Block a user