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.scm55
1 files changed, 31 insertions, 24 deletions
diff --git a/modules/language/python/module.scm b/modules/language/python/module.scm
index 8e705a8..5cefeba 100644
--- a/modules/language/python/module.scm
+++ b/modules/language/python/module.scm
@@ -145,13 +145,17 @@
(define (fail)
(raise (AttributeError "getattr in Module")))
(let ((k (_k k)))
- (let ((x (module-ref (rawref self '_export) k e)))
- (if (eq? e x)
- (let ((x (module-ref (_m self) k e)))
- (if (eq? e x)
- (fail)
- x))
- x)))))
+ (cond
+ ((memq k '(__iter__ __repr__))
+ (lambda () ((rawref self k) self)))
+ (else
+ (let ((x (module-ref (rawref self '_export) k e)))
+ (if (eq? e x)
+ (let ((x (module-ref (_m self) k e)))
+ (if (eq? e x)
+ (fail)
+ x))
+ x)))))))
(define __setattr__
(lambda (self k v)
@@ -190,30 +194,31 @@
(module-for-each add m)
(module-for-each add (rawref self '_export))
(py-list l))))
+
+
+ (define __iter__
+ (lambda (self)
+ (let* ((h (slot-ref self 'h))
+ (l '())
+ (m (_m self))
+ (add (lambda (k v)
+ (let ((k (symbol->string k)))
+ (if (and (not (in "-" k)) (variable-bound? v))
+ (set! l (cons (list k (variable-ref v))
+ l)))))))
+ (module-for-each add m)
+ (module-for-each add (rawref self '_export))
+ l)))
+
(define __repr__
- (lambda (self) (format #f "Module(~a)" (ref self '__name__))))
+ (lambda (self) (format #f "Module(~a)" (rawref self '__name__))))
(define __getitem__
(lambda (self k)
(define k (if (string? k) (string->symbol k) k))
- (__getattribute__ self k)))
-
- (define __iter__
- (lambda (self)
- (define m (_m self))
- ((make-generator ()
- (lambda (yield)
- (define l '())
- (define (f k v) (set! l (cons (list (symbol->string k) v) l)))
- (module-for-each f m)
- (let lp ((l l))
- (if (pair? l)
- (begin
- (apply yield (car l))
- (lp (cdr l)))))))))))
-
+ (__getattribute__ self k))))
(define-syntax import
@@ -270,3 +275,5 @@
(let ((e (Module x)))
(pylist-set! modules x e)
e))))
+
+(set! (@@ (oop pf-objects) Module) Module)