You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.3 KiB
Racket
62 lines
1.3 KiB
Racket
#lang br
|
|
(require (for-syntax br/syntax sugar/debug br/scope) br/syntax br/scope)
|
|
|
|
(begin-for-syntax
|
|
(define-scope blue)
|
|
(define-scope yellow)
|
|
(define-scope red)
|
|
(define-scope green (blue yellow))
|
|
(define-scope purple (blue red)))
|
|
|
|
(define #'(def-blue-x)
|
|
(with-blue-binding-form (x)
|
|
#'(define x (+ 42 42))))
|
|
|
|
|
|
(define #'(print-blue-x)
|
|
(with-purple-identifiers (x)
|
|
#'x))
|
|
|
|
|
|
(define #'(define-blue _id _expr)
|
|
(with-syntax ([_id (blue-binding-form #'_id)])
|
|
#'(define _id _expr)))
|
|
|
|
|
|
|
|
(define #'(print-blue-y)
|
|
(with-blue-identifiers (y)
|
|
#'y))
|
|
|
|
(scopes (syntax-find (expand-once #'(def-blue-x)) 'x))
|
|
(def-blue-x)
|
|
(scopes (syntax-find (expand-once #'(print-blue-x)) 'x))
|
|
(print-blue-x)
|
|
(let ()
|
|
(scopes (syntax-find (expand-once #'(print-blue-x)) 'x))
|
|
#;(print-blue-x)) ;; error why?
|
|
|
|
(define-blue y (+ 42 42))
|
|
(print-blue-y)
|
|
|
|
#|
|
|
(define #'(def-y)
|
|
(with-yellow-binding-form (y)
|
|
#'(define y (+ 42))))
|
|
|
|
|
|
|
|
|
|
#;(scopes (syntax-find (expand-once #'(def-x)) 'x))
|
|
#;(def-x)
|
|
(def-y)
|
|
(scopes (syntax-find (expand-once #'(print-x)) 'x))
|
|
(print-x)
|
|
(scopes (syntax-find (expand-once #'(print-y)) 'y))
|
|
(print-y)
|
|
|
|
#;(let-syntax ([x (λ(stx) (syntax-case stx () [_ #'42]))])
|
|
(* x 4))
|
|
|
|
|#
|