From 3f4cbcbfd851b238d02c05d28395af1f4dbb18c1 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Wed, 2 May 2018 18:53:48 -0500 Subject: [PATCH] memoize the creation of the name in the blame object --- racket/collects/racket/contract/private/blame.rkt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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?