summaryrefslogtreecommitdiff
path: root/scheme/sweet-macros/helper2.mzscheme.sls
blob: 2be4d405b5994278225b1df4c4aeb618284f6ef4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!r6rs
(library (sweet-macros helper2)
(export syntax-match)
(import (rnrs) (for (rnrs) (meta -1))
(for (sweet-macros helper1) (meta -1) (meta 0) (meta 1)))

(define-syntax syntax-match
  (guarded-syntax-case () (sub)
        
    ((self (literal ...) (sub patt skel rest ...) ...)
     #'(guarded-syntax-case ()
         (<literals> <patterns> literal ...)
         ((ctx <literals>) #''(literal ...))
         ((ctx <patterns>) #''((... (... patt)) ...))
         (patt skel rest ...)
         ...)
     (for-all identifier? #'(literal ...))
     (syntax-violation 'syntax-match "Found non identifier" #'(literal ...)
                       (remp identifier? #'(literal ...))))
    
    ((self x (literal ...) (sub patt skel rest ...) ...)
     #'(guarded-syntax-case x (literal ...) (patt skel rest ...) ...))
    ))
)