summaryrefslogtreecommitdiff
path: root/modules/language/python/dict.scm
diff options
context:
space:
mode:
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>2017-10-01 13:49:42 +0200
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>2017-10-01 13:49:42 +0200
commit0c1d43a631486f00ea26cb6eaa685509caf77d50 (patch)
treea2de1198039059bb91a2f5cfceed40d86136b7b3 /modules/language/python/dict.scm
parent710573cbdb4365b02563fd1c01e5f7e78a9ed6de (diff)
generic function addition to property lookup
Diffstat (limited to 'modules/language/python/dict.scm')
-rw-r--r--modules/language/python/dict.scm39
1 files changed, 38 insertions, 1 deletions
diff --git a/modules/language/python/dict.scm b/modules/language/python/dict.scm
index 6c88ee4..5b6567b 100644
--- a/modules/language/python/dict.scm
+++ b/modules/language/python/dict.scm
@@ -14,7 +14,7 @@
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-clear
- py-hash-ref
+ py-hash-ref dict pyhash-listing
))
(define (h x n) (modulo (py-hash x) n))
@@ -473,3 +473,40 @@
(define-method (in key (o <py-hashtable>))
(py-has_key o key))
+(define-python-class dict (<py-hashtable>)
+ (define __init__
+ (case-lambda
+ ((self)
+ (let ((r (make-py-hashtable)))
+ (slot-set! self 't (slot-ref r 't))
+ (slot-set! self 'h (slot-ref r 'h))
+ (slot-set! self 'n (slot-ref r 'n))))
+ ((self x)
+ (__init__ self)
+ (if (is-a? x <py-hashtable>)
+ (hash-for-each
+ (lambda (k v)
+ (pylist-set! self k v))
+ (slot-ref x 't)))))))
+
+(define (pyhash-listing)
+ (let ((l (to-pylist
+ (map symbol->string
+ '(__class__ __cmp__ __contains__ __delattr__
+ __delitem__ __doc__ __eq__ __format__
+ __ge__ __getattribute__ __getitem__
+ __gt__ __hash__ __init__ __iter__
+ __le__ __len__ __lt__ __ne__ __new__
+ __reduce__ __reduce_ex__ __repr__
+ __setattr__ __setitem__ __sizeof__
+ __str__ __subclasshook__
+ clear copy fromkeys get has_key
+ items iteritems iterkeys itervalues
+ keys pop popitem setdefault update
+ values viewitems viewkeys viewvalues)))))
+ (pylist-sort! l)
+ l))
+
+
+(define-method (py-class (o <hashtable>)) dict)
+(define-method (py-class (o <py-hashtable>)) dict)