Move utils into its onw file
authorLuke Lau <luke_lau@icloud.com>
Tue, 13 Aug 2019 15:06:28 +0000 (16:06 +0100)
committerLuke Lau <luke_lau@icloud.com>
Tue, 13 Aug 2019 15:06:28 +0000 (16:06 +0100)
ast.scm
tests.scm
utils.scm [new file with mode: 0644]

diff --git a/ast.scm b/ast.scm
index 342fe453a4d9276c36237e43e1a7069b5ec75670..b70317a70e6fd3a14aa9fab5c94be57991427f2e 100644 (file)
--- a/ast.scm
+++ b/ast.scm
@@ -1,3 +1,5 @@
+(load "utils.scm")
+
 (define (ast-type x)
   (define (builtin? x)
     (case x
@@ -33,7 +35,7 @@
     ('app (map f x))
     ('lambda `(lambda ,(lambda-args x) ,(f (lambda-body x))))
     ('if `(if ,@(map f (cdr x))))
-    ('stack `(stack ,(cadr x) ,(map f (caddr x))))
+    ('stack `(stack ,(cadr x) ,(f (caddr x))))
     (else x)))
 
 (define (ast-collect f x)
           (strong-connect v)))
        (car graph)))
     result))
-
-
-                                       ; utils
-
-(define (range s n)
-  (if (= 0 n) '()
-      (append (range s (- n 1))
-             (list (+ s (- n 1))))))
-
-(define (flat-map f . xs) (fold-left append '() (apply map (cons f xs))))
-(define (repeat x n) (if (<= n 0) '()
-                        (cons x (repeat x (- n 1)))))
-
-
-(define-syntax push!
-  (syntax-rules ()
-    ((_ s x) (set! s (cons x s)))))
-
-(define-syntax pop!
-  (syntax-rules ()
-    ((_ s) (let ([x (car s)])
-            (set! s (cdr s))
-            x))))
index 6dfbd9f4459cc1e46b3258caab6d5c0ba0ff2e27..ecee99eed962aa94ea39ed8c0f16f4b9c32bc4fa 100644 (file)
--- a/tests.scm
+++ b/tests.scm
                 '((data A [foo Int]
                   [bar Bool])
                   (let ([(foo x) (foo 0)]) x))))
+
+(test-prog '((data A [foo Int])
+            (let ([x (foo 42)])
+              (let ([(foo y) x])
+                (+ 1 y))))
+          43)
+
+(test-prog '((data A [foo Int])
+            (data B [bar A])
+            (let ([(bar (foo x)) (bar (foo 42))])
+              x))
+          42)
diff --git a/utils.scm b/utils.scm
new file mode 100644 (file)
index 0000000..e063b85
--- /dev/null
+++ b/utils.scm
@@ -0,0 +1,27 @@
+(define (drop n xs)
+  (case n
+    [(0) xs]
+    [else (drop (- n 1) (cdr xs))]))
+
+(define (drop-end n xs)
+  (reverse (drop n (reverse xs))))
+
+(define (range s n)
+  (if (= 0 n) '()
+      (append (range s (- n 1))
+             (list (+ s (- n 1))))))
+
+(define (flat-map f . xs) (fold-left append '() (apply map (cons f xs))))
+(define (repeat x n) (if (<= n 0) '()
+                        (cons x (repeat x (- n 1)))))
+
+
+(define-syntax push!
+  (syntax-rules ()
+    ((_ s x) (set! s (cons x s)))))
+
+(define-syntax pop!
+  (syntax-rules ()
+    ((_ s) (let ([x (car s)])
+            (set! s (cdr s))
+            x))))