use super::{
module::{ElemIdx, FuncIdx, GlobalIdx, LabelIdx, LocalIdx, TableIdx, TypeIdx},
types::{RefType, ValType},
};
#[cfg(not(feature = "std"))]
use crate::lib::*;
#[derive(Debug, PartialEq, Eq, Clone)]
pub enum Block {
Empty,
ValType(ValType),
TypeIdx(u32),
}
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct MemArg {
pub align: u32,
pub offset: u32,
}
#[derive(Debug, PartialEq, Clone)]
pub struct Expr(pub Vec<Instr>);
impl Expr {
pub fn new(instrs: Vec<Instr>) -> Self {
Self(instrs)
}
}
#[derive(Debug, PartialEq, Clone)]
pub enum Instr {
Unreachable,
Nop,
Block {
bt: Block,
end_offset: usize,
},
Loop {
bt: Block,
},
If {
bt: Block,
else_offset: Option<usize>,
end_offset: usize,
},
Br(LabelIdx),
BrIf(LabelIdx),
BrTable {
indexs: Vec<LabelIdx>,
default: LabelIdx,
},
Return,
Call(FuncIdx),
CallIndirect(TypeIdx, TableIdx),
RefNull(RefType),
RefIsNull,
RefFunc(FuncIdx),
Drop,
Select,
LocalGet(LocalIdx),
LocalSet(LocalIdx),
LocalTee(LocalIdx),
GlobalGet(GlobalIdx),
GlobalSet(GlobalIdx),
TableGet(TableIdx),
TableSet(TableIdx),
TableInit(ElemIdx, TableIdx),
ElemDrop(ElemIdx),
TableCopy(TableIdx, TableIdx),
TableGrow(TableIdx),
TableSize(TableIdx),
TableFill(TableIdx),
I32Load(MemArg),
I64Load(MemArg),
F32Load(MemArg),
F64Load(MemArg),
I32Load8S(MemArg),
I32Load8U(MemArg),
I32Load16S(MemArg),
I32Load16U(MemArg),
I64Load8S(MemArg),
I64Load8U(MemArg),
I64Load16S(MemArg),
I64Load16U(MemArg),
I64Load32S(MemArg),
I64Load32U(MemArg),
I32Store(MemArg),
I64Store(MemArg),
F32Store(MemArg),
F64Store(MemArg),
I32Store8(MemArg),
I32Store16(MemArg),
I64Store8(MemArg),
I64Store16(MemArg),
I64Store32(MemArg),
MemorySize,
MemoryGrow,
MemoryInit(u32),
DataDrop(u32),
MemoryCopy,
MemoryFill,
I32Const(i32),
I64Const(i64),
F32Const(f32),
F64Const(f64),
I32Eqz,
I32Eq,
I32Ne,
I32LtS,
I32LtU,
I32GtS,
I32GtU,
I32LeS,
I32LeU,
I32GeS,
I32GeU,
I64Eqz,
I64Eq,
I64Ne,
I64LtS,
I64LtU,
I64GtS,
I64GtU,
I64LeS,
I64LeU,
I64GeS,
I64GeU,
F32Eq,
F32Ne,
F32Lt,
F32Gt,
F32Le,
F32Ge,
F64Eq,
F64Ne,
F64Lt,
F64Gt,
F64Le,
F64Ge,
I32Clz,
I32Ctz,
I32Popcnt,
I32Add,
I32Sub,
I32Mul,
I32DivS,
I32DivU,
I32RemS,
I32RemU,
I32And,
I32Or,
I32Xor,
I32Shl,
I32ShrS,
I32ShrU,
I32RotL,
I32RotR,
I64Clz,
I64Ctz,
I64Popcnt,
I64Add,
I64Sub,
I64Mul,
I64DivS,
I64DivU,
I64RemS,
I64RemU,
I64And,
I64Or,
I64Xor,
I64Shl,
I64ShrS,
I64ShrU,
I64RotL,
I64RotR,
F32Abs,
F32Neg,
F32Ceil,
F32Floor,
F32Trunc,
F32Nearest,
F32Sqrt,
F32Add,
F32Sub,
F32Mul,
F32Div,
F32Min,
F32Max,
F32Copysign,
F64Abs,
F64Neg,
F64Ceil,
F64Floor,
F64Trunc,
F64Nearest,
F64Sqrt,
F64Add,
F64Sub,
F64Mul,
F64Div,
F64Min,
F64Max,
F64Copysign,
I32WrapI64,
I32TruncF32S,
I32TruncF32U,
I32TruncF64S,
I32TruncF64U,
I64ExtendI32S,
I64ExtendI32U,
I64TruncF32S,
I64TruncF32U,
I64TruncF64S,
I64TruncF64U,
F32ConvertI32S,
F32ConvertI32U,
F32ConvertI64S,
F32ConvertI64U,
F32DemoteF64,
F64ConvertI32S,
F64ConvertI32U,
F64ConvertI64S,
F64ConvertI64U,
F64PromoteF32,
I32ReinterpretF32,
I64ReinterpretF64,
F32ReinterpretI32,
F64ReinterpretI64,
I32Extend8S,
I32Extend16S,
I64Extend8S,
I64Extend16S,
I64Extend32S,
I32TruncSatF32S,
I32TruncSatF32U,
I32TruncSatF64S,
I32TruncSatF64U,
I64TruncSatF32S,
I64TruncSatF32U,
I64TruncSatF64S,
I64TruncSatF64U,
RJump(usize),
PopLabel,
}