Sha256: 3b615376198a7fe05e91cbbf028c8ec38cb2260cef54acacee4a022fa409d143

Contents?: true

Size: 799 Bytes

Versions: 4

Compression:

Stored size: 799 Bytes

Contents

use crate::prelude::*;
use std::collections::HashMap;
use wasm_encoder::{TypeSection, ValType};

/// A simple representation of the type section which automatically intern's
/// types and ensures they're only defined once.
#[derive(Default)]
pub struct CoreTypes {
    pub section: TypeSection,
    intern: HashMap<(Vec<ValType>, Vec<ValType>), u32>,
}

impl CoreTypes {
    pub fn function(&mut self, params: &[ValType], results: &[ValType]) -> u32 {
        *self
            .intern
            .entry((params.to_vec(), results.to_vec()))
            .or_insert_with(|| {
                let idx = self.section.len();
                self.section
                    .ty()
                    .function(params.iter().copied(), results.iter().copied());
                idx
            })
    }
}

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
wasmtime-29.0.0 ./ext/cargo-vendor/wasmtime-environ-29.0.0/src/fact/core_types.rs
wasmtime-28.0.0 ./ext/cargo-vendor/wasmtime-environ-28.0.0/src/fact/core_types.rs
wasmtime-27.0.0 ./ext/cargo-vendor/wasmtime-environ-27.0.0/src/fact/core_types.rs
wasmtime-26.0.0 ./ext/cargo-vendor/wasmtime-environ-26.0.0/src/fact/core_types.rs