@@ -126,28 +126,19 @@ impl ScopeTree {
126
126
}
127
127
}
128
128
129
- pub struct Resolver < ' ast > {
130
- source : & ' ast str ,
129
+ pub struct Module {
131
130
scope : ScopeTree ,
132
131
last_reference : ReferenceType ,
133
132
}
134
133
135
- impl < ' ast > Resolver < ' ast > {
136
- pub fn new ( source : & ' ast str ) -> Self {
134
+ impl Module {
135
+ fn new ( ) -> Self {
137
136
Self {
138
- source,
139
137
scope : ScopeTree :: root_scope ( ) ,
140
138
last_reference : 0 ,
141
139
}
142
140
}
143
141
144
- pub fn resolve ( & mut self , chunk : & ' ast mut Chunk ) -> ResolverResult {
145
- self . visit_chunk_mut ( chunk) ;
146
- ResolverResult {
147
- errors : Vec :: default ( ) ,
148
- }
149
- }
150
-
151
142
fn declare_identifier ( & mut self , ident : & Identifier ) {
152
143
self . last_reference += 1 ;
153
144
self . scope
@@ -161,56 +152,23 @@ impl<'ast> Resolver<'ast> {
161
152
}
162
153
}
163
154
164
- impl < ' ast > VisitorMut < ' ast > for Resolver < ' ast > {
165
- fn visit_identifier_mut ( & mut self , ident : & ' ast mut Identifier ) {
166
- if ident. reference . get_mut ( ) . is_none ( ) {
167
- self . reference_identifier ( ident) ;
168
- }
169
- }
170
-
171
- fn visit_variable_declaration_mut ( & mut self , decl : & ' ast mut VariableDeclaration ) {
172
- match & decl. binding . kind {
173
- BindingPatternKind :: Identifier ( bind) => self . declare_identifier ( & bind. identifier ) ,
174
- _ => todo ! ( ) ,
175
- }
176
-
177
- walk_variable_declaration_mut ( self , decl)
178
- }
179
-
180
- fn visit_function_declaration_mut ( & mut self , decl : & ' ast mut Function ) {
181
- let identifier = decl
182
- . signature
183
- . identifier
184
- . as_ref ( )
185
- . expect ( "All function declarations need an identifier." ) ;
186
- self . declare_identifier ( identifier) ;
187
- walk_function_mut ( self , decl)
188
- }
189
-
190
- fn visit_binary_operator_mut ( & mut self , op : & ' ast mut BinaryOperator ) {
191
- match & op. kind {
192
- BinaryOperatorKind :: Member ( _) => {
193
- println ! ( "{:?}" , op) ;
194
- // let rhs = match &op.rhs {
195
- // Expression::Identifier(rhs) => rhs,
196
- // Expression::BinaryOperator(op) => match op {
197
- // },
198
- // _ => panic!("Right hand side of a member(.) operator should be an identifier"),
199
- // };
200
- }
201
- _ => { }
202
- }
203
- walk_binary_operator_mut ( self , op)
204
- }
155
+ pub struct Resolver < ' ast > {
156
+ source : & ' ast str ,
157
+ modules : HashMap < & ' ast str , Module > ,
205
158
}
206
159
207
- impl < ' ast > ScopeVisitor for Resolver < ' ast > {
208
- fn enter_scope ( & mut self ) {
209
- self . scope . push_stack ( ) ;
160
+ impl < ' ast > Resolver < ' ast > {
161
+ pub fn new ( source : & ' ast str ) -> Self {
162
+ Self {
163
+ source,
164
+ modules : HashMap :: new ( ) ,
165
+ }
210
166
}
211
167
212
- fn leave_scope ( & mut self ) {
213
- self . scope . pop_stack ( ) ;
168
+ pub fn resolve ( & mut self , chunk : & ' ast mut Chunk ) -> ResolverResult {
169
+ ResolverResult {
170
+ errors : Vec :: default ( ) ,
171
+ }
214
172
}
215
173
}
216
174
0 commit comments