diff options
author | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2018-04-16 21:49:02 +0200 |
---|---|---|
committer | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2018-04-16 21:49:02 +0200 |
commit | 7f4a0e43222e82c54e0e524356f470a738c9dc2a (patch) | |
tree | b954419126cc5309a9cf66828ed6e3132ddd83b9 /modules/language/python/compile.scm | |
parent | 9f09b5ef3c86e26d0b5462e267633f25d0240df5 (diff) |
enum class almost loading
Diffstat (limited to 'modules/language/python/compile.scm')
-rw-r--r-- | modules/language/python/compile.scm | 78 |
1 files changed, 47 insertions, 31 deletions
diff --git a/modules/language/python/compile.scm b/modules/language/python/compile.scm index a54dab8..93adc75 100644 --- a/modules/language/python/compile.scm +++ b/modules/language/python/compile.scm @@ -1062,7 +1062,7 @@ (let* ((es2 (map (g vs exp) es)) (vs2 (union es2 vs)) (code2 (exp vs2 code)) - (p (is-ec #t code2 #t (list (C 'break) (C 'continue)))) + (p (is-ec #t code2 #t (list (C 'continue)))) (else2 (if else (exp vs2 else) #f)) (in2 (map (g vs exp) in))) (list (C 'cfor) es2 in2 code2 else2 p))))))) @@ -1211,7 +1211,7 @@ (,(C 'with-return) ,r ,(mk `(let ,(map (lambda (x) (list x #f)) ls) (,(C 'with-self) ,c? ,aa - ,(with-fluids ((return r)) + ,(with-fluids ((return r)) (exp ns code)))))))))) (if y? @@ -1321,7 +1321,7 @@ ,(make-set vs op (car l) (exp vs (car u))) (values)) `(begin - @,(map (lambda (l u) (make-set vs op l u)) + ,@(map (lambda (l u) (make-set vs op l u)) l (map (g vs exp) u)) (values)))) @@ -1388,7 +1388,7 @@ ,(make-set vs op (car l) (exp vs (car u))) ,(exp vs (car l))) `(begin - @,(map (lambda (l u) (make-set vs op l u)) + ,@(map (lambda (l u) (make-set vs op l u)) l (map (g vs exp) u)) (values ,@(map (g exp vs) l))))) @@ -1578,7 +1578,7 @@ (syntax-parameterize ((x (lambda (y) #'v)) ...) code ...)) (define (is-ec ret x tail tags) - (syntax-case (pr 'is-ec x) (begin let if define @@) + (syntax-case (pr 'is-ec x) (begin let if define set! @@) ((begin a ... b) #t (or @@ -1609,6 +1609,10 @@ ((define . _) #t #f) + + ((set! . _) + #t + #f) ((if p a) #t @@ -1728,14 +1732,15 @@ (syntax-rules () ((_ (x) (a) code #f #f) (if (pair? a) - (let lp ((l a)) - (if (pair? l) - (begin - (set! x (car l)) - (with-sp ((continue (lp (cdr l))) - (break (values))) - code - (lp (cdr l)))))) + (let/ec break-ret + (let lp ((l a)) + (if (pair? l) + (begin + (set! x (car l)) + (with-sp ((continue (values)) + (break (break-ret))) + code) + (lp (cdr l)))))) (for/adv1 (x) (a) code #f #f))) ((_ (x) (a) code #f #t) @@ -1743,29 +1748,40 @@ (let/ec break-ret (let lp ((l a)) (if (pair? l) - (begin - (let/ec continue-ret - (set! x (car l)) - (with-sp ((continue (continue-ret)) - (break (break-ret))) - code)) - (lp (cdr l)))))) + (let/ec continue-ret + (set! x (car l)) + (with-sp ((continue (continue-ret)) + (break (break-ret))) + code)) + (lp (cdr l))))) (for/adv1 (x) (a) code #f #t))) ((_ (x) (a) code next #f) (if (pair? a) (let/ec break-ret - (let ((x (let lp ((l a) (old #f)) - (if (pair? l) - (begin - (set! x (car l)) - (let/ec continue-ret - (with-sp ((continue (continue-ret)) - (break (break-ret))) - code)) - (lp (cdr l))) - old)))) - next)) + (let lp ((l a)) + (if (pair? l) + (begin + (set! x (car l)) + (with-sp ((continue (values)) + (break (break-ret))) + code)) + (lp (cdr l)))) + next) + (for/adv1 (x) (a) code next #f))) + + ((_ (x) (a) code next #t) + (if (pair? a) + (let/ec break-ret + (let lp ((l a)) + (if (pair? l) + (let/ec continue-ret + (set! x (car l)) + (with-sp ((continue (continue-ret)) + (break (break-ret))) + code)) + (lp (cdr l)))) + next) (for/adv1 (x) (a) code next #f))) ((_ x a code next p) |