diff --git a/examples/opt_imports.rs b/examples/opt_imports.rs new file mode 100644 index 0000000..c17f356 --- /dev/null +++ b/examples/opt_imports.rs @@ -0,0 +1,28 @@ +extern crate pwasm_utils as utils; + +use std::env; + +fn main() { + let args = env::args().collect::>(); + if args.len() != 3 { + println!("Usage: {} input_file.wasm output_file.wasm", args[0]); + return; + } + + // Loading module + let mut module = utils::Module::from_elements( + &parity_wasm::deserialize_file(&args[1]).expect("Module deserialization to succeed") + ).expect("Failed to parse parity-wasm format"); + + let mut delete_types = Vec::new(); + for type_ in module.types.iter() { + if type_.link_count() == 0 { + delete_types.push(type_.order().expect("type in list should have index")); + } + } + module.types.delete(&delete_types[..]); + + parity_wasm::serialize_to_file(&args[2], + module.generate().expect("Failed to generate valid format") + ).expect("Module serialization to succeed") +} diff --git a/src/graph.rs b/src/graph.rs index dfef028..e7bbdc5 100644 --- a/src/graph.rs +++ b/src/graph.rs @@ -410,7 +410,8 @@ impl Module { Ok(res) } - fn generate(&self) -> Result { + /// Generate raw format representation. + pub fn generate(&self) -> Result { use self::ImportedOrDeclared::*; let mut idx = 0; diff --git a/src/lib.rs b/src/lib.rs index 2679120..02abcc7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -32,7 +32,7 @@ pub use gas::inject_gas_counter; pub use optimizer::{optimize, Error as OptimizerError}; pub use pack::{pack_instance, Error as PackingError}; pub use runtime_type::inject_runtime_type; -pub use graph::{Module, parse, generate}; +pub use graph::{Module, parse as graph_parse, generate as graph_generate}; pub use ref_list::{RefList, Entry, EntryRef, DeleteTransaction}; pub struct TargetSymbols {