syntax/parse: Arrange for built-in macro’s names to be preserved

The dance that syntax/parse performs to lazily load its implementation
rewrites uses of syntax/parse macros in such a way that their original
names were discarded, which shows up in error messages. By simply
invoking the underlying transformer directly in the proxy macro instead
of expanding to a rewritten use, users’ names can be preserved.

fixes #1909
This commit is contained in:
Alexis King 2017-12-13 11:05:15 -08:00
parent 93ae78af91
commit fb80d18428
2 changed files with 7 additions and 7 deletions

View File

@ -1,5 +1,6 @@
#lang scheme
(require syntax/parse
(only-in syntax/parse [syntax-parse renamed-syntax-parse])
syntax/parse/debug
rackunit
"setup.rkt")
@ -206,3 +207,7 @@
#rx"expected attribute name")
;; two more
(tcerr "renamed syntax-parse bad syntax"
(renamed-syntax-parse)
#rx"^renamed-syntax-parse: ")

View File

@ -6,10 +6,7 @@
;; keep and keep as abs. path -- lazy-loaded macros produce references to this
;; must be required via *absolute module path* from any disappearing module
;; (so for consistency etc, require absolutely from all modules)
(require syntax/parse/private/residual
racket/syntax
racket/stxparam
syntax/stx)
(require syntax/parse/private/residual)
(begin-for-syntax
(lazy-require
@ -60,9 +57,7 @@
define-eh-alternative-set)
(let ([tx (lambda (get-id)
(lambda (stx)
(syntax-case stx ()
[(_ . args)
(datum->syntax stx (cons (get-id) #'args) stx)])))])
((syntax-local-value (get-id)) stx)))])
(values
(tx id:define-syntax-class)
(tx id:define-splicing-syntax-class)