From 1ee5786e2d96602c08ad3e3e5bc641ca88050b7e Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Tue, 22 May 2018 08:42:41 -0500 Subject: [PATCH] fix substruct contract blame setup closes #2093 --- .../tests/racket/contract/contract-out.rkt | 18 ++++++++++++++++++ .../racket/contract/private/provide.rkt | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/pkgs/racket-test/tests/racket/contract/contract-out.rkt b/pkgs/racket-test/tests/racket/contract/contract-out.rkt index d1c2d82113..6fd55553cc 100644 --- a/pkgs/racket-test/tests/racket/contract/contract-out.rkt +++ b/pkgs/racket-test/tests/racket/contract/contract-out.rkt @@ -1212,6 +1212,24 @@ (eval '(dynamic-require ''provide/contract65-m2 #f))) "provide/contract65-m2") + (test/spec-failed + 'provide/contract66 + '(let () + (eval '(module provide/contract66-m1 racket/base + (require racket/contract) + (provide f + (contract-out + (struct base ([f (-> number? boolean?)]) + #:omit-constructor))) + (struct base (f) #:transparent) + (define (f x) ((base-f x) #f)))) + (eval '(module provide/contract66-m2 racket/base + (require 'provide/contract66-m1) + (struct derived base () #:transparent) + (f (derived (λ (x) #f))))) + (eval '(dynamic-require ''provide/contract66-m2 #f))) + "provide/contract66-m1") + (contract-error-test 'contract-error-test8 #'(begin diff --git a/racket/collects/racket/contract/private/provide.rkt b/racket/collects/racket/contract/private/provide.rkt index 48b076b264..742161fc26 100644 --- a/racket/collects/racket/contract/private/provide.rkt +++ b/racket/collects/racket/contract/private/provide.rkt @@ -1186,7 +1186,8 @@ [field-name (in-list field-names)]) ((get/build-late-neg-projection ctc) (blame-add-context blame - (format "the ~a field of" field-name))))) + (format "the ~a field of" field-name) + #:swap? #t)))) (chaperone-struct-type struct-type (λ (a b c d e f g h) (values a b c d e f g h))