45 lines
1.3 KiB
Rust
45 lines
1.3 KiB
Rust
|
use parity_wasm::elements::BlockType;
|
||
|
|
||
|
pub mod stack;
|
||
|
|
||
|
/// Index of default linear memory.
|
||
|
pub const DEFAULT_MEMORY_INDEX: u32 = 0;
|
||
|
/// Index of default table.
|
||
|
pub const DEFAULT_TABLE_INDEX: u32 = 0;
|
||
|
/// Maximum number of entries in value stack.
|
||
|
pub const DEFAULT_VALUE_STACK_LIMIT: usize = 16384;
|
||
|
/// Maximum number of entries in frame stack.
|
||
|
pub const DEFAULT_FRAME_STACK_LIMIT: usize = 1024;
|
||
|
|
||
|
/// Control stack frame.
|
||
|
#[derive(Debug, Clone)]
|
||
|
pub struct BlockFrame {
|
||
|
/// Frame type.
|
||
|
pub frame_type: BlockFrameType,
|
||
|
/// A signature, which is a block signature type indicating the number and types of result values of the region.
|
||
|
pub block_type: BlockType,
|
||
|
/// A label for reference to block instruction.
|
||
|
pub begin_position: usize,
|
||
|
/// A label for reference from branch instructions.
|
||
|
pub branch_position: usize,
|
||
|
/// A label for reference from end instructions.
|
||
|
pub end_position: usize,
|
||
|
/// A limit integer value, which is an index into the value stack indicating where to reset it to on a branch to that label.
|
||
|
pub value_stack_len: usize,
|
||
|
}
|
||
|
|
||
|
/// Type of block frame.
|
||
|
#[derive(Debug, Clone, Copy, PartialEq)]
|
||
|
pub enum BlockFrameType {
|
||
|
/// Function frame.
|
||
|
Function,
|
||
|
/// Usual block frame.
|
||
|
Block,
|
||
|
/// Loop frame (branching to the beginning of block).
|
||
|
Loop,
|
||
|
/// True-subblock of if expression.
|
||
|
IfTrue,
|
||
|
/// False-subblock of if expression.
|
||
|
IfFalse,
|
||
|
}
|