Merge branch 'better-locate' into wip
[nit.git] / src / syntax / syntax.nit
index 0270e2e..aa17066 100644 (file)
@@ -25,14 +25,25 @@ import icode_generation
 
 # Loader of nit source files
 class SrcModuleLoader
-special ModuleLoader
+       super ModuleLoader
        redef type MODULE: MMSrcModule
 
        redef fun file_type do return "nit"
 
        redef fun parse_file(context, file, filename, name, dir)
        do
-               var lexer = new Lexer(file, filename)
+               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 source = new SourceFile(filename, file)
+               var lexer = new Lexer(source)
                var parser = new Parser(lexer)
                var node_tree = parser.parse
                if node_tree.n_base == null then
@@ -42,7 +53,7 @@ special ModuleLoader
                end
                var node_module = node_tree.n_base
                assert node_module != null
-               var module_loc = new Location.with_file(filename)
+               var module_loc = new Location.with_file(source)
                var mod = new MMSrcModule(context, node_module, dir, name, module_loc)
                return mod
        end