diff --git a/lib/interface-types/src/ast.rs b/lib/interface-types/src/ast.rs index 8a7822175..b966f010e 100644 --- a/lib/interface-types/src/ast.rs +++ b/lib/interface-types/src/ast.rs @@ -1,13 +1,12 @@ use std::str; -#[derive(PartialEq, Debug)] +#[derive(PartialEq, Clone, Copy, Debug)] pub enum InterfaceType { Int, Float, Any, String, Seq, - I32, I64, F32, @@ -35,7 +34,7 @@ pub enum Instruction<'input> { TableRefGet, CallMethod(u64), MakeRecord(InterfaceType), - GetField(u64, u64), + GetField(InterfaceType, u64), Const(InterfaceType, u64), FoldSeq(u64), } diff --git a/lib/interface-types/src/decoders/binary.rs b/lib/interface-types/src/decoders/binary.rs index 614b7b828..f3cedc53b 100644 --- a/lib/interface-types/src/decoders/binary.rs +++ b/lib/interface-types/src/decoders/binary.rs @@ -177,7 +177,7 @@ fn instructions<'input, E: ParseError<&'input [u8]>>( } 0x0c => { - consume!((input, argument_0) = leb(input)?); + consume!((input, argument_0) = ty(input)?); consume!((input, argument_1) = leb(input)?); (input, Instruction::GetField(argument_0, argument_1)) } @@ -479,7 +479,7 @@ mod tests { 0x08, // TableRefGet 0x09, 0x01, // CallMethod(1) 0x0a, 0x7f, // MakeRecord(I32) - 0x0c, 0x01, 0x02, // GetField(1, 2) + 0x0c, 0xff, 0xff, 0x01, 0x02, // GetField(Int, 2) 0x0d, 0x7f, 0x01, // Const(I32, 1) 0x0e, 0x01, // FoldSeq(1) 0x0a, @@ -498,7 +498,7 @@ mod tests { Instruction::TableRefGet, Instruction::CallMethod(1), Instruction::MakeRecord(InterfaceType::I32), - Instruction::GetField(1, 2), + Instruction::GetField(InterfaceType::Int, 2), Instruction::Const(InterfaceType::I32, 1), Instruction::FoldSeq(1), ], diff --git a/lib/interface-types/src/decoders/mod.rs b/lib/interface-types/src/decoders/mod.rs new file mode 100644 index 000000000..96eab6681 --- /dev/null +++ b/lib/interface-types/src/decoders/mod.rs @@ -0,0 +1 @@ +pub mod binary;