diff options
Diffstat (limited to 'modules/language/python/module.scm')
-rw-r--r-- | modules/language/python/module.scm | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/modules/language/python/module.scm b/modules/language/python/module.scm index 51270c2..8e705a8 100644 --- a/modules/language/python/module.scm +++ b/modules/language/python/module.scm @@ -8,6 +8,7 @@ #:use-module (language python try) #:use-module (language python dir) #:use-module (language python list) + #:use-module (language python dict) #:export (Module private public import __import__ modules)) (define-syntax-rule (aif it p x y) (let ((it p)) (if it x y))) @@ -238,10 +239,34 @@ (apply f l)) (apply f l))) -(define modules (make-hash-table)) +(define-python-class ms (dict) + (define __getitem__ + (lambda (self k) + (if (string? k) + (aif it (py-get (slot-ref self 't) k #f) + it + (let* ((l (map string->symbol (string-split k #\.))) + (pth (cons* 'language 'python 'module l))) + (Module (reverse pth) (reverse l)))) + (pylist-ref (slot-ref self 't) k)))) + + (define get + (lambda* (self k #:optional (e #f)) + (if (string? k) + (aif it (py-get (slot-ref self 't) k #f) + it + (let* ((l (map string->symbol (string-split k #\.))) + (pth (cons* 'language 'python 'module l))) + (Module (reverse pth) (reverse l)))) + (py-get (slot-ref self 't) k e))))) + + + +(define modules (ms)) (define (__import__ x) (let ((x (py-get modules x #f))) (if x (values) (let ((e (Module x))) - (pylist-set! modules x e))))) + (pylist-set! modules x e) + e)))) |