Ticket #398: syntax-tests.patch

File syntax-tests.patch, 1.5 KB (added by sjamaan, 14 years ago)

syntax-rules, er-macro and ir-macro versions of Al*'s evil testcase

  • tests/syntax-tests.scm

    diff --git a/tests/syntax-tests.scm b/tests/syntax-tests.scm
    index 6524253..49aafcb 100644
    a b  
    120120           y)))
    121121)
    122122
     123;; From Al* Petrofsky's "An Advanced Syntax-Rules Primer for the Mildly Insane"
     124(let ((a 1))
     125  (letrec-syntax
     126      ((foo (syntax-rules ()
     127              ((_ b)
     128               (bar a b))))
     129       (bar (syntax-rules ()
     130              ((_ c d)
     131               (cons c (let ((c 3))
     132                         (list d c 'c)))))))
     133    (let ((a 2))
     134      (t '(1 2 3 a) (foo a)))))
     135
     136;; ER equivalent
     137(let ((a 1))
     138  (letrec-syntax
     139      ((foo (er-macro-transformer
     140             (lambda (x r c)
     141               `(,(r 'bar) ,(r 'a) ,(cadr x)))))
     142       (bar (er-macro-transformer
     143             (lambda (x r c)
     144               (let ((c (cadr x))
     145                     (d (caddr x)))
     146                `(,(r 'cons) ,c
     147                  (,(r 'let) ((,c 3))
     148                   (,(r 'list) ,d ,c ',c))))))))
     149    (let ((a 2))
     150      (t '(1 2 3 a) (foo a)))))
     151
     152;; IR equivalent
     153(let ((a 1))
     154  (letrec-syntax
     155      ((foo (ir-macro-transformer
     156             (lambda (x i c)
     157               `(bar a ,(cadr x)))))
     158       (bar (ir-macro-transformer
     159             (lambda (x i c)
     160               (let ((c (cadr x))
     161                     (d (caddr x)))
     162                 `(cons ,c
     163                        (let ((,c 3))
     164                          (list ,d ,c ',c))))))))
     165    (let ((a 2))
     166      (t '(1 2 3 a) (foo a)))))
     167
    123168(define-syntax kw
    124169  (syntax-rules (baz)
    125170    ((_ baz) "baz")