summaryrefslogtreecommitdiff
path: root/crates/parser/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/parser/src')
-rw-r--r--crates/parser/src/conversion.rs1
-rw-r--r--crates/parser/src/lib.rs9
-rw-r--r--crates/parser/src/module.rs2
-rw-r--r--crates/parser/src/visit.rs16
4 files changed, 14 insertions, 14 deletions
diff --git a/crates/parser/src/conversion.rs b/crates/parser/src/conversion.rs
index 86548d6..a4e3b35 100644
--- a/crates/parser/src/conversion.rs
+++ b/crates/parser/src/conversion.rs
@@ -261,6 +261,7 @@ pub(crate) fn process_const_operators(ops: OperatorsReader<'_>) -> Result<ConstI
wasmparser::Operator::I64Const { value } => Ok(ConstInstruction::I64Const(*value)),
wasmparser::Operator::F32Const { value } => Ok(ConstInstruction::F32Const(f32::from_bits(value.bits()))),
wasmparser::Operator::F64Const { value } => Ok(ConstInstruction::F64Const(f64::from_bits(value.bits()))),
+ wasmparser::Operator::V128Const { value } => Ok(ConstInstruction::V128Const(value.i128())),
wasmparser::Operator::GlobalGet { global_index } => Ok(ConstInstruction::GlobalGet(*global_index)),
op => Err(crate::ParseError::UnsupportedOperator(format!("Unsupported const instruction: {op:?}"))),
}
diff --git a/crates/parser/src/lib.rs b/crates/parser/src/lib.rs
index e5022c5..aa33995 100644
--- a/crates/parser/src/lib.rs
+++ b/crates/parser/src/lib.rs
@@ -70,8 +70,6 @@ impl Parser {
gc_types: true,
stack_switching: false,
component_model: false,
- component_model_nested_names: false,
- component_model_values: false,
exceptions: false,
gc: false,
memory_control: false,
@@ -79,7 +77,12 @@ impl Parser {
threads: false,
shared_everything_threads: false,
legacy_exceptions: false,
- component_model_async: false,
+ cm_async: false,
+ cm_async_builtins: false,
+ cm_async_stackful: false,
+ cm_nested_names: false,
+ cm_values: false,
+ cm_error_context: false,
};
Validator::new_with_features(features.into())
}
diff --git a/crates/parser/src/module.rs b/crates/parser/src/module.rs
index ff6b22b..0e17ad9 100644
--- a/crates/parser/src/module.rs
+++ b/crates/parser/src/module.rs
@@ -130,7 +130,7 @@ impl ModuleReader {
return Err(ParseError::DuplicateSection("Code section".into()));
}
self.code.reserve(count as usize);
- validator.code_section_start(count, &range)?;
+ validator.code_section_start(&range)?;
}
CodeSectionEntry(function) => {
debug!("Found code section entry");
diff --git a/crates/parser/src/visit.rs b/crates/parser/src/visit.rs
index 8ed44be..10005c0 100644
--- a/crates/parser/src/visit.rs
+++ b/crates/parser/src/visit.rs
@@ -46,7 +46,7 @@ pub(crate) fn process_operators_and_validate<R: WasmModuleResources>(
reader.visit_operator(&mut ValidateThenVisit(reader.original_position(), &mut builder))??;
}
- builder.validator_finish(reader.original_position())?;
+ reader.finish()?;
if !builder.errors.is_empty() {
return Err(builder.errors.remove(0));
}
@@ -111,7 +111,7 @@ macro_rules! define_mem_operands_simd_lane {
pub(crate) struct FunctionBuilder<R: WasmModuleResources> {
validator: FuncValidator<R>,
instructions: Vec<Instruction>,
- v128_constants: Vec<u128>,
+ v128_constants: Vec<i128>,
label_ptrs: Vec<usize>,
local_addr_map: Vec<u32>,
errors: Vec<crate::ParseError>,
@@ -124,10 +124,6 @@ impl<R: WasmModuleResources> FunctionBuilder<R> {
) -> impl VisitOperator<'_, Output = Result<(), wasmparser::BinaryReaderError>> + VisitSimdOperator<'_> {
self.validator.simd_visitor(offset)
}
-
- pub(crate) fn validator_finish(&mut self, offset: usize) -> Result<(), wasmparser::BinaryReaderError> {
- self.validator.finish(offset)
- }
}
impl<R: WasmModuleResources> FunctionBuilder<R> {
@@ -534,12 +530,12 @@ impl<R: WasmModuleResources> wasmparser::VisitSimdOperator<'_> for FunctionBuild
}
fn visit_i8x16_shuffle(&mut self, lanes: [u8; 16]) -> Self::Output {
- self.v128_constants.push(u128::from_le_bytes(lanes));
- self.instructions.push(Instruction::I8x16Shuffle(self.v128_constants.len() as u32 - 1));
+ self.instructions.push(Instruction::I8x16Shuffle(self.v128_constants.len() as u32));
+ self.v128_constants.push(i128::from_le_bytes(lanes));
}
fn visit_v128_const(&mut self, value: wasmparser::V128) -> Self::Output {
- self.v128_constants.push(value.i128() as u128);
- self.instructions.push(Instruction::V128Const(self.v128_constants.len() as u32 - 1));
+ self.instructions.push(Instruction::V128Const(self.v128_constants.len() as u32));
+ self.v128_constants.push(value.i128());
}
}