diff options
Diffstat (limited to 'modules/language/python/compile.scm')
-rw-r--r-- | modules/language/python/compile.scm | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/modules/language/python/compile.scm b/modules/language/python/compile.scm index 00443a9..5d7796b 100644 --- a/modules/language/python/compile.scm +++ b/modules/language/python/compile.scm @@ -1684,6 +1684,24 @@ (define (gentemp stx) (datum->syntax stx (gensym "x"))) +(define-syntax clambda + (lambda (x) + (syntax-case x () + ((_ (x ...) code ...) + (with-syntax ((n (length #'(x ...)))) + #'(let ((f (lambda (x ... . u) code ...))) + (if (> n 1) + (case-lambda + ((c) + (if (pair? c) + (let ((cc (cdr c))) + (if (pair? cc) + (apply f c) + (f c cc))) + (py-apply f (* c)))) + (q (apply f q))) + f))))))) + (define-syntax cfor (syntax-rules () ((_ (x) (a) code #f #f) @@ -1754,7 +1772,7 @@ (lambda () (let lp () (call-with-values (lambda () (next inv)) - (lambda (xx ...) + (clambda (xx ...) (set! x xx) ... (with-sp ((break (values)) (continue (values))) @@ -1770,7 +1788,7 @@ (lambda () (let lp () (call-with-values (lambda () (values (next inv) ...)) - (lambda (xx ...) + (clambda (xx ...) (set! x xx) ... (with-sp ((break (values)) (continue (values))) @@ -1787,7 +1805,7 @@ (catch StopIteration (lambda () (call-with-values (lambda () (next inv)) - (lambda (xx ...) + (clambda (xx ...) (set! x xx) ... (let/ec continue-ret (with-sp ((break (break-ret)) @@ -1805,7 +1823,7 @@ (catch StopIteration (lambda () (call-with-values (lambda () (values (next inv) ...)) - (lambda (xx ...) + (clambda (xx ...) (set! x xx) ... (let/ec continue-ret (with-sp ((break (break-ret)) @@ -1841,7 +1859,7 @@ (lambda () (let lp () (call-with-values (lambda () (next inv)) - (lambda (xx ...) + (clambda (xx ...) (set! x xx) ... (let/ec continue-ret (with-sp ((break (break-ret)) @@ -1856,7 +1874,7 @@ (lambda () (let lp () (call-with-values (lambda () (next inv)) - (lambda (xx ...) + (clambda (xx ...) (set! x xx) ... (with-sp ((break (break-ret)) (continue (values))) @@ -1875,7 +1893,7 @@ (lambda () (let lp () (call-with-values (lambda () get) - (lambda (xx ...) + (clambda (xx ...) (set! x xx) ... (let/ec continue-ret (with-sp ((break (break-ret)) @@ -1890,7 +1908,7 @@ (lambda () (let lp () (call-with-values (lambda () get) - (lambda (xx ...) + (clambda (xx ...) (set! x xx) ... (with-sp ((break (break-ret)) (continue (values))) |