www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

test-syntax-case.rkt (819B)


      1 #lang racket
      2 
      3 (require (for-syntax preexpanded/syntax-case))
      4 
      5 (define-syntax (define-a*-b stx)
      6   (syntax-case stx ()
      7     [(_ name [foo val] ...)
      8      #`(define-syntax (name stx2)
      9          #,(preexpanded-syntax-case/no-bind define-a*-b stx2
     10              [(_ #:a (~literal foo)) #'val]
     11              (foo val)
     12              ...
     13              [(_ #:b) #'2]))]))
     14 
     15 (define-a*-b myab [a 10] [b 20] [c 30])
     16 (myab #:a a)
     17 (myab #:a b)
     18 (myab #:a c)
     19 ;(myab #:a d)   ;; Invalid syntax, as expected
     20 ;(myab #:a)     ;; Invalid syntax, as expected
     21 ;(myab #:a a e) ;; Invalid syntax, as expected
     22 (myab #:b)
     23 
     24 #;(preexpanded-syntax-case/no-bind mymacro #'(mymacro #:a +)
     25     [(_ #:a (~literal +)) 1]
     26     [(_ #:b) 2])
     27 
     28 #;(preexpanded-syntax-case/no-bind mymacro #'(mymacro #:b foo)
     29     [(_ #:a (~literal +)) 1]
     30     [(_ #:b (~datum foo)) 2])