diff options
Diffstat (limited to 'modules/language/python/compile.scm')
-rw-r--r-- | modules/language/python/compile.scm | 78 |
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)) |