summaryrefslogtreecommitdiff
path: root/modules/language/python/module.scm
diff options
context:
space:
mode:
Diffstat (limited to 'modules/language/python/module.scm')
-rw-r--r--modules/language/python/module.scm38
1 files changed, 24 insertions, 14 deletions
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)