tools: remove 'locate' from nodes and visitor
[nit.git] / src / syntax / syntax.nit
1 # This file is part of NIT ( http://www.nitlanguage.org ).
2 #
3 # Copyright 2008 Jean Privat <jean@pryen.org>
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16
17 # Full syntax analysis of NIT AST.
18 # Detect syntax and some metamodel errors.
19 package syntax
20
21 import mmloader
22 import mmbuilder
23 import typing
24
25 # Loader of nit source files
26 class SrcModuleLoader
27 special ModuleLoader
28 redef type MODULE: MMSrcModule
29
30 redef fun file_type do return "nit"
31
32 redef fun parse_file(context, file, filename, name, dir)
33 do
34 var lexer = new Lexer(file, filename)
35 var parser = new Parser(lexer)
36 var node_tree = parser.parse
37 if node_tree.n_base == null then
38 var err = node_tree.n_eof
39 assert err isa PError
40 context.fatal_error(err.location, err.message)
41 end
42 var node_module = node_tree.n_base
43 assert node_module isa AModule
44 var module_loc = new Location.with_file(filename)
45 var module = new MMSrcModule(context, node_module, dir, name, module_loc)
46 return module
47 end
48
49 redef fun process_metamodel(context, module)
50 do
51 module.process_supermodules(context)
52 context.info("Syntax analysis for module: {module.name}", 2)
53 module.process_syntax(context)
54 end
55
56 init do end
57 end
58
59 redef class MMSrcModule
60 # Loading and syntax analysis of super modules
61 private fun process_supermodules(tc: ToolContext)
62 do
63 node.import_super_modules(tc, self)
64 end
65
66 # Syntax analysis and MM construction for the module
67 # Require than supermodules are processed
68 private fun process_syntax(tc: ToolContext)
69 do
70 do_mmbuilder(tc)
71 tc.check_errors
72
73 do_typing(tc)
74 tc.check_errors
75 end
76 end
77