summaryrefslogtreecommitdiff
path: root/modules/language/python/compile.scm
diff options
context:
space:
mode:
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-04-16 21:49:02 +0200
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-04-16 21:49:02 +0200
commit7f4a0e43222e82c54e0e524356f470a738c9dc2a (patch)
treeb954419126cc5309a9cf66828ed6e3132ddd83b9 /modules/language/python/compile.scm
parent9f09b5ef3c86e26d0b5462e267633f25d0240df5 (diff)
enum class almost loading
Diffstat (limited to 'modules/language/python/compile.scm')
-rw-r--r--modules/language/python/compile.scm78
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)