Allow global functions in non-aliased imports.
This commit is contained in:
parent
31d045279f
commit
b65b7b05a5
@ -9,6 +9,7 @@ Bug fixes
|
|||||||
|
|
||||||
* `Engine::parse_json` now returns an error on unquoted keys to be consistent with JSON specifications.
|
* `Engine::parse_json` now returns an error on unquoted keys to be consistent with JSON specifications.
|
||||||
* `import` statements inside `eval` no longer cause errors in subsequent code.
|
* `import` statements inside `eval` no longer cause errors in subsequent code.
|
||||||
|
* Functions marked `global` in `import`ed modules with no alias names now work properly.
|
||||||
|
|
||||||
New features
|
New features
|
||||||
------------
|
------------
|
||||||
|
@ -952,15 +952,19 @@ impl Engine {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if let Ok(module) = module_result {
|
if let Ok(module) = module_result {
|
||||||
if !export.is_empty() {
|
let (export, must_be_indexed) = if !export.is_empty() {
|
||||||
if module.is_indexed() {
|
(export.name.clone(), true)
|
||||||
global.push_import(export.name.clone(), module);
|
} else {
|
||||||
|
(self.get_interned_string(""), false)
|
||||||
|
};
|
||||||
|
|
||||||
|
if !must_be_indexed || module.is_indexed() {
|
||||||
|
global.push_import(export, module);
|
||||||
} else {
|
} else {
|
||||||
// Index the module (making a clone copy if necessary) if it is not indexed
|
// Index the module (making a clone copy if necessary) if it is not indexed
|
||||||
let mut m = crate::func::shared_take_or_clone(module);
|
let mut m = crate::func::shared_take_or_clone(module);
|
||||||
m.build_index();
|
m.build_index();
|
||||||
global.push_import(export.name.clone(), m);
|
global.push_import(export, m);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
global.num_modules_loaded += 1;
|
global.num_modules_loaded += 1;
|
||||||
|
@ -2993,24 +2993,24 @@ impl Engine {
|
|||||||
// import expr ...
|
// import expr ...
|
||||||
let expr = self.parse_expr(input, state, lib, settings.level_up())?;
|
let expr = self.parse_expr(input, state, lib, settings.level_up())?;
|
||||||
|
|
||||||
|
let export = if !match_token(input, Token::As).0 {
|
||||||
// import expr;
|
// import expr;
|
||||||
if !match_token(input, Token::As).0 {
|
Ident {
|
||||||
let empty = Ident {
|
|
||||||
name: state.get_interned_string(""),
|
name: state.get_interned_string(""),
|
||||||
pos: Position::NONE,
|
pos: Position::NONE,
|
||||||
};
|
|
||||||
return Ok(Stmt::Import((expr, empty).into(), settings.pos));
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
// import expr as name ...
|
// import expr as name ...
|
||||||
let (name, pos) = parse_var_name(input)?;
|
let (name, pos) = parse_var_name(input)?;
|
||||||
let name = state.get_interned_string(name);
|
Ident {
|
||||||
state.imports.push(name.clone());
|
name: state.get_interned_string(name),
|
||||||
|
pos,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
Ok(Stmt::Import(
|
state.imports.push(export.name.clone());
|
||||||
(expr, Ident { name, pos }).into(),
|
|
||||||
settings.pos,
|
Ok(Stmt::Import((expr, export).into(), settings.pos))
|
||||||
))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Parse an export statement.
|
/// Parse an export statement.
|
||||||
|
Loading…
Reference in New Issue
Block a user