Factor out a function for reading a wasm file.

This commit is contained in:
Dan Gohman
2019-01-31 14:58:29 -08:00
parent 8b140cc748
commit 72ee874986

View File

@@ -86,6 +86,18 @@ fn read_to_end(path: PathBuf) -> Result<Vec<u8>, io::Error> {
Ok(buf)
}
fn read_wasm(path: PathBuf) -> Result<Vec<u8>, String> {
let data = read_to_end(path).map_err(|err| err.to_string())?;
// If data is a wasm binary, use that. If it's using wat format, convert it
// to a wasm binary with wat2wasm.
Ok(if data.starts_with(&[b'\0', b'a', b's', b'm']) {
data
} else {
wabt::wat2wasm(data).map_err(|err| String::from(err.description()))?
})
}
fn main() {
let args: Args = Docopt::new(USAGE)
.and_then(|d| {
@@ -139,13 +151,8 @@ fn main() {
}
fn handle_module(context: &mut Context, args: &Args, path: &Path) -> Result<(), String> {
let mut data =
read_to_end(path.to_path_buf()).map_err(|err| String::from(err.description()))?;
// If data is using wat-format, first convert data to wasm.
if !data.starts_with(&[b'\0', b'a', b's', b'm']) {
data = wabt::wat2wasm(data).map_err(|err| String::from(err.description()))?;
}
// Read the wasm module binary.
let data = read_wasm(path.to_path_buf())?;
// Create a new `Instance` by compiling and instantiating a wasm module.
let index = context