aboutsummaryrefslogtreecommitdiffstats
path: root/csc/macros-test.csc
diff options
context:
space:
mode:
Diffstat (limited to 'csc/macros-test.csc')
-rw-r--r--csc/macros-test.csc198
1 files changed, 108 insertions, 90 deletions
diff --git a/csc/macros-test.csc b/csc/macros-test.csc
index e4451e7..6ee0596 100644
--- a/csc/macros-test.csc
+++ b/csc/macros-test.csc
@@ -28,6 +28,7 @@
library-define?
library-ref?
make-constant
+ make-define-syntax
make-lambda
make-letrec
make-lexical-ref
@@ -54,28 +55,31 @@
(cons sequence? %sequence)
(cons lambda? %lambda)
(cons letrec? %letrec)
- (cons gensym? (lambda (x) 'gensym))))
+ (cons gensym? (lambda (x) 'gensym))
+ (cons macro-transformer? (lambda (x) 'transformer))))
(test builtin-quote
(assert-equal
(make-constant '(test 1 2 3))
- (expand '(quote (test 1 2 3)) builtins-environment)
+ (expand-body 'main
+ '((quote (test 1 2 3)))
+ builtins-environment)
transform-ir1))
(test builtin-syntax-rules-literal
(assert-equal
(make-constant 1)
- (expand
- '(builtin-let-syntax
- (foo
- (syntax-rules (a b)
- ((foo a)
- 0)
- ((foo b)
- 1)))
- (foo b))
+ (expand-body 'main
+ '((let-syntax
+ (foo
+ (syntax-rules (a b)
+ ((foo a)
+ 0)
+ ((foo b)
+ 1)))
+ (foo b)))
builtins-environment)
transform-ir1))
@@ -83,12 +87,12 @@
(test builtin-syntax-rules-underscore
(assert-equal
(make-constant 0)
- (expand
- '(builtin-let-syntax
- (foo
- (syntax-rules ()
- ((foo _) 0)))
- (foo ignored))
+ (expand-body 'main
+ '((let-syntax
+ (foo
+ (syntax-rules ()
+ ((foo _) 0)))
+ (foo ignored)))
builtins-environment)
transform-ir1))
@@ -96,12 +100,12 @@
(test builtin-syntax-rules-substitution
(assert-equal
(make-constant 5)
- (expand
- '(builtin-let-syntax
- (foo
- (syntax-rules ()
- ((foo x) x)))
- (foo 5))
+ (expand-body 'main
+ '((let-syntax
+ (foo
+ (syntax-rules ()
+ ((foo x) x)))
+ (foo 5)))
builtins-environment)
transform-ir1))
@@ -109,13 +113,13 @@
(test builtin-syntax-rules-nil
(assert-equal
(make-constant 1)
- (expand
- '(builtin-let-syntax
- (foo
- (syntax-rules ()
- ((foo x) 0)
- ((foo) 1)))
- (foo))
+ (expand-body 'main
+ '((let-syntax
+ (foo
+ (syntax-rules ()
+ ((foo x) 0)
+ ((foo) 1)))
+ (foo)))
builtins-environment)
transform-ir1))
@@ -123,12 +127,12 @@
(test builtin-syntax-rules-improper-list
(assert-equal
(make-constant 1)
- (expand
- '(builtin-let-syntax
- (foo
- (syntax-rules ()
- ((foo a . b) a)))
- (foo 1 2 3))
+ (expand-body 'main
+ '((let-syntax
+ (foo
+ (syntax-rules ()
+ ((foo a . b) a)))
+ (foo 1 2 3)))
builtins-environment)
transform-ir1))
@@ -136,12 +140,12 @@
(test builtin-syntax-rules-quoted
(assert-equal
(make-constant 'a)
- (expand
- '(builtin-let-syntax
- (foo
- (syntax-rules ()
- ((foo x) (quote x))))
- (foo a))
+ (expand-body 'main
+ '((let-syntax
+ (foo
+ (syntax-rules ()
+ ((foo x) (quote x))))
+ (foo a)))
builtins-environment)
transform-ir1))
@@ -149,14 +153,14 @@
(test builtin-syntax-rules-constant
(assert-equal
(make-constant 2)
- (expand
- '(builtin-let-syntax
- (foo
- (syntax-rules ()
- ((foo "abc") 0)
- ((foo "def") 1)
- ((foo "ghi") 2)))
- (foo "ghi"))
+ (expand-body 'main
+ '((let-syntax
+ (foo
+ (syntax-rules ()
+ ((foo "abc") 0)
+ ((foo "def") 1)
+ ((foo "ghi") 2)))
+ (foo "ghi")))
builtins-environment)
transform-ir1))
@@ -164,12 +168,12 @@
(test builtin-syntax-rules-ellipsis
(assert-equal
(make-constant 5)
- (expand
- '(builtin-let-syntax
- (foo
- (syntax-rules ()
- ((foo x ...) (x ...))))
- (foo quote 5))
+ (expand-body 'main
+ '((let-syntax
+ (foo
+ (syntax-rules ()
+ ((foo x ...) (x ...))))
+ (foo quote 5)))
builtins-environment)
transform-ir1))
@@ -177,12 +181,12 @@
(test builtin-syntax-rules-ellipsis-improper
(assert-equal
(make-constant 5)
- (expand
- '(builtin-let-syntax
- (foo
- (syntax-rules ()
- ((foo x ... . y) (x ... y))))
- (foo quote . 5))
+ (expand-body 'main
+ '((let-syntax
+ (foo
+ (syntax-rules ()
+ ((foo x ... . y) (x ... y))))
+ (foo quote . 5)))
builtins-environment)
transform-ir1))
@@ -190,13 +194,13 @@
(test builtin-syntax-rules-ellipsis-zip
(assert-equal
(make-constant '((1 . 3) (2 . 4)))
- (expand
- '(builtin-let-syntax
- (zip
- (syntax-rules ()
- ((zip (x ...) (y ...))
- (quote ((x . y) ...)))))
- (zip (1 2) (3 4)))
+ (expand-body 'main
+ '((let-syntax
+ (zip
+ (syntax-rules ()
+ ((zip (x ...) (y ...))
+ (quote ((x . y) ...)))))
+ (zip (1 2) (3 4))))
builtins-environment)
transform-ir1))
@@ -204,13 +208,13 @@
(test builtin-syntax-rules-ellipsis-nested
(assert-equal
(make-constant '(1 2 3 4 5))
- (expand
- '(builtin-let-syntax
- (append
- (syntax-rules ()
- ((append (x ...) ...)
- (quote (x ... ...)))))
- (append (1 2) (3 4) () (5)))
+ (expand-body 'main
+ '((let-syntax
+ (append
+ (syntax-rules ()
+ ((append (x ...) ...)
+ (quote (x ... ...)))))
+ (append (1 2) (3 4) () (5))))
builtins-environment)
transform-ir1))
@@ -218,12 +222,12 @@
(test builtin-syntax-rules-ellipsis-custom
(assert-equal
(make-constant 5)
- (expand
- '(builtin-let-syntax
- (foo
- (syntax-rules ::: ()
- ((foo x :::) (x :::))))
- (foo quote 5))
+ (expand-body 'main
+ '((let-syntax
+ (foo
+ (syntax-rules ::: ()
+ ((foo x :::) (x :::))))
+ (foo quote 5)))
builtins-environment)
transform-ir1))
@@ -240,9 +244,9 @@
(test-ref 'c))
(test-ref 'd)
(make-sequence (make-constant #f) (make-constant 5)))
- (expand
- '(lambda
- (a b c . d) (quote 5))
+ (expand-body 'main
+ '((lambda
+ (a b c . d) (quote 5)))
builtins-environment)
transform-ir1))
@@ -254,10 +258,24 @@
(list (make-constant 6)
(test-ref 'a))
(make-sequence (make-constant #f) (make-constant 7))))
- (expand
- '(lambda (x)
- (builtin-define a (quote 6))
- (builtin-define b a)
- (quote 7))
+ (expand-body 'main
+ '((lambda (x)
+ (builtin-define a (quote 6))
+ (builtin-define b a)
+ (quote 7)))
+ builtins-environment)
+ transform-ir1))
+
+
+ (test builtin-define-syntax
+ (assert-equal
+ (make-sequence
+ (make-define-syntax 'five 'transformer)
+ (make-constant 5))
+ (expand-body 'main
+ '((define-syntax five
+ (syntax-rules ()
+ ((five _) 5)))
+ (five 6))
builtins-environment)
transform-ir1))))