Loading content...
Reads next record from the WebAssembly binary data. The methods returns
reference to current state of the parser. See ParserState
num.
use wasmparser::WasmDecoder;
let mut parser = wasmparser::Parser::new(data);
{
let state = parser.read();
println!("First state {:?}", state);
}
{
let state = parser.read();
println!("Second state {:?}", state);
}
Creates a BinaryReader when current state is ParserState::BeginSection
or ParserState::BeginFunctionBody.
use wasmparser::{WasmDecoder, Parser, ParserState};
let mut parser = Parser::new(data);
let mut function_readers = Vec::new();
loop {
match *parser.read() {
ParserState::Error(_) |
ParserState::EndWasm => break,
ParserState::BeginFunctionBody {..} => {
let reader = parser.create_binary_reader();
function_readers.push(reader);
}
_ => continue
}
}
for (i, reader) in function_readers.iter_mut().enumerate() {
println!("Function {}", i);
while let Ok(ref op) = reader.read_operator() {
println!(" {:?}", op);
}
}
Reads next record from the WebAssembly binary data. It also allows to
control how parser will treat the next record(s). The method accepts the
ParserInput
parameter that allows e.g. to skip section or function
operators. The methods returns reference to current state of the parser.
use wasmparser::WasmDecoder;
let mut parser = wasmparser::Parser::new(data);
let mut next_input = wasmparser::ParserInput::Default;
loop {
let state = parser.read_with_input(next_input);
match *state {
wasmparser::ParserState::EndWasm => break,
wasmparser::ParserState::BeginWasm { .. } |
wasmparser::ParserState::EndSection =>
next_input = wasmparser::ParserInput::Default,
wasmparser::ParserState::BeginSection { ref code, .. } => {
println!("Found section: {:?}", code);
next_input = wasmparser::ParserInput::SkipSection;
},
_ => unreachable!()
}
}
Loading content...