Fix br_if and then tee_local validation. (#76)

This commit is contained in:
Sergey Pepyakin 2018-03-20 13:09:51 +03:00 committed by GitHub
parent 6253dd6fdf
commit 522fa20983
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 5 additions and 8 deletions

View File

@ -371,10 +371,7 @@ impl Validator {
fn validate_tee_local(context: &mut FunctionValidationContext, index: u32) -> Result<InstructionOutcome, Error> {
let local_type = context.require_local(index)?;
let value_type = context.tee_value(StackValueType::Any)?;
if local_type != value_type {
return Err(Error(format!("Trying to update local {} of type {:?} with value of type {:?}", index, local_type, value_type)));
}
context.tee_value(local_type)?;
Ok(InstructionOutcome::ValidateNextInstruction)
}
@ -641,10 +638,10 @@ impl<'a> FunctionValidationContext<'a> {
}
}
fn tee_value(&mut self, value_type: StackValueType) -> Result<StackValueType, Error> {
let value = self.pop_value(value_type)?;
self.push_value(value)?;
Ok(value)
fn tee_value(&mut self, value_type: StackValueType) -> Result<(), Error> {
let _ = self.pop_value(value_type)?;
self.push_value(value_type)?;
Ok(())
}
fn unreachable(&mut self) -> Result<(), Error> {