diff --git a/racket/collects/racket/contract/private/blame.rkt b/racket/collects/racket/contract/private/blame.rkt index f745f7c0eb..4b6032e45d 100644 --- a/racket/collects/racket/contract/private/blame.rkt +++ b/racket/collects/racket/contract/private/blame.rkt @@ -76,10 +76,17 @@ (unless positive (raise-type-error 'make-blame "(not/c #f)" 3 source value build-name positive negative original?)) + (define build/memo-name + (let* ([uniq (box #f)] + [ans uniq]) + (λ () + (when (eq? uniq ans) + (set! ans (build-name))) + ans))) (make-blame source value - build-name + build/memo-name (list positive) (and negative (list negative)) original?