From a44810f4f52af97713803b4f1ecc57fae3487134 Mon Sep 17 00:00:00 2001 From: Stevie Strickland Date: Fri, 12 Sep 2008 15:19:29 +0000 Subject: [PATCH] More error checking, shouldn't have allowed (define/contract x number? 1 2), for example. svn: r11680 --- collects/scheme/private/contract.ss | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/collects/scheme/private/contract.ss b/collects/scheme/private/contract.ss index 743ff5fff8..c9e9031d42 100644 --- a/collects/scheme/private/contract.ss +++ b/collects/scheme/private/contract.ss @@ -70,11 +70,20 @@ improve method arity mismatch contract violation error messages? ;; it to the result of `expr'. These variables may not be set!'d. (define-syntax (define/contract define-stx) (syntax-case define-stx () - [(_ name contract-expr expr0 expr ...) + [(_ name contract-expr) + (raise-syntax-error 'define/contract + "no body after contract" + define-stx)] + [(_ name contract-expr expr) (identifier? (syntax name)) #'(with-contract name ([name (verify-contract 'define/contract contract-expr)]) - (define name expr0 expr ...))] + (define name expr))] + [(_ name contract-expr expr0 expr ...) + (identifier? (syntax name)) + (raise-syntax-error 'define/contract + "multiple expressions after identifier and contract" + define-stx)] [(_ name+arg-list contract body0 body ...) (let-values ([(name lam-expr) (normalize-definition (datum->syntax #'define-stx (list* 'define/contract #'name+arg-list #'body0 #'(body ...)))