diff options
Diffstat (limited to 'modules/language/python/module/collections.scm')
-rw-r--r-- | modules/language/python/module/collections.scm | 113 |
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) |