mirror of
https://github.com/denoland/deno.git
synced 2025-08-04 10:59:13 +00:00
feat: Wasm module support (#26668)
Support for Wasm modules. Note this implements the standard where the default export is the instance (not the module). The module will come later with source phase imports. ```ts import { add } from "./math.wasm"; console.log(add(1, 2)); ```
This commit is contained in:
parent
6b478cd0a3
commit
8be2bbf074
60 changed files with 401 additions and 46 deletions
|
@ -446,8 +446,8 @@ impl<'a> GraphDisplayContext<'a> {
|
|||
let maybe_cache_info = match root {
|
||||
Module::Js(module) => module.maybe_cache_info.as_ref(),
|
||||
Module::Json(module) => module.maybe_cache_info.as_ref(),
|
||||
Module::Wasm(module) => module.maybe_cache_info.as_ref(),
|
||||
Module::Node(_) | Module::Npm(_) | Module::External(_) => None,
|
||||
Module::Wasm(_) => todo!("@dsherret"),
|
||||
};
|
||||
if let Some(cache_info) = maybe_cache_info {
|
||||
if let Some(local) = &cache_info.local {
|
||||
|
@ -469,8 +469,8 @@ impl<'a> GraphDisplayContext<'a> {
|
|||
let size = match m {
|
||||
Module::Js(module) => module.size(),
|
||||
Module::Json(module) => module.size(),
|
||||
Module::Wasm(module) => module.size(),
|
||||
Module::Node(_) | Module::Npm(_) | Module::External(_) => 0,
|
||||
Module::Wasm(_) => todo!("@dsherret"),
|
||||
};
|
||||
size as f64
|
||||
})
|
||||
|
@ -569,8 +569,8 @@ impl<'a> GraphDisplayContext<'a> {
|
|||
Specifier(_) => match module {
|
||||
Module::Js(module) => Some(module.size() as u64),
|
||||
Module::Json(module) => Some(module.size() as u64),
|
||||
Module::Wasm(module) => Some(module.size() as u64),
|
||||
Module::Node(_) | Module::Npm(_) | Module::External(_) => None,
|
||||
Module::Wasm(_) => todo!("@dsherret"),
|
||||
},
|
||||
};
|
||||
format!("{} {}", header_text, maybe_size_to_text(maybe_size))
|
||||
|
@ -583,8 +583,8 @@ impl<'a> GraphDisplayContext<'a> {
|
|||
Package(package) => {
|
||||
tree_node.children.extend(self.build_npm_deps(package));
|
||||
}
|
||||
Specifier(_) => {
|
||||
if let Some(module) = module.js() {
|
||||
Specifier(_) => match module {
|
||||
Module::Js(module) => {
|
||||
if let Some(types_dep) = &module.maybe_types_dependency {
|
||||
if let Some(child) =
|
||||
self.build_resolved_info(&types_dep.dependency, true)
|
||||
|
@ -596,7 +596,16 @@ impl<'a> GraphDisplayContext<'a> {
|
|||
tree_node.children.extend(self.build_dep_info(dep));
|
||||
}
|
||||
}
|
||||
}
|
||||
Module::Wasm(module) => {
|
||||
for dep in module.dependencies.values() {
|
||||
tree_node.children.extend(self.build_dep_info(dep));
|
||||
}
|
||||
}
|
||||
Module::Json(_)
|
||||
| Module::Npm(_)
|
||||
| Module::Node(_)
|
||||
| Module::External(_) => {}
|
||||
},
|
||||
}
|
||||
}
|
||||
tree_node
|
||||
|
@ -661,7 +670,7 @@ impl<'a> GraphDisplayContext<'a> {
|
|||
};
|
||||
self.build_error_msg(specifier, message.as_ref())
|
||||
}
|
||||
ModuleError::ParseErr(_, _) => {
|
||||
ModuleError::ParseErr(_, _) | ModuleError::WasmParseErr(_, _) => {
|
||||
self.build_error_msg(specifier, "(parsing error)")
|
||||
}
|
||||
ModuleError::UnsupportedImportAttributeType { .. } => {
|
||||
|
@ -673,7 +682,6 @@ impl<'a> GraphDisplayContext<'a> {
|
|||
ModuleError::Missing(_, _) | ModuleError::MissingDynamic(_, _) => {
|
||||
self.build_error_msg(specifier, "(missing)")
|
||||
}
|
||||
ModuleError::WasmParseErr(_, _) => todo!("@dsherret"),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue