summaryrefslogtreecommitdiff
path: root/modules/language
diff options
context:
space:
mode:
Diffstat (limited to 'modules/language')
-rw-r--r--modules/language/python/dict.scm2
-rw-r--r--modules/language/python/hash.scm2
-rw-r--r--modules/language/python/module.scm38
-rw-r--r--modules/language/python/module/enum.py4
4 files changed, 28 insertions, 18 deletions
diff --git a/modules/language/python/dict.scm b/modules/language/python/dict.scm
index 977d5e1..f76e2ad 100644
--- a/modules/language/python/dict.scm
+++ b/modules/language/python/dict.scm
@@ -13,7 +13,7 @@
#:use-module (oop goops)
#:use-module (oop pf-objects)
#:export (make-py-hashtable <py-hashtable>
- py-copy py-fromkeys py-get py-has_key py-items py-iteritems
+ py-copy py-fromkeys 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 dict pyhash-listing
diff --git a/modules/language/python/hash.scm b/modules/language/python/hash.scm
index 4fab02d..168cd44 100644
--- a/modules/language/python/hash.scm
+++ b/modules/language/python/hash.scm
@@ -42,7 +42,7 @@
s))))
(define-method (py-hash (x <p>))
- (aif it (pk 'it (ref x '__hash__))
+ (aif it (ref x '__hash__)
(pk 'hash (it))
(next-method)))
diff --git a/modules/language/python/module.scm b/modules/language/python/module.scm
index ab963d1..5c5d630 100644
--- a/modules/language/python/module.scm
+++ b/modules/language/python/module.scm
@@ -7,6 +7,7 @@
#:use-module (language python yield)
#:use-module (language python try)
#:use-module (language python dir)
+ #:use-module (language python list)
#:export (Module private public import))
(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
@@ -121,7 +122,6 @@
(rawset self '_private #f)
(if (not (rawref self '_module))
(begin
- (set self '__dict__ self)
(set self '__name__ (string-join
(map symbol->string (reverse nm)) "."))
(let* ((_module (in-scheme (resolve-module (reverse l))))
@@ -135,20 +135,18 @@
(set self '_module _module)
(hash-set! _modules l self))))))
- (define __getattribute__
+ (define __getattr__
(lambda (self k)
(define (fail)
- (raise (KeyError "getattr in Module")))
- (aif it (rawref self k)
- it
- (if (rawref self '_module)
- (let ((k (_k k))
- (m (_m self)))
- (let ((x (module-ref m k e)))
- (if (eq? e x)
- (fail)
- x)))
- (fail)))))
+ (raise (AttributeError "getattr in Module")))
+ (if (rawref self '_module)
+ (let ((k (_k k))
+ (m (_m self)))
+ (let ((x (module-ref m k e)))
+ (if (eq? e x)
+ (fail)
+ x)))
+ (fail))))
(define __setattr__
(lambda (self k v)
@@ -175,13 +173,25 @@
(raise KeyError "delattr of missing key in Module")))
(fail))))
+ (define __dir__
+ (lambda (self)
+ (let* ((h (slot-ref self 'h))
+ (l '())
+ (add (lambda (k . u) (set! l (cons (symbol->string k) l)))))
+ (hash-for-each add h)
+ (aif it (ref self '_module)
+ (module-for-each add it)
+ #f)
+ (py-list l))))
+
+
(define __repr__
(lambda (self) (format #f "Module(~a)" (ref self '__name__))))
(define __getitem__
(lambda (self k)
(define k (if (string? k) (string->symbol k) k))
- (__getattribute__ self k)))
+ (__getattr__ self k)))
(define __iter__
(lambda (self)
diff --git a/modules/language/python/module/enum.py b/modules/language/python/module/enum.py
index 7e7e46c..eefc1b5 100644
--- a/modules/language/python/module/enum.py
+++ b/modules/language/python/module/enum.py
@@ -150,7 +150,7 @@ class EnumMeta(type):
if invalid_names:
raise ValueError('Invalid enum member name: {0}'.format(
','.join(invalid_names)))
-
+
# create a default docstring if one has not been provided
if '__doc__' not in classdict:
classdict['__doc__'] = 'An enumeration.'
@@ -164,7 +164,7 @@ class EnumMeta(type):
# save attributes from super classes so we know if we can take
# the shortcut of storing members in the class dict
-
+
base_attributes = {a for b in enum_class.mro() for a in b.__dict__}
# Reverse value->name map for hashable values.