From 3857b95a7b9886b5884c299206cc411882023fcb Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Tue, 12 Jun 2007 15:23:54 +0000 Subject: [PATCH] fixed PR 8737 svn: r6596 --- collects/mzlib/private/contract.ss | 3 ++- collects/tests/mzscheme/contract-test.ss | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/collects/mzlib/private/contract.ss b/collects/mzlib/private/contract.ss index 1468553637..bd62fed5a5 100644 --- a/collects/mzlib/private/contract.ss +++ b/collects/mzlib/private/contract.ss @@ -174,7 +174,8 @@ improve method arity mismatch contract violation error messages? [(null? clauses) null] [else (let ([clause (car clauses)]) - (syntax-case clause (struct rename) + ;; compare raw identifiers for `struct' and `rename' just like provide does + (syntax-case* clause (struct rename) (λ (x y) (eq? (syntax-e x) (syntax-e y))) [(rename this-name new-name contract) (and (identifier? (syntax this-name)) (identifier? (syntax new-name))) diff --git a/collects/tests/mzscheme/contract-test.ss b/collects/tests/mzscheme/contract-test.ss index bf22e0a8e8..cb1da99e32 100644 --- a/collects/tests/mzscheme/contract-test.ss +++ b/collects/tests/mzscheme/contract-test.ss @@ -5088,6 +5088,18 @@ so that propagation occurs. (eval 'pc19-ans)) 1) + ;; test that unit & contract don't collide over the name `struct' + (test/spec-passed + 'provide/contract20 + '(eval '(module tmp mzscheme + (require (lib "contract.ss") + (lib "unit.ss")) + + (define-struct s (a b)) + + (provide/contract + [struct s ([a number?] + [b symbol?])])))) (contract-error-test #'(begin