X-Git-Url: http://nitlanguage.org diff --git a/src/syntax/syntax.nit b/src/syntax/syntax.nit index 0e18983..b597a9c 100644 --- a/src/syntax/syntax.nit +++ b/src/syntax/syntax.nit @@ -21,6 +21,7 @@ package syntax import mmloader import mmbuilder import typing +import icode_generation # Loader of nit source files class SrcModuleLoader @@ -31,27 +32,36 @@ special ModuleLoader redef fun parse_file(context, file, filename, name, dir) do + var name_is_valid = name.to_s.length > 0 and name.to_s[0].is_lower + for char in name.to_s do if not char.is_digit and not char.is_letter and not char == '_' + then + name_is_valid = false + break + end + if not name_is_valid then + context.error( null, "{filename}: Error module name \"{name}\", must start with a lower case letter and contain only letters, digits and '_'." ) + end + var lexer = new Lexer(file, filename) var parser = new Parser(lexer) 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}") - context.check_errors + assert err isa AError + context.fatal_error(err.location, err.message) end var node_module = node_tree.n_base - assert node_module isa AModule + 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 + var mod = new MMSrcModule(context, node_module, dir, name, module_loc) + return mod end - redef fun process_metamodel(context, module) + redef fun process_metamodel(context, mod) do - module.process_supermodules(context) - context.info("Syntax analysis for module: {module.name}", 2) - module.process_syntax(context) + mod.process_supermodules(context) + context.info("Syntax analysis for module: {mod.name}", 2) + mod.process_syntax(context) end init do end @@ -73,6 +83,16 @@ redef class MMSrcModule do_typing(tc) 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