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.scm62
1 files changed, 25 insertions, 37 deletions
diff --git a/modules/language/python/compile.scm b/modules/language/python/compile.scm
index ad341a5..a039ee1 100644
--- a/modules/language/python/compile.scm
+++ b/modules/language/python/compile.scm
@@ -401,20 +401,20 @@
(define (fastfkn x) (hash-ref fasthash x))
(define (get-kwarg vs arg)
- (let lp ((arg arg) (l '()) (kw '()))
+ (let lp ((arg arg))
(match arg
+ (((#:comp . (and x (_ (#:cfor . _) . _))) . arg2)
+ (cons `(* ,(exp vs `(#:tuple ,@x))) (lp arg2)))
+ (((#:* a) . arg)
+ (cons `(* ,(exp vs a)) (lp arg)))
+ (((#:** a) . arg)
+ (cons `(** ,(exp vs a)) (lp arg)))
(((#:= a b) . arg)
- (lp arg
- l
- (cons*
- (exp vs b)
- (symbol->keyword
- (exp vs a))
- kw)))
+ (cons `(= ,(exp vs a) ,(exp vs b)) (lp arg)))
((x . arg)
- (lp arg (cons (exp vs x) l) kw))
+ (cons (exp vs x) (lp arg)))
(()
- (values (reverse l) (reverse kw))))))
+ '()))))
(define (get-args_ vs arg)
(let lp ((arg arg))
@@ -512,18 +512,8 @@
`(#:fast-id ,it ',tag)
`(#:identifier ',tag))))))
- ((#:arglist args apply kw)
- (call-with-values (lambda () (get-kwarg vs args))
- (lambda (args kwarg)
- (if (or kw apply)
- `(#:apply ,@args ,@kwarg
- ,`(,(L 'to-list)
- (,(G 'append)
- (if apply (exp vs apply) ''())
- (if kw
- '(,(C 'kw->li) (exp vs kw))
- ''()))))
- `(#:call ,@args ,@kwarg)))))
+ ((#:arglist args)
+ `(#:apply ,@(get-kwarg vs args)))
((#:subscripts (n #f #f))
`(#:vecref ,(exp vs n)))
@@ -723,20 +713,13 @@
(#:bytes
((_ l)
- (let* ((n (let lp ((l l) (s 0))
- (if (pair? l)
- (lp (cdr l) (+ s (length (car l))))
- s)))
- (b (make-bytevector n)))
+ (let* ((b (make-bytevector (length l))))
(let lp ((l l) (i 0))
(if (pair? l)
- (let lp2 ((u (car l)) (i i))
- (if (pair? u)
- (begin
- (bytevector-u8-set! b i (car u))
- (lp2 (cdr u) (+ i 1)))
- (lp (cdr l) i)))))
- `(,(B 'bytes) ,b))))
+ (begin
+ (bytevector-u8-set! b i (car l))
+ (lp (cdr l) (+ i 1)))
+ `(,(B 'bytes) ,b))))))
(#:+
@@ -1273,7 +1256,12 @@
(#:assign (l)))
(let ((s (string->symbol v)))
`(,s/d ,s ,(exp vs l)))))
-
+
+ (#:assert
+ ((_ x f n m)
+ `(if (,(G 'not) (,(G 'and) ,@(map (lambda (x) `(,(C 'boolit) ,(exp vs x)))
+ x)))
+ (,(C 'raise) ,(C 'AssertionError) ',f ,n ,m))))
(#:return
((_ x)
@@ -1832,9 +1820,9 @@
((_ v (#:call x ...) . l)
(ref-x (v x ...) . l))
((_ v (#:apply x ...) . l)
- (ref-x (apply v x ...) . l))
+ (ref-x (py-apply v x ...) . l))
((_ v (#:apply x ...) . l)
- (ref-x (apply v x ...) . l))
+ (ref-x (py-apply v x ...) . l))
((_ v (#:vecref x) . l)
(ref-x (pylist-ref v x) . l))
((_ v (#:vecsub . x) . l)