- var nmodule = load_module_commons(owner, tree, mod_name)
- if nmodule != null then loaded_nmodules[module_path] = nmodule
+ # Handle lexer and parser error
+ var nmodule = tree.n_base
+ if nmodule == null then
+ var neof = tree.n_eof
+ assert neof isa AError
+ error(neof, neof.message)
+ return null
+ end
+
+ loaded_nmodules[module_path] = nmodule
+ return nmodule
+ end
+
+ # Try to load a module and its imported modules using a path.
+ # Display an error if there is a problem (IO / lexer / parser / importation) and return null
+ # Note: usually, you do not need this method, use `get_mmodule_by_name` instead.
+ fun load_module(owner: nullable MModule, filename: String): nullable AModule
+ do
+ var nmodule = load_module_ast(filename)
+ if nmodule == null then return null # forward error
+
+ var mmodule = nmodule.mmodule
+ if mmodule != null then return nmodule
+
+ var mod_name = filename.basename(".nit")
+ mmodule = build_a_mmodule(owner, mod_name, nmodule)
+ if mmodule == null then return null