Skip to content

Commit

Permalink
Replace all usages of to_wasm_error
Browse files Browse the repository at this point in the history
  • Loading branch information
webmaster128 committed Dec 21, 2020
1 parent 217853a commit bb1da83
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 64 deletions.
7 changes: 2 additions & 5 deletions lib/compiler-cranelift/src/translator/code_translator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ use smallvec::SmallVec;
use std::vec::Vec;

use wasmer_compiler::wasmparser::{MemoryImmediate, Operator};
use wasmer_compiler::{to_wasm_error, WasmResult};
use wasmer_compiler::WasmResult;
use wasmer_compiler::{wasm_unsupported, ModuleTranslationState};
use wasmer_types::{FunctionIndex, GlobalIndex, MemoryIndex, SignatureIndex, TableIndex};

Expand Down Expand Up @@ -383,10 +383,7 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
}
Operator::BrIf { relative_depth } => translate_br_if(*relative_depth, builder, state),
Operator::BrTable { table } => {
let mut depths = table
.targets()
.collect::<Result<Vec<_>, _>>()
.map_err(to_wasm_error)?;
let mut depths = table.targets().collect::<Result<Vec<_>, _>>()?;
let default = depths.pop().unwrap().0;
let mut min_depth = default;
for (depth, _) in depths.iter() {
Expand Down
10 changes: 5 additions & 5 deletions lib/compiler-cranelift/src/translator/func_translator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ use cranelift_frontend::{FunctionBuilder, FunctionBuilderContext, Variable};
use tracing::info;
use wasmer_compiler::wasmparser;
use wasmer_compiler::{
to_wasm_error, wasm_unsupported, MiddlewareBinaryReader, ModuleMiddlewareChain,
ModuleTranslationState, WasmResult,
wasm_unsupported, MiddlewareBinaryReader, ModuleMiddlewareChain, ModuleTranslationState,
WasmResult,
};
use wasmer_types::LocalFunctionIndex;

Expand Down Expand Up @@ -174,11 +174,11 @@ fn parse_local_decls<FE: FuncEnvironment + ?Sized>(
environ: &mut FE,
) -> WasmResult<()> {
let mut next_local = num_params;
let local_count = reader.read_local_count().map_err(to_wasm_error)?;
let local_count = reader.read_local_count()?;

for _ in 0..local_count {
builder.set_srcloc(cur_srcloc(reader));
let (count, ty) = reader.read_local_decl().map_err(to_wasm_error)?;
let (count, ty) = reader.read_local_decl()?;
declare_locals(builder, count, ty, &mut next_local, environ)?;
}

Expand Down Expand Up @@ -239,7 +239,7 @@ fn parse_function_body<FE: FuncEnvironment + ?Sized>(
// Keep going until the final `End` operator which pops the outermost block.
while !state.control_stack.is_empty() {
builder.set_srcloc(cur_srcloc(&reader));
let op = reader.read_operator().map_err(to_wasm_error)?;
let op = reader.read_operator()?;
environ.before_translate_operator(&op, builder, state)?;
translate_operator(module_translation_state, &op, builder, state, environ)?;
environ.after_translate_operator(&op, builder, state)?;
Expand Down
15 changes: 6 additions & 9 deletions lib/compiler-llvm/src/translator/code.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ use crate::config::{CompiledKind, LLVM};
use crate::object_file::{load_object_file, CompiledFunction};
use wasmer_compiler::wasmparser::{MemoryImmediate, Operator};
use wasmer_compiler::{
to_wasm_error, wptype_to_type, CompileError, FunctionBodyData, MiddlewareBinaryReader,
ModuleMiddlewareChain, ModuleTranslationState, RelocationTarget, Symbol, SymbolRegistry,
wptype_to_type, CompileError, FunctionBodyData, MiddlewareBinaryReader, ModuleMiddlewareChain,
ModuleTranslationState, RelocationTarget, Symbol, SymbolRegistry,
};
use wasmer_types::entity::PrimaryMap;
use wasmer_types::{
Expand Down Expand Up @@ -182,9 +182,9 @@ impl FuncTranslator {
}

let mut locals = vec![];
let num_locals = reader.read_local_count().map_err(to_wasm_error)?;
let num_locals = reader.read_local_count()?;
for _ in 0..num_locals {
let (count, ty) = reader.read_local_decl().map_err(to_wasm_error)?;
let (count, ty) = reader.read_local_decl()?;
let ty = wptype_to_type(ty).map_err(to_compile_error)?;
let ty = type_to_llvm(&intrinsics, ty)?;
for _ in 0..count {
Expand Down Expand Up @@ -224,7 +224,7 @@ impl FuncTranslator {

while fcg.state.has_control_frames() {
let pos = reader.current_position() as u32;
let op = reader.read_operator().map_err(to_wasm_error)?;
let op = reader.read_operator()?;
fcg.translate_operator(op, pos)?;
}

Expand Down Expand Up @@ -1530,10 +1530,7 @@ impl<'ctx, 'a> LLVMFunctionCodeGenerator<'ctx, 'a> {
.get_insert_block()
.ok_or_else(|| CompileError::Codegen("not currently in a block".to_string()))?;

let mut label_depths = table
.targets()
.collect::<Result<Vec<_>, _>>()
.map_err(to_wasm_error)?;
let mut label_depths = table.targets().collect::<Result<Vec<_>, _>>()?;
let default_depth = label_depths.pop().unwrap().0;

let index = self.state.pop1()?;
Expand Down
10 changes: 3 additions & 7 deletions lib/compiler/src/translator/module.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
//! Translation skeleton that traverses the whole WebAssembly module and call helper functions
//! to deal with each part of it.
use super::environ::ModuleEnvironment;
use super::error::to_wasm_error;
use super::sections::{
parse_data_section, parse_element_section, parse_export_section, parse_function_section,
parse_global_section, parse_import_section, parse_memory_section, parse_name_section,
Expand All @@ -23,7 +22,7 @@ pub fn translate_module<'data>(
let mut module_translation_state = ModuleTranslationState::new();

for payload in Parser::new(0).parse_all(data) {
match payload.map_err(to_wasm_error)? {
match payload? {
Payload::Version { .. } | Payload::End => {}

Payload::TypeSection(types) => {
Expand Down Expand Up @@ -69,7 +68,7 @@ pub fn translate_module<'data>(
let offset = code.original_position();
environ.define_function_body(
&module_translation_state,
code.read_bytes(size).map_err(to_wasm_error)?,
code.read_bytes(size)?,
offset,
)?;
}
Expand All @@ -94,10 +93,7 @@ pub fn translate_module<'data>(
name: "name",
data,
data_offset,
} => parse_name_section(
NameSectionReader::new(data, data_offset).map_err(to_wasm_error)?,
environ,
)?,
} => parse_name_section(NameSectionReader::new(data, data_offset)?, environ)?,

Payload::CustomSection { name, data, .. } => environ.custom_section(name, data)?,

Expand Down
73 changes: 35 additions & 38 deletions lib/compiler/src/translator/sections.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
//! is handled, according to the semantics of WebAssembly, to only specific expressions that are
//! interpreted on the fly.
use super::environ::ModuleEnvironment;
use super::error::to_wasm_error;
use super::state::ModuleTranslationState;
use crate::wasm_unsupported;
use crate::{WasmError, WasmResult};
Expand Down Expand Up @@ -94,7 +93,7 @@ pub fn parse_import_section<'data>(
environ.reserve_imports(imports.get_count())?;

for entry in imports {
let import = entry.map_err(to_wasm_error)?;
let import = entry?;
let module_name = import.module;
let field_name = import.field;

Expand Down Expand Up @@ -168,7 +167,7 @@ pub fn parse_function_section(
environ.reserve_func_types(num_functions)?;

for entry in functions {
let sigindex = entry.map_err(to_wasm_error)?;
let sigindex = entry?;
environ.declare_func_type(SignatureIndex::from_u32(sigindex))?;
}

Expand All @@ -183,7 +182,7 @@ pub fn parse_table_section(
environ.reserve_tables(tables.get_count())?;

for entry in tables {
let table = entry.map_err(to_wasm_error)?;
let table = entry?;
environ.declare_table(TableType {
ty: wptype_to_type(table.element_type).unwrap(),
minimum: table.limits.initial,
Expand All @@ -202,7 +201,7 @@ pub fn parse_memory_section(
environ.reserve_memories(memories.get_count())?;

for entry in memories {
let memory = entry.map_err(to_wasm_error)?;
let memory = entry?;
match memory {
WPMemoryType::M32 { limits, shared } => {
environ.declare_memory(MemoryType {
Expand Down Expand Up @@ -232,9 +231,9 @@ pub fn parse_global_section(
mutable,
},
init_expr,
} = entry.map_err(to_wasm_error)?;
} = entry?;
let mut init_expr_reader = init_expr.get_binary_reader();
let initializer = match init_expr_reader.read_operator().map_err(to_wasm_error)? {
let initializer = match init_expr_reader.read_operator()? {
Operator::I32Const { value } => GlobalInit::I32Const(value),
Operator::I64Const { value } => GlobalInit::I64Const(value),
Operator::F32Const { value } => GlobalInit::F32Const(f32::from_bits(value.bits())),
Expand Down Expand Up @@ -276,7 +275,7 @@ pub fn parse_export_section<'data>(
field,
ref kind,
index,
} = entry.map_err(to_wasm_error)?;
} = entry?;

// The input has already been validated, so we should be able to
// assume valid UTF-8 and use `from_utf8_unchecked` if performance
Expand Down Expand Up @@ -310,10 +309,10 @@ pub fn parse_start_section(index: u32, environ: &mut ModuleEnvironment) -> WasmR
}

fn read_elems(items: &ElementItems) -> WasmResult<Box<[FunctionIndex]>> {
let items_reader = items.get_items_reader().map_err(to_wasm_error)?;
let items_reader = items.get_items_reader()?;
let mut elems = Vec::with_capacity(usize::try_from(items_reader.get_count()).unwrap());
for item in items_reader {
let elem = match item.map_err(to_wasm_error)? {
let elem = match item? {
ElementItem::Null(_ty) => FunctionIndex::reserved_value(),
ElementItem::Func(index) => FunctionIndex::from_u32(index),
};
Expand All @@ -330,7 +329,7 @@ pub fn parse_element_section<'data>(
environ.reserve_table_initializers(elements.get_count())?;

for (index, entry) in elements.into_iter().enumerate() {
let Element { kind, items, ty } = entry.map_err(to_wasm_error)?;
let Element { kind, items, ty } = entry?;
if ty != wasmparser::Type::FuncRef {
return Err(wasm_unsupported!(
"unsupported table element type: {:?}",
Expand All @@ -344,19 +343,18 @@ pub fn parse_element_section<'data>(
init_expr,
} => {
let mut init_expr_reader = init_expr.get_binary_reader();
let (base, offset) =
match init_expr_reader.read_operator().map_err(to_wasm_error)? {
Operator::I32Const { value } => (None, value as u32 as usize),
Operator::GlobalGet { global_index } => {
(Some(GlobalIndex::from_u32(global_index)), 0)
}
ref s => {
return Err(wasm_unsupported!(
"unsupported init expr in element section: {:?}",
s
));
}
};
let (base, offset) = match init_expr_reader.read_operator()? {
Operator::I32Const { value } => (None, value as u32 as usize),
Operator::GlobalGet { global_index } => {
(Some(GlobalIndex::from_u32(global_index)), 0)
}
ref s => {
return Err(wasm_unsupported!(
"unsupported init expr in element section: {:?}",
s
));
}
};
environ.declare_table_initializers(
TableIndex::from_u32(table_index),
base,
Expand All @@ -382,26 +380,25 @@ pub fn parse_data_section<'data>(
environ.reserve_data_initializers(data.get_count())?;

for (index, entry) in data.into_iter().enumerate() {
let Data { kind, data } = entry.map_err(to_wasm_error)?;
let Data { kind, data } = entry?;
match kind {
DataKind::Active {
memory_index,
init_expr,
} => {
let mut init_expr_reader = init_expr.get_binary_reader();
let (base, offset) =
match init_expr_reader.read_operator().map_err(to_wasm_error)? {
Operator::I32Const { value } => (None, value as u32 as usize),
Operator::GlobalGet { global_index } => {
(Some(GlobalIndex::from_u32(global_index)), 0)
}
ref s => {
return Err(wasm_unsupported!(
"unsupported init expr in data section: {:?}",
s
))
}
};
let (base, offset) = match init_expr_reader.read_operator()? {
Operator::I32Const { value } => (None, value as u32 as usize),
Operator::GlobalGet { global_index } => {
(Some(GlobalIndex::from_u32(global_index)), 0)
}
ref s => {
return Err(wasm_unsupported!(
"unsupported init expr in data section: {:?}",
s
))
}
};
environ.declare_data_initialization(
MemoryIndex::from_u32(memory_index),
base,
Expand Down

0 comments on commit bb1da83

Please sign in to comment.