import mmloader
import mmbuilder
import typing
+import icode_generation
# Loader of nit source files
class SrcModuleLoader
var node_tree = parser.parse
if node_tree.n_base == null then
var err = node_tree.n_eof
- assert err isa PError
- context.error("{err.locate}: {err.message}")
- exit(1)
+ assert err isa AError
+ context.fatal_error(err.location, err.message)
end
var node_module = node_tree.n_base
- assert node_module isa AModule
- var module = new MMSrcModule(context, node_module, dir, name, filename)
+ assert node_module != null
+ var module_loc = new Location.with_file(filename)
+ var module = new MMSrcModule(context, node_module, dir, name, module_loc)
return module
end
redef fun process_metamodel(context, module)
do
module.process_supermodules(context)
+ context.info("Syntax analysis for module: {module.name}", 2)
module.process_syntax(context)
end
private fun process_syntax(tc: ToolContext)
do
do_mmbuilder(tc)
- if tc.error_count > 0 then exit(1)
+ tc.check_errors
do_typing(tc)
- if tc.error_count > 0 then exit(1)
+ tc.check_errors
+
+ generate_icode(tc)
+ tc.check_errors
+
+ if not tc.keep_ast then clear_ast
end
end
+redef class ToolContext
+ # Should the AST be preserved in source modules after syntax processing?
+ # Default is false.
+ readable writable var _keep_ast: Bool = false
+end