Move the code section parsing into its own function;
This commit is contained in:
committed by
Dan Gohman
parent
03159a9200
commit
7b290cd900
@@ -3,9 +3,9 @@
|
|||||||
use cranelift_codegen::timing;
|
use cranelift_codegen::timing;
|
||||||
use environ::{ModuleEnvironment, WasmError, WasmResult};
|
use environ::{ModuleEnvironment, WasmError, WasmResult};
|
||||||
use sections_translator::{
|
use sections_translator::{
|
||||||
parse_data_section, parse_elements_section, parse_export_section, parse_function_section,
|
parse_code_section, parse_data_section, parse_elements_section, parse_export_section,
|
||||||
parse_function_signatures, parse_global_section, parse_import_section, parse_memory_section,
|
parse_function_section, parse_function_signatures, parse_global_section, parse_import_section,
|
||||||
parse_start_section, parse_table_section,
|
parse_memory_section, parse_start_section, parse_table_section,
|
||||||
};
|
};
|
||||||
use wasmparser::{Parser, ParserInput, ParserState, SectionCode, WasmDecoder};
|
use wasmparser::{Parser, ParserInput, ParserState, SectionCode, WasmDecoder};
|
||||||
|
|
||||||
@@ -94,19 +94,7 @@ pub fn translate_module<'data>(
|
|||||||
ParserState::BeginSection {
|
ParserState::BeginSection {
|
||||||
code: SectionCode::Code,
|
code: SectionCode::Code,
|
||||||
..
|
..
|
||||||
} => loop {
|
} => parse_code_section(&mut parser, environ)?,
|
||||||
match *parser.read() {
|
|
||||||
ParserState::BeginFunctionBody { .. } => {}
|
|
||||||
ParserState::EndSection => break,
|
|
||||||
ParserState::Error(e) => return Err(WasmError::from_binary_reader_error(e)),
|
|
||||||
ref s => panic!("wrong content in code section: {:?}", s),
|
|
||||||
}
|
|
||||||
let mut reader = parser.create_binary_reader();
|
|
||||||
let size = reader.bytes_remaining();
|
|
||||||
environ.define_function_body(reader
|
|
||||||
.read_bytes(size)
|
|
||||||
.map_err(WasmError::from_binary_reader_error)?)?;
|
|
||||||
},
|
|
||||||
ParserState::EndSection => {
|
ParserState::EndSection => {
|
||||||
next_input = ParserInput::Default;
|
next_input = ParserInput::Default;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -397,3 +397,24 @@ pub fn parse_elements_section(
|
|||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Parses every function body in the code section and defines the corresponding function.
|
||||||
|
pub fn parse_code_section<'data>(
|
||||||
|
parser: &mut Parser<'data>,
|
||||||
|
environ: &mut ModuleEnvironment<'data>,
|
||||||
|
) -> WasmResult<()> {
|
||||||
|
loop {
|
||||||
|
match *parser.read() {
|
||||||
|
ParserState::BeginFunctionBody { .. } => {}
|
||||||
|
ParserState::EndSection => break,
|
||||||
|
ParserState::Error(e) => return Err(WasmError::from_binary_reader_error(e)),
|
||||||
|
ref s => panic!("wrong content in code section: {:?}", s),
|
||||||
|
}
|
||||||
|
let mut reader = parser.create_binary_reader();
|
||||||
|
let size = reader.bytes_remaining();
|
||||||
|
environ.define_function_body(reader
|
||||||
|
.read_bytes(size)
|
||||||
|
.map_err(WasmError::from_binary_reader_error)?)?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user