optparse compiles without errors
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>
Tue, 14 Aug 2018 20:37:15 +0000 (22:37 +0200)
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>
Tue, 14 Aug 2018 20:37:15 +0000 (22:37 +0200)
modules/language/python/compile.scm

index 300985e..f9b0d29 100644 (file)
 (define-syntax with-return
   (lambda (x)
     (define (analyze ret x)
-      (syntax-case x (begin let if let-syntax cond)
+      (syntax-case x (begin let if let-syntax)
         ((cond (p a ... b) ...)
+         (equal? (syntax->datum #'cond)
+                 '(@ (guile) cond))
          (with-syntax (((bb ...) (map (lambda (x) (analyze ret x)) #'(b ...))))
            #'(cond (p a ... bb) ...)))
         ((with-self u v a ... b)
          (if (eq? #'(b ...) '())
              #'a
              #`(values a b ...)))
+        ((return)
+         (equal? (syntax->datum #'return) (syntax->datum ret))
+         #`(values))        
         (x #'x)))
-   
+  
     (define (is-ec ret x tail)
-      (syntax-case x (let-syntax begin let if define @@ cond)
+      (syntax-case x (let-syntax begin let if define @@)
         ((cond (p a ... b) ...)
-         (pk 'cond)
-         (or
-          (or-map (lambda (x) (is-ec ret x #f))
-                  #'(a ... ...))
-          (or-map (lambda (x) (is-ec ret x tail))
-                  #'(b ...))))
+         (equal? (syntax->datum #'cond)
+                 '(@ (guile) cond))
+           (or
+            (or-map (lambda (x) (is-ec ret x #f))
+                    #'(a ... ...))
+            (or-map (lambda (x) (is-ec ret x tail))
+                    #'(b ...))))
         
         ((with-self u v a ... b)
          (equal? (syntax->datum #'with-self)
-                 '(@@ (language python compile) with-self))
-         (begin
-           (pk 'with-self)
-           (or
-            (or-map (lambda (x) (is-ec ret x #f)) #'(a ...))
-            (is-ec ret #'b tail))))
+                 '(@@ (language python compile) with-self))         
+         (or
+          (or-map (lambda (x) (is-ec ret x #f)) #'(a ...))
+          (is-ec ret #'b tail)))
 
         ((let-syntax v a ... b)
-         (pk 'let-syntax)
+         #t
          (or
           (or-map (lambda (x) (is-ec ret x #f)) #'(a ...))
           (is-ec ret #'b tail)))
           (is-ec ret #'p #f)
           (is-ec ret #'a tail)))
 
-        ((return b ...)
+        ((return b ...)
          (equal? (syntax->datum #'return) (syntax->datum ret))
          (not tail))