diff --git a/case/stxcase.rkt b/case/stxcase.rkt index 4ccca56..6ac4211 100644 --- a/case/stxcase.rkt +++ b/case/stxcase.rkt @@ -6,7 +6,8 @@ racket/private/ellipses stxparse-info/current-pvars (for-syntax racket/private/stx racket/private/small-scheme - racket/private/member racket/private/sc '#%kernel)) + racket/private/member racket/private/sc '#%kernel + auto-syntax-e/utils)) (-define (datum->syntax/shape orig datum) (if (syntax? datum) @@ -470,7 +471,7 @@ (list (if s-exp? (quote-syntax make-s-exp-mapping) - (quote-syntax make-syntax-mapping)) + (quote-syntax make-auto-pvar)) ;; Tell it the shape of the variable: (let loop ([var unflat-pattern-var][d 0]) (if (syntax? var) diff --git a/case/syntax.rkt b/case/syntax.rkt index a278b23..b9ebea0 100644 --- a/case/syntax.rkt +++ b/case/syntax.rkt @@ -2,7 +2,8 @@ (require (only-in "stxloc.rkt" syntax-case) stxparse-info/current-pvars (for-syntax racket/base - racket/private/sc)) + racket/private/sc + auto-syntax-e/utils)) (provide define/with-syntax current-recorded-disappeared-uses @@ -45,7 +46,7 @@ (with-syntax ([pattern rhs]) (values (pvar-value pvar) ...))) (define-syntax pvar - (make-syntax-mapping 'depth (quote-syntax valvar))) + (make-auto-pvar 'depth (quote-syntax valvar))) ... (define-pvars pvar ...))))])) ;; Ryan: alternative name: define/syntax-pattern ?? diff --git a/info.rkt b/info.rkt index dcac673..3e5bbc9 100644 --- a/info.rkt +++ b/info.rkt @@ -4,7 +4,8 @@ "rackunit-lib" ;; Because scribble/example is not available on v6.3: "version-case" - "subtemplate")) ;; for the documentation only + "subtemplate" ;; for the documentation only + "auto-syntax-e")) (define build-deps '("scribble-lib" "racket-doc")) (define scribblings '(("scribblings/stxparse-info.scrbl" ()))) (define pkg-desc "Description Here") diff --git a/parse/experimental/template.rkt b/parse/experimental/template.rkt index 76faee4..76309c2 100644 --- a/parse/experimental/template.rkt +++ b/parse/experimental/template.rkt @@ -5,7 +5,8 @@ syntax/parse/private/minimatch racket/private/stx ;; syntax/stx racket/private/sc - racket/struct) + racket/struct + auto-syntax-e/utils) stxparse-info/parse/private/residual "private/substitute.rkt") (provide template @@ -249,7 +250,7 @@ instead of integers and integer vectors. (let*-values ([(drivers pre-guide props-guide) (parse-t t 0 #f)] [(drivers pre-guide) (if loc-id - (let* ([loc-sm (make-syntax-mapping 0 loc-id)] + (let* ([loc-sm (make-auto-pvar 0 loc-id)] [loc-pvar (pvar loc-sm #f #f)]) (values (dset-add drivers loc-pvar) (relocate-guide pre-guide loc-pvar))) @@ -474,7 +475,7 @@ instead of integers and integer vectors. (cond [(box? qval) (with-syntax ([(tmp) (generate-temporaries #'(unsyntax-expr))]) (set-box! qval (cons (cons #'tmp t) (unbox qval))) - (let* ([fake-sm (make-syntax-mapping 0 #'tmp)] + (let* ([fake-sm (make-auto-pvar 0 #'tmp)] [fake-pvar (pvar fake-sm #f #f)]) (values (dset fake-pvar) (vector 'unsyntax fake-pvar) '_)))] [else @@ -606,7 +607,7 @@ instead of integers and integer vectors. (cond [(box? qval) (with-syntax ([(tmp) (generate-temporaries #'(unsyntax-splicing-expr))]) (set-box! qval (cons (cons #'tmp h) (unbox qval))) - (let* ([fake-sm (make-syntax-mapping 0 #'tmp)] + (let* ([fake-sm (make-auto-pvar 0 #'tmp)] [fake-pvar (pvar fake-sm #f #f)]) (values (dset fake-pvar) #t (vector 'unsyntax-splicing fake-pvar) '_)))] [else diff --git a/parse/private/parse.rkt b/parse/private/parse.rkt index 9e1652c..41acc3f 100644 --- a/parse/private/parse.rkt +++ b/parse/private/parse.rkt @@ -414,7 +414,13 @@ Conventions: [_ (raise-syntax-error #f "expected exactly one template" #'ctx)])) ((body-sequence) (syntax-case rest () - [(e0 e ...) #'(let () e0 e ...)] + [(e0 e ...) + ;; Should we use a shadower (works on the whole file, unhygienically), + ;; or use the context of the syntax-parse identifier? + (let ([the-#%intef-begin (datum->syntax #'ctx '#%intef-begin)]) + (if (syntax-local-value the-#%intef-begin (λ () #f)) ;; Defined as a macro + #`(let () (#,the-#%intef-begin e0 e ...)) + #'(let () e0 e ...)))] [_ (raise-syntax-error #f "expected non-empty clause body" #'ctx clause)])) (else diff --git a/parse/private/runtime.rkt b/parse/private/runtime.rkt index e82856e..7b6cb19 100644 --- a/parse/private/runtime.rkt +++ b/parse/private/runtime.rkt @@ -7,6 +7,7 @@ syntax/kerncase syntax/strip-context racket/private/sc + auto-syntax-e/utils racket/syntax syntax/parse/private/rep-data)) @@ -101,7 +102,7 @@ residual.rkt. 'name 'depth 'syntax?)] ...) ([(vtmp) value] ...) (letrec-syntaxes+values - ([(name) (make-syntax-mapping 'depth (quote-syntax stmp))] ...) + ([(name) (make-auto-pvar 'depth (quote-syntax stmp))] ...) () (with-pvars (name ...) . body)))))])) @@ -138,7 +139,7 @@ residual.rkt. (make-attribute-mapping (quote-syntax vtmp) 'name 'depth 'syntax?)) ... - (define-syntax name (make-syntax-mapping 'depth (quote-syntax stmp))) + (define-syntax name (make-auto-pvar 'depth (quote-syntax stmp))) ... (define-pvars name ...))))]))