summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/language/python/compile.scm32
-rw-r--r--modules/language/python/dict.scm25
-rw-r--r--modules/language/python/list.scm33
3 files changed, 77 insertions, 13 deletions
diff --git a/modules/language/python/compile.scm b/modules/language/python/compile.scm
index dc608a4..ec4215b 100644
--- a/modules/language/python/compile.scm
+++ b/modules/language/python/compile.scm
@@ -245,8 +245,8 @@
((values) (Di 'py-values))
((popitem) (Di 'py-popitem))
((setdefault) (Di 'py-setdefault))
- ((update) (Di 'py-update))))
-
+ ((update) (Di 'py-update))
+ ((clear) (Di 'py-clear))))
(define (fastfkn x) (hash-ref fasthash x))
@@ -550,8 +550,17 @@
((_ e1 e2 e3)
(list 'if (exp vs e2) (exp vs e1) (exp vs e3))))
-
-
+ (#:del
+ ;;We don't delete variables
+ ((_ (#:power #f base () . #f))
+ '(void))
+
+ ((_ (#:power #f base (l ... fin) . #f))
+ (let ((add (get-addings vs l))
+ (fin (get-addings vs (list fin)))
+ (f (exp vs base)))
+ `(,(C 'del-x) (,(C 'ref-x) ,f ,@add) ,@fin))))
+
(#:if
((_ test a ((tests . as) ...) . else)
`(,(G 'cond)
@@ -1454,6 +1463,21 @@
((_ v (#:vecsub . x) . l)
(ref-x (pylist-slice v . x) . l))))
+(define-syntax del-x
+ (syntax-rules ()
+ ((_ v (#:identifier x))
+ (ref-x (refq v 'x)))
+ ((_ v (#:call-obj x))
+ (values))
+ ((_ v (#:call x ...))
+ (values))
+ ((_ v (#:apply x ...))
+ (values))
+ ((_ v (#:vecref x))
+ (pylist-delete! v x))
+ ((_ v (#:vecsub x ...))
+ (pylist-subset! v x ... pylist-null))))
+
(define-syntax set-x
(syntax-rules ()
((_ v (a ... b) val)
diff --git a/modules/language/python/dict.scm b/modules/language/python/dict.scm
index 5442720..b24031b 100644
--- a/modules/language/python/dict.scm
+++ b/modules/language/python/dict.scm
@@ -13,7 +13,7 @@
#:export (make-py-hashtable
py-copy py-fromkeys py-get py-has_key py-items py-iteritems
py-iterkeys py-itervalues py-keys py-values
- py-popitem py-setdefault py-update
+ py-popitem py-setdefault py-update py-clear
))
(define (h x n) (modulo (py-hash x) n))
@@ -52,6 +52,12 @@
(raise KeyError x)
r)))
+(define-method (pylist-delete! (o <hashtable>) k)
+ (pyhash-rem! o k))
+
+(define-method (pylist-delete! (o <py-hashtable>) k)
+ (pyhash-rem! o k))
+
(define-method (py-hash (o <hashtable>))
(hash-fold
(lambda (k v s)
@@ -373,6 +379,16 @@
(<py-hashtable>
(apply update o l)))
+(define-py (py-clear clear o)
+ (<hashtable>
+ (hash-clear! o))
+ (<py-hashtable>
+ (let ((t (slot-ref o 't)))
+ (hash-clear! t)
+ (slot-set! o 'n 0)
+ (slot-set! o 'h H)
+ (values))))
+
#|
'viewitems'
'viewkeys'
@@ -449,3 +465,10 @@
(values k v))
(throw StopIteration))))
+
+(define-method (in key (o <hashtable>))
+ (py-has_key o key))
+
+(define-method (in key (o <py-hashtable>))
+ (py-has_key o key))
+
diff --git a/modules/language/python/list.scm b/modules/language/python/list.scm
index 094c786..9517aeb 100644
--- a/modules/language/python/list.scm
+++ b/modules/language/python/list.scm
@@ -13,12 +13,27 @@
pylist-slice pylist-subset! pylist-reverse!
pylist-pop! pylist-count pylist-extend! len in
pylist-insert! pylist-remove! pylist-sort!
- pylist-index))
+ pylist-index pylist-null pylist-delete!))
(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
(define-class <py-list> () vec n)
+(define-method (pylist-delete! (o <py-list>) k)
+ (let* ((n (slot-ref o 'n))
+ (k (if (< k 0) (+ k n) k)))
+ (pylist-subset! o k (+ k 1) None pylist-null)))
+
+(define-method (pylist-delete! (o <p>) k)
+ ((ref o '__delitem__) k))
+
+(define pylist-null
+ (let ((o (make <py-list>)))
+ (slot-set! o 'vec (make-vector 0))
+ (slot-set! o 'n 0)
+ o))
+
+
(define-method (py-hash (o <py-list>))
(let ((n (min complexity (slot-ref o 'n)))
(v (slot-ref o 'vec)))
@@ -37,6 +52,9 @@
((ref x '__tolist__ (lambda () (error "missing __tolist__ in object")))))
+(define-method (to-list (x <pair>))
+ x)
+
(define-method (to-list (x <yield>))
(define l '())
(catch StopIteration
@@ -58,7 +76,6 @@
(define-method (to-pylist (l <py-list>))
l)
-
(define-method (to-pylist (l <pair>))
(let* ((n (length l))
(vec (make-vector (* 2 n)))
@@ -129,9 +146,9 @@
(define N (slot-ref o 'n))
(define (f n) (if (< n 0) (+ N n) n))
- (let* ((n1 (f (if (eq? n1 'None) 0 n1)))
- (n2 (f (if (eq? n2 'None) (slot-ref o 'n) n2)))
- (n3 (f (if (eq? n3 'None) 1 n3)))
+ (let* ((n1 (f (if (eq? n1 None) 0 n1)))
+ (n2 (f (if (eq? n2 None) (slot-ref o 'n) n2)))
+ (n3 (f (if (eq? n3 None) 1 n3)))
(vec (slot-ref o 'vec))
(l (let lp ((i n1))
@@ -159,9 +176,9 @@
(define N (slot-ref o 'n))
(define (f n) (if (< n 0) (+ N n) n))
- (let* ((n1 (f (if (eq? n1 'None) 0 n1)))
- (n2 (f (if (eq? n2 'None) (slot-ref o 'n) n2)))
- (n3 (f (if (eq? n3 'None) 1 n3)))
+ (let* ((n1 (f (if (eq? n1 None) 0 n1)))
+ (n2 (f (if (eq? n2 None) (slot-ref o 'n) n2)))
+ (n3 (f (if (eq? n3 None) 1 n3)))
(vec (slot-ref o 'vec))
(o2 (to-pylist val))
(N2 (slot-ref o2 'n))