Skip to content

Commit 412e00e

Browse files
committed
Fixed exports from included files not actually getting exported
1 parent 2405151 commit 412e00e

File tree

2 files changed

+18
-23
lines changed

2 files changed

+18
-23
lines changed

src/compiler/compiler.rs

+12-21
Original file line numberDiff line numberDiff line change
@@ -103,14 +103,10 @@ impl Compiler {
103103
}
104104

105105
fn compile_template(&mut self, name: Token, this: Option<Token>, args: Vec<Token>, expr: TemplateExpr) {
106-
let current_module = self.current_module();
106+
let current_module = self.current_or_outer_module();
107107
let mut current_module = current_module.borrow_mut();
108-
let outer_current_module = self.outer_current_module();
109-
let outer_current_module = outer_current_module.as_ref().map(|module| module.borrow());
110108

111-
if current_module.templates.iter()
112-
.chain(outer_current_module.iter().flat_map(|module| module.templates.iter()))
113-
.any(|template|
109+
if current_module.templates.iter().any(|template|
114110
*template.borrow().name == *name.source() && template.borrow().args.len() == args.len() && template.borrow().receiver == this.is_some()) {
115111
self.error_at(*name.start(), "Tried to define multiple templates with the same name", false);
116112
return;
@@ -130,19 +126,14 @@ impl Compiler {
130126
}
131127

132128
fn compile_export(&mut self, name: Token, expr: Expr) {
133-
let current_module = self.current_module();
129+
let current_module = self.current_or_outer_module();
134130
let current_module_borrow = current_module.borrow();
135-
let outer_current_module = self.outer_current_module();
136-
let outer_current_module_borrow = outer_current_module.as_ref().map(|module| module.borrow());
137131

138-
if current_module_borrow.exports.iter()
139-
.chain(outer_current_module_borrow.iter().flat_map(|module| module.exports.iter()))
140-
.any(|function| *function.borrow().name == *name.source()) {
132+
if current_module_borrow.exports.iter().any(|function| *function.borrow().name == *name.source()) {
141133
self.error_at(*name.start(), "Tried to define multiple exports with the same name", false);
142134
return;
143135
}
144136

145-
drop(outer_current_module_borrow);
146137
drop(current_module_borrow);
147138
let expr = self.compile_expr(expr, false);
148139

@@ -154,16 +145,13 @@ impl Compiler {
154145
}
155146

156147
fn compile_module(&mut self, name: Token, statements: Vec<Decl>) {
157-
let current_module = self.current_module();
148+
let current_module = self.current_or_outer_module();
158149
let current_module_borrow = current_module.borrow();
159-
let outer_current_module = self.outer_current_module();
160-
let outer_current_module_borrow = outer_current_module.as_ref().map(|module| module.borrow());
161150

162151
let module;
163152
let extending;
164153

165154
if let Some(existing) = current_module_borrow.sub_modules.iter()
166-
.chain(outer_current_module_borrow.iter().flat_map(|module| module.sub_modules.iter()))
167155
.find(|module| *module.borrow().name == *name.source()) {
168156
module = Rc::clone(existing);
169157
drop(current_module_borrow);
@@ -233,7 +221,7 @@ impl Compiler {
233221

234222
current_module_borrow.imported_sub_modules.append(&mut compiler.top_level_module.borrow_mut().sub_modules);
235223
current_module_borrow.imported_templates.append(&mut compiler.top_level_module.borrow_mut().templates);
236-
current_module_borrow.imported_exports.append(&mut compiler.top_level_module.borrow_mut().exports);
224+
current_module_borrow.exports.append(&mut compiler.top_level_module.borrow_mut().exports);
237225
}
238226
}
239227

@@ -765,9 +753,12 @@ impl Compiler {
765753
self.current_module.last().map(|module| Rc::clone(&module)).unwrap_or_else(|| Rc::clone(&self.top_level_module))
766754
}
767755

768-
fn outer_current_module(&self) -> Option<Rc<RefCell<Module>>> {
769-
self.outer_current_module.as_ref().and_then(|modules| modules.last().map(|module| Rc::clone(&module)))
770-
.or_else(|| self.outer_top_level_module.as_ref().map(|module| Rc::clone(&module)))
756+
fn current_or_outer_module(&self) -> Rc<RefCell<Module>> {
757+
self.current_module.last().map(|module| Rc::clone(&module))
758+
.or_else(|| self.outer_current_module.as_ref()
759+
.and_then(|modules| modules.last().map(Rc::clone))
760+
.or_else(|| self.outer_top_level_module.as_ref().map(Rc::clone)))
761+
.unwrap_or_else(|| Rc::clone(&self.top_level_module))
771762
}
772763

773764
// Error handling

test/minecraft.densityfunction

+6-2
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ module df {
193193

194194
template lerp(delta, start, end) {
195195
if (start.type == builtin.type.int || start.type == builtin.type.float) {
196-
impl.lerp_const(delta, start, end)
196+
impl.lerp_const_start(delta, start, end)
197197
} else {
198198
start * (cache_once(delta) * -1.0 + 1.0)
199199
+ end * cache_once(delta)
@@ -223,8 +223,12 @@ module df {
223223
}
224224

225225
module impl {
226-
template lerp_const(delta, start, end) { // Requires start to be a constant number
226+
template lerp_const_start(delta, start, end) { // Requires start to be a constant number
227+
// if (start == 0.0) {
228+
// delta * end
229+
// } else {
227230
start + delta * (builtin.static(-start) + end)
231+
// }
228232
}
229233
}
230234
}

0 commit comments

Comments
 (0)