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.
|
||||
* `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
|
||||
------------
|
||||
|
@ -952,15 +952,19 @@ impl Engine {
|
||||
});
|
||||
|
||||
if let Ok(module) = module_result {
|
||||
if !export.is_empty() {
|
||||
if module.is_indexed() {
|
||||
global.push_import(export.name.clone(), module);
|
||||
} else {
|
||||
// Index the module (making a clone copy if necessary) if it is not indexed
|
||||
let mut m = crate::func::shared_take_or_clone(module);
|
||||
m.build_index();
|
||||
global.push_import(export.name.clone(), m);
|
||||
}
|
||||
let (export, must_be_indexed) = if !export.is_empty() {
|
||||
(export.name.clone(), true)
|
||||
} else {
|
||||
(self.get_interned_string(""), false)
|
||||
};
|
||||
|
||||
if !must_be_indexed || module.is_indexed() {
|
||||
global.push_import(export, module);
|
||||
} else {
|
||||
// Index the module (making a clone copy if necessary) if it is not indexed
|
||||
let mut m = crate::func::shared_take_or_clone(module);
|
||||
m.build_index();
|
||||
global.push_import(export, m);
|
||||
}
|
||||
|
||||
global.num_modules_loaded += 1;
|
||||
|
@ -2993,24 +2993,24 @@ impl Engine {
|
||||
// import expr ...
|
||||
let expr = self.parse_expr(input, state, lib, settings.level_up())?;
|
||||
|
||||
// import expr;
|
||||
if !match_token(input, Token::As).0 {
|
||||
let empty = Ident {
|
||||
let export = if !match_token(input, Token::As).0 {
|
||||
// import expr;
|
||||
Ident {
|
||||
name: state.get_interned_string(""),
|
||||
pos: Position::NONE,
|
||||
};
|
||||
return Ok(Stmt::Import((expr, empty).into(), settings.pos));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// import expr as name ...
|
||||
let (name, pos) = parse_var_name(input)?;
|
||||
Ident {
|
||||
name: state.get_interned_string(name),
|
||||
pos,
|
||||
}
|
||||
};
|
||||
|
||||
// import expr as name ...
|
||||
let (name, pos) = parse_var_name(input)?;
|
||||
let name = state.get_interned_string(name);
|
||||
state.imports.push(name.clone());
|
||||
state.imports.push(export.name.clone());
|
||||
|
||||
Ok(Stmt::Import(
|
||||
(expr, Ident { name, pos }).into(),
|
||||
settings.pos,
|
||||
))
|
||||
Ok(Stmt::Import((expr, export).into(), settings.pos))
|
||||
}
|
||||
|
||||
/// Parse an export statement.
|
||||
|
Loading…
Reference in New Issue
Block a user