From 26ed4b246cccecdfb3e53e4104193ab91711c899 Mon Sep 17 00:00:00 2001 From: Daniel Feltey Date: Tue, 23 Jan 2018 15:23:53 -0600 Subject: [PATCH] Use the thread-cell strategy for recursive-contracts that are list contracts --- racket/collects/racket/contract/private/base.rkt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/racket/collects/racket/contract/private/base.rkt b/racket/collects/racket/contract/private/base.rkt index 6b430ef3b1..f39714890b 100644 --- a/racket/collects/racket/contract/private/base.rkt +++ b/racket/collects/racket/contract/private/base.rkt @@ -210,13 +210,16 @@ (define r-ctc (force-recursive-contract ctc)) (define f (get/build-late-neg-projection r-ctc)) (define blame-known (blame-add-context blame #f)) + (define f-blame-known (make-thread-cell #f)) (λ (val neg-party) (unless (list? val) (raise-blame-error blame-known #:missing-party neg-party val '(expected: "list?" given: "~e") val)) - ((f blame-known) val neg-party)))] + (unless (thread-cell-ref f-blame-known) + (thread-cell-set! f-blame-known (f blame-known))) + ((thread-cell-ref f-blame-known) val neg-party)))] [else (λ (blame) (define r-ctc (force-recursive-contract ctc))