@@ -67,7 +67,8 @@ impl Compiler {
6767 }
6868
6969 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| {
7172 let export_borrow = export. borrow ( ) ;
7273 let mut target_path = target_dir. to_owned ( ) ;
7374 target_path. push ( & export_borrow. name ) ;
@@ -84,11 +85,12 @@ impl Compiler {
8485
8586 let mut path = target_dir. to_owned ( ) ;
8687
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 ( ) ) {
8889 path. push ( & sub_module. borrow ( ) . name ) ;
8990 Self :: collect_exports_impl ( outputs, Rc :: clone ( sub_module) , & path) ;
9091 path. pop ( ) ;
9192 }
93+
9294 }
9395
9496 fn compile_declaration ( & mut self , decl : Decl ) {
@@ -173,11 +175,8 @@ impl Compiler {
173175 }
174176
175177 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);
181180
182181 if !extending {
183182 self . current_module ( ) . borrow_mut ( ) . sub_modules . push ( module) ;
@@ -234,7 +233,7 @@ impl Compiler {
234233 & self . current_module [ module_index as usize ]
235234 } else { & self . top_level_module } ) ;
236235
237- match Self :: find_submodule ( & module, & path[ 0 ] ) {
236+ match Self :: find_submodule ( & module, & path[ 0 ] , true ) {
238237 Some ( sub_module) => {
239238 module = sub_module;
240239 break ;
@@ -251,7 +250,7 @@ impl Compiler {
251250 }
252251
253252 for name in path. iter ( ) . skip ( 1 ) {
254- match Self :: find_submodule ( & module, name) {
253+ match Self :: find_submodule ( & module, name, false ) {
255254 Some ( sub_module) => {
256255 module = sub_module;
257256 } ,
@@ -265,7 +264,7 @@ impl Compiler {
265264 let current_module = self . current_module ( ) ;
266265 let mut current_module_borrow = current_module. borrow_mut ( ) ;
267266
268- for template in module. borrow ( ) . templates . iter ( ) . chain ( module . borrow ( ) . imported_templates . iter ( ) ) {
267+ for template in module. borrow ( ) . templates . iter ( ) {
269268 let template_name = & template. borrow ( ) . name ;
270269 let template_arg_count = template. borrow ( ) . args . len ( ) ;
271270 let mut allow = true ;
@@ -291,7 +290,7 @@ impl Compiler {
291290 }
292291 }
293292
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 ( ) {
295294 let sub_module_name = & sub_module. borrow ( ) . name ;
296295 let mut allow = true ;
297296
@@ -317,8 +316,12 @@ impl Compiler {
317316 }
318317 }
319318
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 ( ) } ) {
322325 if sub_module. borrow ( ) . name == * name. source ( ) {
323326 return Some ( Rc :: clone ( sub_module) ) ;
324327 }
@@ -717,24 +720,12 @@ impl Compiler {
717720 }
718721 }
719722
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-
726723 for sub_module in & module. borrow ( ) . sub_modules {
727724 if * sub_module. borrow ( ) . name == * name. source ( ) {
728725 return JsonElement :: Module ( Rc :: clone ( sub_module) ) ;
729726 }
730727 }
731728
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-
738729 self . error_at ( * name. start ( ) , & format ! ( "Unresolved reference: '{}'" , name. source( ) ) , false ) ;
739730 JsonElement :: Error
740731 } ,
0 commit comments