summaryrefslogtreecommitdiff
path: root/modules/language/python/compile.scm
diff options
context:
space:
mode:
Diffstat (limited to 'modules/language/python/compile.scm')
-rw-r--r--modules/language/python/compile.scm78
1 files changed, 44 insertions, 34 deletions
diff --git a/modules/language/python/compile.scm b/modules/language/python/compile.scm
index c78c868..032b1c2 100644
--- a/modules/language/python/compile.scm
+++ b/modules/language/python/compile.scm
@@ -182,14 +182,17 @@
((#:global . _)
vs)
- ((#:import (#:name ((ids ...) . as)) ...)
+ ((#:import (#:name ((ids ...) . as) ...) ...)
(let lp ((ids ids) (as as) (vs vs))
- (if (pair? as)
- (lp (cdr ids) (cdr as)
- (let ((as (car as))
- (ids (car ids)))
- (union vs (list (exp '() (if as as (car ids)))))))
- vs)))
+ (if (pair? ids)
+ (let lp2 ((ids2 (car ids)) (as2 (car as)) (vs vs))
+ (if (pair? as2)
+ (lp2 (cdr ids2) (cdr as2)
+ (let ((as2 (car as2))
+ (ids2 (car ids2)))
+ (union vs (list (exp '() (if as2 as2 (car ids2)))))))
+ (lp (cdr ids) (cdr as) vs)))
+ vs)))
((#:expr-stmt l (#:assign u ... v))
(union
@@ -943,34 +946,39 @@
l))))
- ((_ (#:name ((ids ...) . as)) ...)
+ ((_ (#:name ((ids ...) . as) ...) ...)
`(begin
,@(map
- (lambda (ids as)
- (let ((path (map (g vs exp) ids)))
- (if as
- (exp
- vs
- `(#:expr-stmt
- ((#:test (#:power #f ,as ())))
- (#:assign
- ((#:verb
- ((@ (language python module) import)
- ((@ (language python module) Module)
- ',(reverse (append '(language python module) path))
- ',(reverse path))
- ,(exp vs as)))))))
- (exp
- vs
- `(#:expr-stmt
- ((#:test (#:power #f ,(car ids) ())))
- (#:assign
- ((#:verb
- ((@ (language python module) import)
- ((@ (language python module) Module)
- ',(append '(language python module) path))
- ,(exp vs (car ids)))))))))))
- ids as))))
+ (lambda (ids as)
+ `(begin
+ ,@(map (lambda (ids as)
+ (let ((path (map (g vs exp) ids)))
+ (if as
+ (exp
+ vs
+ `(#:expr-stmt
+ ((#:test (#:power #f ,as ())))
+ (#:assign
+ ((#:verb
+ ((@ (language python module) import)
+ ((@ (language python module) Module)
+ ',(reverse (append
+ '(language python module)
+ path))
+ ',(reverse path))
+ ,(exp vs as)))))))
+ (exp
+ vs
+ `(#:expr-stmt
+ ((#:test (#:power #f ,(car ids) ())))
+ (#:assign
+ ((#:verb
+ ((@ (language python module) import)
+ ((@ (language python module) Module)
+ ',(append '(language python module) path))
+ ,(exp vs (car ids)))))))))))
+ ids as)))
+ ids as))))
(#:for
((_ e in code . #f)
@@ -1002,6 +1010,7 @@
((arg1 arg2)
(let ((v1 (gensym "va"))
(v2 (gensym "vb"))
+ (x (string->symbol x))
(lp (gensym "lp")))
`(let ((,v1 ,(exp vs arg1))
(,v2 ,(exp vs arg2)))
@@ -1014,9 +1023,10 @@
(let ((v1 (gensym "va"))
(v2 (gensym "vb"))
(st (gensym "vs"))
+ (x (string->symbol x))
(lp (gensym "lp")))
`(let ((,v1 ,(exp vs arg1))
- (,st ,(exp vs arg2))
+ (,st ,(exp vs arg2))
(,v2 ,(exp vs arg3)))
(if (> st 0)
(let ,lp ((,x ,v1))