From 7f019819e096fd24c2d75798f3a491fc4fb99800 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 24 Jun 2009 13:17:17 +0000 Subject: [PATCH] allow empty splicing-syntax-parameterize body in a defn context (PR 10311) svn: r15251 --- collects/scheme/private/stxparam.ss | 12 +++++++++--- collects/scheme/splicing.ss | 4 ++-- collects/scheme/stxparam.ss | 2 +- collects/scribblings/reference/splicing.scrbl | 3 ++- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/collects/scheme/private/stxparam.ss b/collects/scheme/private/stxparam.ss index 6871bb99be..0862f4fa49 100644 --- a/collects/scheme/private/stxparam.ss +++ b/collects/scheme/private/stxparam.ss @@ -11,9 +11,9 @@ (#%provide (for-syntax do-syntax-parameterize)) - (define-for-syntax (do-syntax-parameterize stx let-syntaxes-id) + (define-for-syntax (do-syntax-parameterize stx let-syntaxes-id empty-body-ok?) (syntax-case stx () - [(_ ([id val] ...) body0 body ...) + [(_ ([id val] ...) body ...) (let ([ids (syntax->list #'(id ...))]) (with-syntax ([(gen-id ...) (map (lambda (id) @@ -43,7 +43,13 @@ "duplicate binding" stx dup))) + (unless empty-body-ok? + (when (null? (syntax-e #'(body ...))) + (raise-syntax-error + #f + "missing body expression(s)" + stx))) (with-syntax ([let-syntaxes let-syntaxes-id]) (syntax/loc stx (let-syntaxes ([(gen-id) (convert-renamer val)] ...) - body0 body ...)))))]))) + body ...)))))]))) diff --git a/collects/scheme/splicing.ss b/collects/scheme/splicing.ss index da675688ac..00bd5a5f41 100644 --- a/collects/scheme/splicing.ss +++ b/collects/scheme/splicing.ss @@ -169,9 +169,9 @@ (define-syntax (splicing-syntax-parameterize stx) (if (eq? 'expression (syntax-local-context)) ;; Splicing is no help in an expression context: - (do-syntax-parameterize stx #'let-syntaxes) + (do-syntax-parameterize stx #'let-syntaxes #f) ;; Let `syntax-parameterize' check syntax, then continue - (do-syntax-parameterize stx #'ssp-let-syntaxes))) + (do-syntax-parameterize stx #'ssp-let-syntaxes #t))) (define-syntax (ssp-let-syntaxes stx) (syntax-case stx () diff --git a/collects/scheme/stxparam.ss b/collects/scheme/stxparam.ss index cb72eaa35c..c9f38e3c9a 100644 --- a/collects/scheme/stxparam.ss +++ b/collects/scheme/stxparam.ss @@ -31,4 +31,4 @@ gen-id))))))])) (define-syntax (syntax-parameterize stx) - (do-syntax-parameterize stx #'let-syntaxes))) + (do-syntax-parameterize stx #'let-syntaxes #f))) diff --git a/collects/scribblings/reference/splicing.scrbl b/collects/scribblings/reference/splicing.scrbl index ccae290e4f..f6f2e28887 100644 --- a/collects/scribblings/reference/splicing.scrbl +++ b/collects/scribblings/reference/splicing.scrbl @@ -66,7 +66,8 @@ forms are valid in an internal-definition context. In particular, @scheme[require] and @scheme[provide] forms cannot appear in the body of @scheme[splicing-syntax-parameterize], even if @scheme[splicing-syntax-parameterize] is used in a @scheme[module] -body. +body. In a definition context, the body of +@scheme[splicing-syntax-parameterize] can be empty. @examples[ #:eval splice-eval