diff options
author | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2018-05-14 18:00:15 +0200 |
---|---|---|
committer | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2018-05-14 18:00:15 +0200 |
commit | ba256d9aaabbe71a8c526585e22d455a9d2066fd (patch) | |
tree | 56ab56b23140dc134228847182a92cfedee81178 /modules/language/python/dict.scm | |
parent | 0a2045050517a2317083bd2ec17bae09e03c4a11 (diff) | |
parent | 330ef2953f31dd7a5b64ff72919c4d7d696c7a83 (diff) |
Merge branch 'master' of https://gitlab.com/python-on-guile/python-on-guile
Diffstat (limited to 'modules/language/python/dict.scm')
-rw-r--r-- | modules/language/python/dict.scm | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/modules/language/python/dict.scm b/modules/language/python/dict.scm index b564d28..2ce3790 100644 --- a/modules/language/python/dict.scm +++ b/modules/language/python/dict.scm @@ -18,7 +18,7 @@ py-popitem py-setdefault py-update py-clear py-hash-ref dict pyhash-listing weak-key-dict weak-value-dict - py-hash-ref py-hash-set! + py-hash-ref py-hash-set! dictNs dictRNs make-py-weak-key-hashtable make-py-weak-value-hashtable )) @@ -604,6 +604,11 @@ __init__))) +(define (renorm k) + (if (symbol? k) + k + (string->symbol k))) + (define (norm k) (if (symbol? k) (symbol->string k) @@ -611,6 +616,7 @@ (define fail (list 'fail)) +(define-syntax-rule (mkwrap dictNs norm renorm) (define-python-class dictNs () (define __getitem__ (lambda (self k) @@ -622,7 +628,10 @@ (define __iter__ (lambda (self) - (wrap-in (ref self '_dict)))) + ((make-generator () + (lambda (yield) + (for ((k v : (ref self '_dict))) () + (yield (renorm k) v))))))) (define pop (lambda (self k . l) @@ -650,7 +659,9 @@ (define items (lambda (self) - (py-items (ref self '_dict)))) + (for ((k v : (ref self '_dict))) ((l '())) + (cons (list (renorm k) v) l) + #:final (reverse l)))) (define __repr__ (lambda (self) @@ -664,9 +675,13 @@ r)))) (define __init__ - (lambda (self d) (set self '_dict d)))) + (lambda (self d) (set self '_dict d))))) + +(mkwrap dictNs norm renorm) +(mkwrap dictRNs renorm norm) -(set! (@@ (oop pf-objects) dictNs) dictNs) +(set! (@@ (oop pf-objects) dictNs) dictNs) +(set! (@@ (oop pf-objects) dictRNs) dictRNs) (define-python-class weak-key-dict (<py> <py-hashtable>) (define __init__ |