diff --git a/collects/deinprogramm/signature/module-begin.rkt b/collects/deinprogramm/signature/module-begin.rkt index cafb51ea1c..e56249b3b3 100644 --- a/collects/deinprogramm/signature/module-begin.rkt +++ b/collects/deinprogramm/signature/module-begin.rkt @@ -48,11 +48,16 @@ (raise-syntax-error #f "Nach dem : sollte ein Bezeichner stehen; da steht was anderes." #'?id)) - (when (bound-identifier-mapping-get table #'?id (lambda () #f)) - (raise-syntax-error #f - "Zweite Signaturdeklaration für denselben Namen." - maybe)) - (bound-identifier-mapping-put! table #'?id #'?cnt) + (cond + ((bound-identifier-mapping-get table #'?id (lambda () #f)) + => (lambda (old-cnt-stx) + (unless (equal? (syntax->datum old-cnt-stx) + (syntax->datum #'?cnt)) + (raise-syntax-error #f + "Zweite Signaturdeklaration für denselben Namen." + maybe)))) + (else + (bound-identifier-mapping-put! table #'?id #'?cnt))) #f)) ((: ?id) (raise-syntax-error #f "Bei dieser Signaturdeklaration fehlt die Signatur" maybe)) diff --git a/collects/lang/private/teach-module-begin.rkt b/collects/lang/private/teach-module-begin.rkt index 75912c23f7..86fb3dbf81 100644 --- a/collects/lang/private/teach-module-begin.rkt +++ b/collects/lang/private/teach-module-begin.rkt @@ -55,11 +55,16 @@ #'?id)) (let ((real-id (first-order->higher-order #'?id))) - (when (bound-identifier-mapping-get table real-id (lambda () #f)) - (raise-syntax-error #f - "Second signature declaration for the same name." - maybe)) - (bound-identifier-mapping-put! table real-id #'?cnt) + (cond + ((bound-identifier-mapping-get table real-id (lambda () #f)) + => (lambda (old-cnt-stx) + (unless (equal? (syntax->datum old-cnt-stx) + (syntax->datum #'?cnt)) + (raise-syntax-error #f + "Second signature declaration for the same name." + maybe)))) + (else + (bound-identifier-mapping-put! table real-id #'?cnt))) #f))) ((: ?id) (raise-syntax-error #f "Signature declaration is missing a signature." maybe))