@@ -67,7 +67,8 @@ impl Compiler {
67
67
}
68
68
69
69
fn collect_exports_impl ( outputs : & mut Vec < Rc < RefCell < ExportFunction > > > , module : Rc < RefCell < Module > > , target_dir : & Path ) {
70
- outputs. extend ( module. borrow ( ) . exports . iter ( ) . map ( |export| {
70
+ outputs. extend ( module. borrow ( ) . exports . iter ( )
71
+ . map ( |export| {
71
72
let export_borrow = export. borrow ( ) ;
72
73
let mut target_path = target_dir. to_owned ( ) ;
73
74
target_path. push ( & export_borrow. name ) ;
@@ -84,11 +85,12 @@ impl Compiler {
84
85
85
86
let mut path = target_dir. to_owned ( ) ;
86
87
87
- for sub_module in & module_borrow. sub_modules {
88
+ for sub_module in module_borrow. sub_modules . iter ( ) . chain ( module_borrow . imported_sub_modules . iter ( ) ) {
88
89
path. push ( & sub_module. borrow ( ) . name ) ;
89
90
Self :: collect_exports_impl ( outputs, Rc :: clone ( sub_module) , & path) ;
90
91
path. pop ( ) ;
91
92
}
93
+
92
94
}
93
95
94
96
fn compile_declaration ( & mut self , decl : Decl ) {
@@ -173,11 +175,8 @@ impl Compiler {
173
175
}
174
176
175
177
let module = self . current_module . pop ( ) . expect ( "Internal compiler error: Missing module" ) ;
176
- let mut module_borrow = module. borrow_mut ( ) ;
177
- module_borrow. imported_sub_modules . clear ( ) ;
178
- module_borrow. imported_templates . clear ( ) ;
179
- module_borrow. imported_exports . clear ( ) ;
180
- drop ( module_borrow) ;
178
+ // let mut module_borrow = module.borrow_mut();
179
+ // drop(module_borrow);
181
180
182
181
if !extending {
183
182
self . current_module ( ) . borrow_mut ( ) . sub_modules . push ( module) ;
@@ -234,7 +233,7 @@ impl Compiler {
234
233
& self . current_module [ module_index as usize ]
235
234
} else { & self . top_level_module } ) ;
236
235
237
- match Self :: find_submodule ( & module, & path[ 0 ] ) {
236
+ match Self :: find_submodule ( & module, & path[ 0 ] , true ) {
238
237
Some ( sub_module) => {
239
238
module = sub_module;
240
239
break ;
@@ -251,7 +250,7 @@ impl Compiler {
251
250
}
252
251
253
252
for name in path. iter ( ) . skip ( 1 ) {
254
- match Self :: find_submodule ( & module, name) {
253
+ match Self :: find_submodule ( & module, name, false ) {
255
254
Some ( sub_module) => {
256
255
module = sub_module;
257
256
} ,
@@ -265,7 +264,7 @@ impl Compiler {
265
264
let current_module = self . current_module ( ) ;
266
265
let mut current_module_borrow = current_module. borrow_mut ( ) ;
267
266
268
- for template in module. borrow ( ) . templates . iter ( ) . chain ( module . borrow ( ) . imported_templates . iter ( ) ) {
267
+ for template in module. borrow ( ) . templates . iter ( ) {
269
268
let template_name = & template. borrow ( ) . name ;
270
269
let template_arg_count = template. borrow ( ) . args . len ( ) ;
271
270
let mut allow = true ;
@@ -291,7 +290,7 @@ impl Compiler {
291
290
}
292
291
}
293
292
294
- for sub_module in module. borrow ( ) . sub_modules . iter ( ) . chain ( module . borrow ( ) . imported_sub_modules . iter ( ) ) {
293
+ for sub_module in module. borrow ( ) . sub_modules . iter ( ) {
295
294
let sub_module_name = & sub_module. borrow ( ) . name ;
296
295
let mut allow = true ;
297
296
@@ -317,8 +316,12 @@ impl Compiler {
317
316
}
318
317
}
319
318
320
- fn find_submodule ( module : & Rc < RefCell < Module > > , name : & Token ) -> Option < Rc < RefCell < Module > > > {
321
- for sub_module in module. borrow ( ) . sub_modules . iter ( ) . chain ( module. borrow ( ) . imported_sub_modules . iter ( ) ) {
319
+ fn find_submodule ( module : & Rc < RefCell < Module > > , name : & Token , include_imported : bool ) -> Option < Rc < RefCell < Module > > > {
320
+ let empty = [ ] ;
321
+ let module_borrow = module. borrow ( ) ;
322
+
323
+ for sub_module in module_borrow. sub_modules . iter ( ) . chain (
324
+ if include_imported { module_borrow. imported_sub_modules . iter ( ) } else { empty. iter ( ) } ) {
322
325
if sub_module. borrow ( ) . name == * name. source ( ) {
323
326
return Some ( Rc :: clone ( sub_module) ) ;
324
327
}
@@ -717,24 +720,12 @@ impl Compiler {
717
720
}
718
721
}
719
722
720
- for template in & module. borrow ( ) . imported_templates {
721
- if * template. borrow ( ) . name == * name. source ( ) {
722
- return JsonElement :: Template ( Rc :: clone ( template) ) ;
723
- }
724
- }
725
-
726
723
for sub_module in & module. borrow ( ) . sub_modules {
727
724
if * sub_module. borrow ( ) . name == * name. source ( ) {
728
725
return JsonElement :: Module ( Rc :: clone ( sub_module) ) ;
729
726
}
730
727
}
731
728
732
- for sub_module in & module. borrow ( ) . imported_sub_modules {
733
- if * sub_module. borrow ( ) . name == * name. source ( ) {
734
- return JsonElement :: Module ( Rc :: clone ( sub_module) ) ;
735
- }
736
- }
737
-
738
729
self . error_at ( * name. start ( ) , & format ! ( "Unresolved reference: '{}'" , name. source( ) ) , false ) ;
739
730
JsonElement :: Error
740
731
} ,
0 commit comments