diff --git a/collects/mzlib/private/contract.ss b/collects/mzlib/private/contract.ss index 7ba50602c2..1d1db452fd 100644 --- a/collects/mzlib/private/contract.ss +++ b/collects/mzlib/private/contract.ss @@ -552,9 +552,15 @@ add struct contracts for immutable structs? ;; builds a begin expression for the entire contract and provide ;; the first syntax object is used for source locations (define (code-for-one-id/new-name stx id ctrct user-rename-id) - (with-syntax ([id-rename (a:mangle-id provide-stx "provide/contract-id" id)] - [contract-id (a:mangle-id provide-stx "provide/contract-contract-id" id)] - [pos-module-source (a:mangle-id provide-stx "provide/contract-pos-module-source" id)] + (with-syntax ([id-rename (a:mangle-id provide-stx + "provide/contract-id" + (or user-rename-id id))] + [contract-id (a:mangle-id provide-stx + "provide/contract-contract-id" + (or user-rename-id id))] + [pos-module-source (a:mangle-id provide-stx + "provide/contract-pos-module-source" + (or user-rename-id id))] [pos-stx (datum->syntax-object provide-stx 'here)] [id id] [ctrct (syntax-property ctrct 'inferred-name id)] diff --git a/collects/tests/mzscheme/contract-test.ss b/collects/tests/mzscheme/contract-test.ss index 782edcebdc..fe131fa0e1 100644 --- a/collects/tests/mzscheme/contract-test.ss +++ b/collects/tests/mzscheme/contract-test.ss @@ -4243,7 +4243,7 @@ ;; (at the end, becuase they are slow w/out .zo files) ;; - (test/spec-passed + (test/spec-passed 'provide/contract1 '(let () (eval '(module contract-test-suite1 mzscheme @@ -4417,6 +4417,19 @@ [s-a 3]))) (eval '(require n)))) + (test/spec-passed + 'provide/contract11 + '(parameterize ([current-namespace (make-namespace)]) + (eval '(module m mzscheme + (require (lib "contract.ss")) + (define x 1) + (provide/contract [rename x y integer?] + [rename x z integer?]))) + (eval '(module n mzscheme + (require m) + (+ y z))) + (eval '(require n)))) + ;; this test is broken, not sure why #| (test/spec-failed