summaryrefslogtreecommitdiff
path: root/modules/language/python/module/collections.scm
diff options
context:
space:
mode:
Diffstat (limited to 'modules/language/python/module/collections.scm')
-rw-r--r--modules/language/python/module/collections.scm113
1 files changed, 60 insertions, 53 deletions
diff --git a/modules/language/python/module/collections.scm b/modules/language/python/module/collections.scm
index 1a158c9..04f7ab6 100644
--- a/modules/language/python/module/collections.scm
+++ b/modules/language/python/module/collections.scm
@@ -94,20 +94,19 @@
(define-python-class OrderedDict (dict)
(define __init__
(lam (self (* args) (** kwds))
+ ((ref dict '__init__) self)
+
(if (> (len args) 1)
(raise TypeError
(format #f
"expected at most 1 arguments, got ~a"
(len args))))
- (try
- (lambda () (ref self '__root))
- (#:except AttributeError =>
- (lambda x
- (let* ((l (link)))
- (set self '__root l)
- (set-next! l l)
- (set-prev! l l)))))
+ (if (not (ref self '__root))
+ (let* ((l (link)))
+ (set self '__root l)
+ (set-next! l l)
+ (set-prev! l l)))
(set self '__map (dict))
(py-apply py-update self (* args) (** kwds))))
@@ -127,7 +126,7 @@
(set-key! link key)
(set-next! last link)
(set-prev! root link)
- (dict_setitem self key value)))))
+ (dict-set! self key value)))))
(define __delitem__
(lam (self key (= dict_delitem dict-del!))
@@ -145,7 +144,7 @@
(lambda (yield)
(let ((root (ref self '__root)))
(let lp ((curr (get-next root)))
- (if ((not (eq? curr root)))
+ (if (not (eq? curr root))
(let ((key (get-key curr)))
(yield key (pylist-ref self key))
(lp (get-next curr)))))))))))
@@ -209,11 +208,16 @@
(define __update update)
(define keys
- (lambda (self) _OrderedDictKeysView(self)))
+ (lambda (self)
+ (_OrderedDictKeysView self)))
+
(define items
- (lambda (self) _OrderedDictItemsView(self)))
+ (lambda (self)
+ (_OrderedDictItemsView self)))
+
(define values
- (lambda (self) _OrderedDictValuesView(self)))
+ (lambda (self)
+ (_OrderedDictValuesView self)))
(define __ne__ (ref MutableMapping '__ne__))
@@ -645,51 +649,54 @@
(make-p-class (string->symbol typename) '(())
(lambda (dict)
- (pylist-set! dict '__init__
- (eval (v `(lam
- (self
- ,@(map (lambda (key) `(= ,key #f))
- field_names))
+ (pylist-set! dict '__init__
+ (object-method
+ (eval (v `(lam
+ (self
+ ,@(map (lambda (key) `(= ,key #f))
+ field_names))
- ,@(map (lambda (key) `(set self ',key ,key))
- field_names)))
- mod))
+ ,@(map (lambda (key) `(set self ',key ,key))
+ field_names)))
+ mod)))
- (pylist-set! dict '__getitem__
- (lam (self i)
- (if (number? i)
- (ref self (list-ref field_names i))
- (ref self (scm-sym i)))))
+ (pylist-set! dict '__getitem__
+ (object-method
+ (lambda (self i)
+ (if (number? i)
+ (ref self (list-ref field_names i))
+ (ref self (scm-sym i))))))
- (pylist-set! dict '__setitem__
- (lam (self i val)
- (if (number? i)
- (set self (list-ref field_names i) val)
- (set self (scm-sym i) val))))
-
- (pylist-set! dict '__repr__
- (lam (self)
- (let ((l (map (lambda (x)
- (format #f "~a=~a"
- x
- (ref self x)))
- field_names)))
-
- (format #f "~a(~a~{,~a~})"
- typename
- (car l)
- (cdr l)))))
+ (pylist-set! dict '__setitem__
+ (object-method
+ (lambda (self i val)
+ (if (number? i)
+ (set self (list-ref field_names i) val)
+ (set self (scm-sym i) val)))))
+
+ (pylist-set! dict '__repr__
+ (object-method
+ (lambda (self . l)
+ (let ((l (map (lambda (x)
+ (format #f "~a=~a"
+ x
+ (ref self x)))
+ field_names)))
+ (format #f "~a(~a~{,~a~})"
+ typename
+ (car l)
+ (cdr l))))))
- (if (eq? module None)
- (set! module (module-name (current-module)))
- (if (string? (scm-str module))
- (set! module
- (+ '(language python module)
- (map scm-sym
- (string-split module #\.))))))
-
- (if verbose (pretty-print verbose))))))
+ (if (eq? module None)
+ (set! module (module-name (current-module)))
+ (if (string? (scm-str module))
+ (set! module
+ (+ '(language python module)
+ (map scm-sym
+ (string-split module #\.))))))
+
+ (if verbose (pretty-print verbose))))))
(define UserDict dict)
(define UserString pystring)