wasmtime_environ/
stack_map.rs

1use cranelift_bitset::CompoundBitSet;
2use serde_derive::{Deserialize, Serialize};
3
4/// A map for determining where live GC references live in a stack frame.
5///
6/// Note that this is currently primarily documented as cranelift's
7/// `binemit::StackMap`, so for detailed documentation about this please read
8/// the docs over there.
9#[derive(Debug, Serialize, Deserialize)]
10pub struct StackMap {
11    bits: CompoundBitSet,
12    mapped_words: u32,
13}
14
15impl StackMap {
16    /// Creates a new `StackMap`, typically from a preexisting
17    /// `binemit::StackMap`.
18    pub fn new(mapped_words: u32, bits: CompoundBitSet) -> StackMap {
19        StackMap { bits, mapped_words }
20    }
21
22    /// Returns a specified bit.
23    pub fn get_bit(&self, bit_index: usize) -> bool {
24        self.bits.contains(bit_index)
25    }
26
27    /// Returns the number of words represented by this stack map.
28    pub fn mapped_words(&self) -> u32 {
29        self.mapped_words
30    }
31}