1 """Python import hooks for importing Lisp modules into Python source
5 from boa
.environment
import Environment
6 from boa
.evaluator
import eval
7 from boa
.parser
import parse
12 def __init__(self
, module_path
, parent_env
):
13 self
.env
= Environment(parent_env
, {})
16 parse(open(module_path
).read()),
19 def __nonzero__(self
):
20 # `if m: ..' looks up m.__nonzero__
23 def __getattr__(self
, attr
):
24 return self
.env
.lookup(attr
)
26 class LispModuleLoader(ihooks
.ModuleLoader
):
28 def __init__(self
, env
):
30 ihooks
.ModuleLoader
.__init
__(self
)
32 def find_module_in_dir(self
, name
, dir, allow_packages
=1):
33 if dir and os
.path
.exists(os
.path
.join(dir, name
+ ".boa")):
34 return None, name
, ('', '', "lisp-module")
36 return ihooks
.ModuleLoader
.find_module_in_dir(
37 self
, name
, dir, allow_packages
)
39 def load_module(self
, name
, stuff
):
40 file, filename
, info
= stuff
41 (suff
, mode
, type) = info
42 if type == "lisp-module":
43 m
= self
._import
_module
(filename
+".boa")
47 return ihooks
.ModuleLoader
.load_module(self
, name
, stuff
)
49 def _import_module(self
, module
):
50 if module
in sys
.modules
:
51 return sys
.modules
[module
]
53 m
= LispModule(module
, self
.env
)
54 sys
.modules
[module
] = m