From 5ecbc54fffd3d541661a3378f6c7f9c719b076ef Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Sun, 16 Jul 2017 16:50:50 -0500 Subject: [PATCH] fix recursive-contract's name patch up code --- racket/collects/racket/contract/private/base.rkt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/racket/collects/racket/contract/private/base.rkt b/racket/collects/racket/contract/private/base.rkt index b88f48bc75..058b14f251 100644 --- a/racket/collects/racket/contract/private/base.rkt +++ b/racket/collects/racket/contract/private/base.rkt @@ -193,8 +193,13 @@ (unless (list-contract? forced-ctc) (raise-argument-error 'recursive-contract "list-contract?" forced-ctc))) (set-recursive-contract-ctc! ctc forced-ctc) - (set-recursive-contract-name! ctc (append `(recursive-contract ,(contract-name forced-ctc)) - (cddr old-name))) + (when (and (pair? old-name) (pair? (cdr old-name))) + ;; this guard will be #f when we are forcing this contract + ;; in a nested which (which can make the `cddr` below fail) + ;; in this case, there should be a pending `force-recursive-contract` + ;; that will do the actual updating of the name to the right thing + (set-recursive-contract-name! ctc (append `(recursive-contract ,(contract-name forced-ctc)) + (cddr old-name)))) forced-ctc] [else current]))