diff options
Diffstat (limited to 'modules/language/python/module.scm')
-rw-r--r-- | modules/language/python/module.scm | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/modules/language/python/module.scm b/modules/language/python/module.scm index 2940a9a..53aa1c2 100644 --- a/modules/language/python/module.scm +++ b/modules/language/python/module.scm @@ -44,14 +44,14 @@ (rawset self '_isprivate p))) (define _cont - (lambda (self id pre l nm) + (lambda (self id pre l nm skip-error?) (if id (aif it (rawref self id) ((ref it '__init__) pre l nm) (begin (rawset self id (Module pre l nm)) - (_make self pre nm))) - (_make self pre nm)))) + (_make self pre nm skip-error?))) + (_make self pre nm skip-error?)))) (define _contupdate (lambda (self id pre l nm) @@ -67,15 +67,15 @@ (match l ((name) (set self '_path (reverse (cons name pre))) - (_cont self #f (cons name pre) #f (cons name nm))) + (_cont self #f (cons name pre) #f (cons name nm) #f)) ((name . (and l (name2 . _))) (set self '_path (reverse (cons name pre))) - (_cont self name2 (cons name pre) l (cons name nm))))) + (_cont self name2 (cons name pre) l (cons name nm) #t)))) ((self l nm) - (_cont self #f l #f nm)) + (_cont self #f l #f nm #f)) ((self l) (if (pair? l) @@ -117,14 +117,20 @@ (string-split l #\.))))))) (define _make - (lambda (self l nm) + (lambda (self l nm skip-error?) (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))))) + (let* ((_module (in-scheme (resolve-module (reverse l)))) + (public-i (and _module (module-public-interface _module)))) + (if (and (not skip-error?) (not public-i)) + (raise (ModuleNotFoundError + (format #f "No module named ~a" + (ref self '__name__))))) + (set self '_export (module-public-interface _module)) (set self '_module _module) (hash-set! _modules l self)))))) |