Skip to content

Commit fabc2d8

Browse files
committed
Fixed submodules of included files not getting exported
1 parent 067a77c commit fabc2d8

File tree

3 files changed

+18
-27
lines changed

3 files changed

+18
-27
lines changed

Cargo.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "density_function_lang"
3-
version = "3.1.0"
3+
version = "3.1.1"
44
edition = "2021"
55

66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

src/compiler/compiler.rs

+16-25
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)