From a0187b5136a500eaf253fa98a76d308f36223372 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Fri, 4 Mar 2016 16:10:31 +0100 Subject: [PATCH] =?UTF-8?q?Fixed=20issue=20with=20=CE=BB/syntax-parse,=20n?= =?UTF-8?q?ow=20we=20can=20use=20stx=20in=20the=20body=20to=20refer=20to?= =?UTF-8?q?=20the=20whole=20syntax=20object.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- graph-lib/lib/low/syntax-parse.rkt | 36 +++++++++++++++++------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/graph-lib/lib/low/syntax-parse.rkt b/graph-lib/lib/low/syntax-parse.rkt index 344773fd..8f4b7c96 100644 --- a/graph-lib/lib/low/syntax-parse.rkt +++ b/graph-lib/lib/low/syntax-parse.rkt @@ -1,7 +1,8 @@ #lang typed/racket (require "typed-untyped.rkt") (define-typed/untyped-modules #:no-test - (provide define-syntax/parse + (provide stx + define-syntax/parse λ/syntax-parse ~maybe ~lit @@ -15,8 +16,10 @@ (require syntax/parse syntax/parse/define syntax/parse/experimental/template - (for-syntax racket/base - racket/syntax)) + (for-syntax racket/syntax + racket/stxparam) + (for-meta 2 racket/base) + racket/stxparam) (define-syntax ~maybe (pattern-expander @@ -51,29 +54,32 @@ #`(#,(s #'~and) name (#,(s #'~seq) (#,(s #'~literal) lit))) #`(#,(s #'~seq) (#,(s #'~literal) lit)))])))) - (begin-for-syntax - (require (for-syntax racket/base - racket/stxparam) - racket/stxparam) + (module m-stx-identifier racket + (require racket/stxparam) (provide stx) (define-syntax-parameter stx - (lambda (stx) - (raise-syntax-error (syntax-e stx) - "Can only be used in define-syntax/parse")))) + (lambda (call-stx) + (raise-syntax-error + (syntax-e call-stx) + "Can only be used in define-syntax/parse or λ/syntax-parse" + call-stx)))) + + (require 'm-stx-identifier + (for-syntax 'm-stx-identifier)) (define-simple-macro (define-syntax/parse (name . args) body0 . body) (define-syntax (name stx2) (syntax-parameterize ([stx (make-rename-transformer #'stx2)]) - (syntax-parse stx2 - [(_ . args) body0 . body])))) + (syntax-parse stx2 + [(_ . args) body0 . body])))) (define-simple-macro (λ/syntax-parse args . body) (λ (stx2) - ;(syntax-parameterize ([stx (make-rename-transformer #'stx2)]) - (syntax-parse stx2 - [args . body]))) + (syntax-parameterize ([stx (make-rename-transformer #'stx2)]) + (syntax-parse stx2 + [args . body])))) ;; λstx (begin