diff options
Diffstat (limited to 'modules/language/python')
-rw-r--r-- | modules/language/python/compile.scm | 1 | ||||
-rw-r--r-- | modules/language/python/list.scm | 31 |
2 files changed, 32 insertions, 0 deletions
diff --git a/modules/language/python/compile.scm b/modules/language/python/compile.scm index 3b5bd8f..4aa67ec 100644 --- a/modules/language/python/compile.scm +++ b/modules/language/python/compile.scm @@ -797,6 +797,7 @@ ((hash-ref tagis tag (lambda y (warn "not tag in tagis") x)) x vs)) (#:True #t) + (#:null ''()) (#:False #f) (#:pass `(values)) (#:break diff --git a/modules/language/python/list.scm b/modules/language/python/list.scm index 0b98b61..b8f1860 100644 --- a/modules/language/python/list.scm +++ b/modules/language/python/list.scm @@ -161,3 +161,34 @@ (format port "[]") (format port "[~a~{, ~a~}]" (car l) (cdr l))))) + +(define-method (+ (o1 <py-list>) (o2 <py-list>)) + (let* ((vec1 (slot-ref o1 'vec)) + (vec2 (slot-ref o2 'vec)) + (n1 (slot-ref o1 'n)) + (n2 (slot-ref o2 'n)) + (n (+ n1 n2)) + (vec (make-vector (* 2 n))) + (o (make <py-list>))) + + (let lp ((i1 0)) + (if (< i1 n1) + (begin + (vector-set! vec i1 (vector-ref vec1 i1)) + (lp (+ i1 1))) + (let lp ((i2 0) (i i1)) + (if (< i2 n2) + (begin + (vector-set! vec i (vector-ref vec2 i2)) + (lp (+ i2 1) (+ i 1))))))) + + (slot-set! o 'n n ) + (slot-set! o 'vec vec) + o)) + +(define-method (+ (o1 <pair>) (o2 <pair>)) + (append o1 o2)) + + + + |