From 91590040dcd901484f2c79e5af199646f1716dd5 Mon Sep 17 00:00:00 2001 From: Mike Sperber Date: Fri, 8 Oct 2010 11:50:17 +0200 Subject: [PATCH] Ignore duplicate signature declarations. --- collects/deinprogramm/signature/module-begin.rkt | 15 ++++++++++----- collects/lang/private/teach-module-begin.rkt | 15 ++++++++++----- 2 files changed, 20 insertions(+), 10 deletions(-) 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))