Make wasm_unsupported be composeable
This commit is contained in:
committed by
Benjamin Bouvier
parent
26accbadf8
commit
eeb3159fe9
@@ -907,7 +907,7 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
|
|||||||
| Operator::I64AtomicRmw16UCmpxchg { .. }
|
| Operator::I64AtomicRmw16UCmpxchg { .. }
|
||||||
| Operator::I64AtomicRmw32UCmpxchg { .. }
|
| Operator::I64AtomicRmw32UCmpxchg { .. }
|
||||||
| Operator::Fence { .. } => {
|
| Operator::Fence { .. } => {
|
||||||
wasm_unsupported!("proposed thread operator {:?}", op);
|
return Err(wasm_unsupported!("proposed thread operator {:?}", op));
|
||||||
}
|
}
|
||||||
Operator::MemoryInit { .. }
|
Operator::MemoryInit { .. }
|
||||||
| Operator::DataDrop { .. }
|
| Operator::DataDrop { .. }
|
||||||
@@ -920,7 +920,7 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
|
|||||||
| Operator::TableSet { .. }
|
| Operator::TableSet { .. }
|
||||||
| Operator::TableGrow { .. }
|
| Operator::TableGrow { .. }
|
||||||
| Operator::TableSize { .. } => {
|
| Operator::TableSize { .. } => {
|
||||||
wasm_unsupported!("proposed bulk memory operator {:?}", op);
|
return Err(wasm_unsupported!("proposed bulk memory operator {:?}", op));
|
||||||
}
|
}
|
||||||
Operator::V128Const { value } => {
|
Operator::V128Const { value } => {
|
||||||
let handle = builder.func.dfg.constants.insert(value.bytes().to_vec());
|
let handle = builder.func.dfg.constants.insert(value.bytes().to_vec());
|
||||||
@@ -1109,7 +1109,7 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
|
|||||||
| Operator::I16x8LoadSplat { .. }
|
| Operator::I16x8LoadSplat { .. }
|
||||||
| Operator::I32x4LoadSplat { .. }
|
| Operator::I32x4LoadSplat { .. }
|
||||||
| Operator::I64x2LoadSplat { .. } => {
|
| Operator::I64x2LoadSplat { .. } => {
|
||||||
wasm_unsupported!("proposed SIMD operator {:?}", op);
|
return Err(wasm_unsupported!("proposed SIMD operator {:?}", op));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ pub enum WasmError {
|
|||||||
/// on the arguments to this macro.
|
/// on the arguments to this macro.
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! wasm_unsupported {
|
macro_rules! wasm_unsupported {
|
||||||
($($arg:tt)*) => { return Err($crate::environ::WasmError::Unsupported(format!($($arg)*))) }
|
($($arg:tt)*) => { $crate::environ::WasmError::Unsupported(format!($($arg)*)) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<BinaryReaderError> for WasmError {
|
impl From<BinaryReaderError> for WasmError {
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ fn declare_locals<FE: FuncEnvironment + ?Sized>(
|
|||||||
builder.ins().vconst(ir::types::I8X16, constant_handle)
|
builder.ins().vconst(ir::types::I8X16, constant_handle)
|
||||||
}
|
}
|
||||||
AnyRef => builder.ins().null(environ.reference_type()),
|
AnyRef => builder.ins().null(environ.reference_type()),
|
||||||
ty => wasm_unsupported!("unsupported local type {:?}", ty),
|
ty => return Err(wasm_unsupported!("unsupported local type {:?}", ty)),
|
||||||
};
|
};
|
||||||
|
|
||||||
let ty = builder.func.dfg.value_type(zeroval);
|
let ty = builder.func.dfg.value_type(zeroval);
|
||||||
|
|||||||
@@ -53,7 +53,12 @@ pub fn parse_type_section(
|
|||||||
}));
|
}));
|
||||||
environ.declare_signature(sig)?;
|
environ.declare_signature(sig)?;
|
||||||
}
|
}
|
||||||
ty => wasm_unsupported!("unsupported type in type section: {:?}", ty),
|
ty => {
|
||||||
|
return Err(wasm_unsupported!(
|
||||||
|
"unsupported type in type section: {:?}",
|
||||||
|
ty
|
||||||
|
))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -209,7 +214,10 @@ pub fn parse_global_section(
|
|||||||
GlobalInit::GetGlobal(GlobalIndex::from_u32(global_index))
|
GlobalInit::GetGlobal(GlobalIndex::from_u32(global_index))
|
||||||
}
|
}
|
||||||
ref s => {
|
ref s => {
|
||||||
wasm_unsupported!("unsupported init expr in global section: {:?}", s);
|
return Err(wasm_unsupported!(
|
||||||
|
"unsupported init expr in global section: {:?}",
|
||||||
|
s
|
||||||
|
));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let global = Global {
|
let global = Global {
|
||||||
@@ -284,7 +292,10 @@ pub fn parse_element_section<'data>(
|
|||||||
(Some(GlobalIndex::from_u32(global_index)), 0)
|
(Some(GlobalIndex::from_u32(global_index)), 0)
|
||||||
}
|
}
|
||||||
ref s => {
|
ref s => {
|
||||||
wasm_unsupported!("unsupported init expr in element section: {:?}", s);
|
return Err(wasm_unsupported!(
|
||||||
|
"unsupported init expr in element section: {:?}",
|
||||||
|
s
|
||||||
|
));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let items_reader = items.get_items_reader()?;
|
let items_reader = items.get_items_reader()?;
|
||||||
@@ -300,7 +311,10 @@ pub fn parse_element_section<'data>(
|
|||||||
elems.into_boxed_slice(),
|
elems.into_boxed_slice(),
|
||||||
)?
|
)?
|
||||||
} else {
|
} else {
|
||||||
wasm_unsupported!("unsupported passive elements section: {:?}", kind);
|
return Err(wasm_unsupported!(
|
||||||
|
"unsupported passive elements section: {:?}",
|
||||||
|
kind
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -340,7 +354,12 @@ pub fn parse_data_section<'data>(
|
|||||||
Operator::GetGlobal { global_index } => {
|
Operator::GetGlobal { global_index } => {
|
||||||
(Some(GlobalIndex::from_u32(global_index)), 0)
|
(Some(GlobalIndex::from_u32(global_index)), 0)
|
||||||
}
|
}
|
||||||
ref s => wasm_unsupported!("unsupported init expr in data section: {:?}", s),
|
ref s => {
|
||||||
|
return Err(wasm_unsupported!(
|
||||||
|
"unsupported init expr in data section: {:?}",
|
||||||
|
s
|
||||||
|
))
|
||||||
|
}
|
||||||
};
|
};
|
||||||
environ.declare_data_initialization(
|
environ.declare_data_initialization(
|
||||||
MemoryIndex::from_u32(memory_index),
|
MemoryIndex::from_u32(memory_index),
|
||||||
@@ -349,7 +368,10 @@ pub fn parse_data_section<'data>(
|
|||||||
data,
|
data,
|
||||||
)?;
|
)?;
|
||||||
} else {
|
} else {
|
||||||
wasm_unsupported!("unsupported passive data section: {:?}", kind);
|
return Err(wasm_unsupported!(
|
||||||
|
"unsupported passive data section: {:?}",
|
||||||
|
kind
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ pub fn type_to_type(ty: wasmparser::Type) -> WasmResult<ir::Type> {
|
|||||||
wasmparser::Type::F32 => Ok(ir::types::F32),
|
wasmparser::Type::F32 => Ok(ir::types::F32),
|
||||||
wasmparser::Type::F64 => Ok(ir::types::F64),
|
wasmparser::Type::F64 => Ok(ir::types::F64),
|
||||||
wasmparser::Type::V128 => Ok(ir::types::I8X16),
|
wasmparser::Type::V128 => Ok(ir::types::I8X16),
|
||||||
ty => wasm_unsupported!("type_to_type: wasm type {:?}", ty),
|
ty => Err(wasm_unsupported!("type_to_type: wasm type {:?}", ty)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,7 +138,10 @@ pub fn tabletype_to_type(ty: wasmparser::Type) -> WasmResult<Option<ir::Type>> {
|
|||||||
wasmparser::Type::F64 => Ok(Some(ir::types::F64)),
|
wasmparser::Type::F64 => Ok(Some(ir::types::F64)),
|
||||||
wasmparser::Type::V128 => Ok(Some(ir::types::I8X16)),
|
wasmparser::Type::V128 => Ok(Some(ir::types::I8X16)),
|
||||||
wasmparser::Type::AnyFunc => Ok(None),
|
wasmparser::Type::AnyFunc => Ok(None),
|
||||||
ty => wasm_unsupported!("tabletype_to_type: table wasm type {:?}", ty),
|
ty => Err(wasm_unsupported!(
|
||||||
|
"tabletype_to_type: table wasm type {:?}",
|
||||||
|
ty
|
||||||
|
)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,12 +155,12 @@ pub fn blocktype_to_type(ty_or_ft: wasmparser::TypeOrFuncType) -> WasmResult<Opt
|
|||||||
wasmparser::Type::F64 => Ok(Some(ir::types::F64)),
|
wasmparser::Type::F64 => Ok(Some(ir::types::F64)),
|
||||||
wasmparser::Type::V128 => Ok(Some(ir::types::I8X16)),
|
wasmparser::Type::V128 => Ok(Some(ir::types::I8X16)),
|
||||||
wasmparser::Type::EmptyBlockType => Ok(None),
|
wasmparser::Type::EmptyBlockType => Ok(None),
|
||||||
ty => wasm_unsupported!("blocktype_to_type: type {:?}", ty),
|
ty => Err(wasm_unsupported!("blocktype_to_type: type {:?}", ty)),
|
||||||
},
|
},
|
||||||
wasmparser::TypeOrFuncType::FuncType(_) => wasm_unsupported!(
|
wasmparser::TypeOrFuncType::FuncType(_) => Err(wasm_unsupported!(
|
||||||
"blocktype_to_type: multi-value block signature {:?}",
|
"blocktype_to_type: multi-value block signature {:?}",
|
||||||
ty_or_ft
|
ty_or_ft
|
||||||
),
|
)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,10 +184,10 @@ pub fn num_return_values(ty: wasmparser::TypeOrFuncType) -> WasmResult<usize> {
|
|||||||
| wasmparser::Type::I64
|
| wasmparser::Type::I64
|
||||||
| wasmparser::Type::F64
|
| wasmparser::Type::F64
|
||||||
| wasmparser::Type::V128 => Ok(1),
|
| wasmparser::Type::V128 => Ok(1),
|
||||||
ty => wasm_unsupported!("unsupported return value type {:?}", ty),
|
ty => Err(wasm_unsupported!("unsupported return value type {:?}", ty)),
|
||||||
},
|
},
|
||||||
wasmparser::TypeOrFuncType::FuncType(_) => {
|
wasmparser::TypeOrFuncType::FuncType(_) => {
|
||||||
wasm_unsupported!("multi-value block signature {:?}", ty);
|
Err(wasm_unsupported!("multi-value block signature {:?}", ty))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user