diff --git a/collects/scheme/private/kw.ss b/collects/scheme/private/kw.ss index 6c89100a7b..6c79e0336d 100644 --- a/collects/scheme/private/kw.ss +++ b/collects/scheme/private/kw.ss @@ -338,7 +338,11 @@ #'rest)] [rest-empty (if (null? (syntax-e #'rest)) '() - '(null))]) + '(null))] + [fail-rest (if (null? (syntax-e #'rest)) + '(null) + #'rest)]) + (let ([with-core (lambda (result) ;; body of procedure, where all keyword and optional @@ -402,7 +406,7 @@ ;; struct-type entry point for no keywords when a keyword is required (syntax/loc stx (fail-opt-cases (missing-kw) (opt-id ...) (self plain-id ...) - () (rest-id . rest) + () (rest-id . fail-rest) ())))]) (cond [(null? kws) diff --git a/collects/scheme/private/norm-define.ss b/collects/scheme/private/norm-define.ss index b75ffbbf14..20af4ab5d9 100644 --- a/collects/scheme/private/norm-define.ss +++ b/collects/scheme/private/norm-define.ss @@ -89,13 +89,13 @@ (identifier? #'id)) (begin (check-kw #'kw) - (cons #'id (loop #'more #t)))] + (cons #'id (loop #'more need-def?)))] [(kw [id def-expr] . more) (and (keyword? (syntax-e #'kw)) (identifier? #'id)) (begin (check-kw #'kw) - (cons #'id (loop #'more #t)))] + (cons #'id (loop #'more need-def?)))] [(kw . more) (keyword? (syntax-e #'kw)) (raise-syntax-error #f