summaryrefslogtreecommitdiff
path: root/modules/language/python
diff options
context:
space:
mode:
Diffstat (limited to 'modules/language/python')
-rw-r--r--modules/language/python/compile.scm1
-rw-r--r--modules/language/python/list.scm31
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))
+
+
+
+