mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-04-18 11:22:14 +00:00
Improve the --wasm2asm
flag of wasm2es6js
* Don't glob import modules an instead selectively only import required items * Be compatible with node.js and avoid the usage of `self`
This commit is contained in:
parent
dd76707ea1
commit
17861a45ab
@ -254,11 +254,10 @@ impl Output {
|
|||||||
|
|
||||||
fn js_wasm2asm(self) -> Result<String, Error> {
|
fn js_wasm2asm(self) -> Result<String, Error> {
|
||||||
let mut js_imports = String::new();
|
let mut js_imports = String::new();
|
||||||
let mut imported_modules = Vec::new();
|
let mut imported_items = Vec::new();
|
||||||
if let Some(i) = self.module.import_section() {
|
if let Some(i) = self.module.import_section() {
|
||||||
let mut module_set = HashSet::new();
|
|
||||||
let mut name_map = HashMap::new();
|
let mut name_map = HashMap::new();
|
||||||
for entry in i.entries() {
|
for (i, entry) in i.entries().iter().enumerate() {
|
||||||
match *entry.external() {
|
match *entry.external() {
|
||||||
External::Function(_) => {}
|
External::Function(_) => {}
|
||||||
External::Table(_) => {
|
External::Table(_) => {
|
||||||
@ -279,15 +278,12 @@ impl Output {
|
|||||||
mode");
|
mode");
|
||||||
}
|
}
|
||||||
|
|
||||||
if !module_set.insert(entry.module()) {
|
let name = format!("import{}", i);
|
||||||
continue
|
js_imports.push_str(&format!("import {{ {} as {} }} from '{}';\n",
|
||||||
}
|
entry.field(),
|
||||||
|
|
||||||
let name = (b'a' + (module_set.len() as u8)) as char;
|
|
||||||
js_imports.push_str(&format!("import * as import_{} from '{}';",
|
|
||||||
name,
|
name,
|
||||||
entry.module()));
|
entry.module()));
|
||||||
imported_modules.push(format!("import_{}", name));
|
imported_items.push((entry.field().to_string(), name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -373,9 +369,11 @@ impl Output {
|
|||||||
})?;
|
})?;
|
||||||
|
|
||||||
|
|
||||||
let mut imports = String::from("{}");
|
let mut make_imports = String::from("
|
||||||
for m in imported_modules {
|
var imports = {};
|
||||||
imports = format!("Object.assign({}, {})", imports, m);
|
");
|
||||||
|
for (name, import) in imported_items {
|
||||||
|
make_imports.push_str(&format!("imports['{}'] = {};\n", name, import));
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(format!("\
|
Ok(format!("\
|
||||||
@ -397,14 +395,27 @@ impl Output {
|
|||||||
}}
|
}}
|
||||||
}}
|
}}
|
||||||
{js_init_mem}
|
{js_init_mem}
|
||||||
const ret = asmFunc(self, {imports}, mem);
|
{make_imports}
|
||||||
|
const ret = asmFunc({{
|
||||||
|
Math,
|
||||||
|
Int8Array,
|
||||||
|
Uint8Array,
|
||||||
|
Int16Array,
|
||||||
|
Uint16Array,
|
||||||
|
Int32Array,
|
||||||
|
Uint32Array,
|
||||||
|
Float32Array,
|
||||||
|
Float64Array,
|
||||||
|
NaN,
|
||||||
|
Infinity,
|
||||||
|
}}, imports, mem);
|
||||||
{js_exports}
|
{js_exports}
|
||||||
",
|
",
|
||||||
js_imports = js_imports,
|
js_imports = js_imports,
|
||||||
js_init_mem = js_init_mem,
|
js_init_mem = js_init_mem,
|
||||||
asm_func = asm_func,
|
asm_func = asm_func,
|
||||||
js_exports = js_exports,
|
js_exports = js_exports,
|
||||||
imports = imports,
|
make_imports = make_imports,
|
||||||
mem_size = memory_size * (1 << 16),
|
mem_size = memory_size * (1 << 16),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user