From a017b920c5b2278236d56b712b14149f67542409 Mon Sep 17 00:00:00 2001 From: Ivan Enderlin Date: Fri, 13 Sep 2019 15:39:46 +0200 Subject: [PATCH] fix(interface-types) `get-field` #1 argument is of type `InterfaceType`. --- src/ast.rs | 5 ++--- src/decoders/binary.rs | 6 +++--- src/decoders/mod.rs | 1 + 3 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 src/decoders/mod.rs diff --git a/src/ast.rs b/src/ast.rs index 8a78221..b966f01 100644 --- a/src/ast.rs +++ b/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/src/decoders/binary.rs b/src/decoders/binary.rs index 614b7b8..f3cedc5 100644 --- a/src/decoders/binary.rs +++ b/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/src/decoders/mod.rs b/src/decoders/mod.rs new file mode 100644 index 0000000..96eab66 --- /dev/null +++ b/src/decoders/mod.rs @@ -0,0 +1 @@ +pub mod binary;