#lang racket
(require syntax-spec-dev)
(syntax-spec
(nonterminal dsl-expr
(dsl+ e:dsl-expr e2:dsl-expr)
v:racket-var)
(host-interface/expression
(dsl e:dsl-expr)
#'#'e))
(let ([x 6])
(dsl (dsl+ x 5)))
This is probably because it would need to be a special case; Racket variables don't have a syntax-local-value.
And the thinking in the table here shows that we can't actually distinguish all the cases:
|
;; situation ; identifier-binding ; syntax-local-value ; syntax-debug-info |
|
;; bound as syntax ; non-#f value ; environment value ; has matching binding(s) |
|
|
|
;; note: the following two cases can't be easily distinguished; this is why `lookup` |
|
;; never tells you a name is unbound or out-of-context, and instead can only tell you |
|
;; that it isn't bound to the particular kind of syntax you check via the predicate. |
|
;; bound as racket ; non-#f value ; fails ; has matching binding(s) |
|
;; out of context ; non-#f value ; fails ; has matching binding(s) |
|
|
|
;; unbound ; #f ; fails ; no matching bindings (I hope!) |
|
;; ambiguous ; #f ; fails ; has matching binding(s) |
This is probably because it would need to be a special case; Racket variables don't have a syntax-local-value.
And the thinking in the table here shows that we can't actually distinguish all the cases:
syntax-spec/private/ee-lib/binding.rkt
Lines 50 to 60 in 82687f3