// ---
// tags: trident, rust
// crystal-type: source
// crystal-domain: comp
// ---
/// LRU-based stack manager for stack-machine VMs.
///
/// When live variables exceed the maximum stack depth, the manager automatically
/// spills the least-recently-used variable to RAM and reloads it when accessed.
///
/// RAM addresses for spilled values start at a configurable base to avoid
/// collision with user-accessible RAM.
///
/// Default values match Triton VM (depth=16, spill base=2^30) but can be
/// configured for other stack-machine targets via TerrainConfig.
const DEFAULT_SPILL_RAM_BASE: u64 = 1 << 30;
const DEFAULT_MAX_STACK_DEPTH: u32 = 16;

/// Instruction formatting for stack spill/reload operations.
/// Allows the StackManager to emit target-specific instructions.
pub(crate) struct SpillFormatter {
    pub(crate) fmt_swap: Box<dyn Fn(u32) -> String>,
    pub(crate) fmt_push: Box<dyn Fn(u64) -> String>,
    pub(crate) fmt_pop1: String,
    pub(crate) fmt_write_mem1: String,
    pub(crate) fmt_read_mem1: String,
}

impl Default for SpillFormatter {
    fn default() -> Self {
        Self {
            fmt_swap: Box::new(|d| format!("    swap {}", d)),
            fmt_push: Box::new(|v| format!("    push {}", v)),
            fmt_pop1: "    pop 1".to_string(),
            fmt_write_mem1: "    write_mem 1".to_string(),
            fmt_read_mem1: "    read_mem 1".to_string(),
        }
    }
}

/// A variable tracked by the stack manager.
#[derive(Clone, Debug)]
pub(crate) struct ManagedVar {
    pub(crate) name: Option<String>,
    pub(crate) width: u32,
    /// For array entries: the width of a single element.
    pub(crate) elem_width: Option<u32>,
    /// Where this variable currently lives.
    pub(crate) location: VarLocation,
    /// Monotonic access counter for LRU eviction.
    pub(crate) last_access: u64,
}

#[derive(Clone, Debug, PartialEq)]
pub(crate) enum VarLocation {
    /// On the operand stack (tracked by position in the on_stack vec).
    Stack,
    /// Spilled to RAM starting at this address.
    Ram(u64),
}

/// Manages the operand stack and automatic RAM spilling.
pub(crate) struct StackManager {
    /// Variables currently on the operand stack (bottom to top).
    on_stack: Vec<ManagedVar>,
    /// Variables spilled to RAM.
    spilled: Vec<ManagedVar>,
    /// Next RAM address for spilling.
    next_spill_addr: u64,
    /// Monotonic counter for LRU tracking.
    access_counter: u64,
    /// Instructions generated by spill/reload operations.
    pub(crate) side_effects: Vec<String>,
    /// Maximum operand stack depth before spilling (from TerrainConfig).
    max_stack_depth: u32,
    /// Target-specific instruction formatter for spill/reload.
    formatter: SpillFormatter,
}

impl Default for StackManager {
    fn default() -> Self {
        Self::new()
    }
}

impl StackManager {
    pub(crate) fn new() -> Self {
        Self::with_config(DEFAULT_MAX_STACK_DEPTH, DEFAULT_SPILL_RAM_BASE)
    }

    pub(crate) fn with_config(max_stack_depth: u32, spill_ram_base: u64) -> Self {
        Self::with_formatter(max_stack_depth, spill_ram_base, SpillFormatter::default())
    }

    pub(crate) fn with_formatter(
        max_stack_depth: u32,
        spill_ram_base: u64,
        formatter: SpillFormatter,
    ) -> Self {
        Self {
            on_stack: Vec::new(),
            spilled: Vec::new(),
            next_spill_addr: spill_ram_base,
            access_counter: 0,
            side_effects: Vec::new(),
            max_stack_depth,
            formatter,
        }
    }

    /// Clear all state (for new function).
    pub(crate) fn clear(&mut self) {
        self.on_stack.clear();
        self.spilled.clear();
        self.side_effects.clear();
        // Don't reset next_spill_addr โ€” keep allocating forward
    }

    /// Total width of values currently on the operand stack.
    pub(crate) fn stack_depth(&self) -> u32 {
        self.on_stack.iter().map(|v| v.width).sum()
    }

    /// Allocate `n` contiguous RAM addresses for scratch use.
    /// Returns the base address. Advances the spill pointer so these
    /// addresses won't conflict with future spills.
    pub(crate) fn alloc_scratch(&mut self, n: u32) -> u64 {
        let base = self.next_spill_addr;
        self.next_spill_addr += n as u64;
        base
    }

    /// Number of entries on the operand stack.
    pub(crate) fn stack_len(&self) -> usize {
        self.on_stack.len()
    }

    /// Push an anonymous temporary onto the stack.
    /// If the stack would exceed 16 elements, spill the LRU variable first.
    pub(crate) fn push_temp(&mut self, width: u32) {
        if width == 0 {
            return;
        }
        self.ensure_space(width);
        let ts = self.tick();
        self.on_stack.push(ManagedVar {
            name: None,
            width,
            elem_width: None,
            location: VarLocation::Stack,
            last_access: ts,
        });
    }

    /// Push a named variable onto the stack.
    pub(crate) fn push_named(&mut self, name: &str, width: u32) {
        if width == 0 {
            return;
        }
        self.ensure_space(width);
        let ts = self.tick();
        self.on_stack.push(ManagedVar {
            name: Some(name.to_string()),
            width,
            elem_width: None,
            location: VarLocation::Stack,
            last_access: ts,
        });
    }

    /// Pop the top entry from the stack model.
    pub(crate) fn pop(&mut self) -> Option<ManagedVar> {
        self.on_stack.pop()
    }

    /// Get a reference to the top entry.
    pub(crate) fn last(&self) -> Option<&ManagedVar> {
        self.on_stack.last()
    }

    /// Get a mutable reference to the top entry.
    pub(crate) fn last_mut(&mut self) -> Option<&mut ManagedVar> {
        self.on_stack.last_mut()
    }

    /// Find the depth (in field elements from stack top) of a named variable.
    /// If the variable is spilled, reloads it first and returns the new depth.
    /// Returns the depth from top of stack.
    pub(crate) fn access_var(&mut self, name: &str) -> u32 {
        // Check if it's on stack
        let ts = self.tick();
        let mut depth: u32 = 0;
        for entry in self.on_stack.iter_mut().rev() {
            if entry.name.as_deref() == Some(name) {
                entry.last_access = ts;
                return depth;
            }
            depth += entry.width;
        }

        // Check if it's spilled
        if let Some(idx) = self
            .spilled
            .iter()
            .position(|v| v.name.as_deref() == Some(name))
        {
            let var = self.spilled.remove(idx);
            self.reload_var(var);
            return 0; // reloaded to top of stack
        }

        // Not found โ€” return 0 (caller handles error)
        0
    }

    /// Find depth and width of a named variable (without reloading).
    pub(crate) fn find_var_depth_and_width(&mut self, name: &str) -> Option<(u32, u32)> {
        let ts = self.tick();
        let mut depth: u32 = 0;
        for entry in self.on_stack.iter_mut().rev() {
            if entry.name.as_deref() == Some(name) {
                entry.last_access = ts;
                return Some((depth, entry.width));
            }
            depth += entry.width;
        }
        // Check spilled
        if let Some(idx) = self
            .spilled
            .iter()
            .position(|v| v.name.as_deref() == Some(name))
        {
            let var = self.spilled.remove(idx);
            let width = var.width;
            self.reload_var(var);
            return Some((0, width));
        }
        None
    }

    /// Find depth, width, and elem_width of a named variable.
    /// Like find_var_depth_and_width but also returns elem_width for arrays.
    pub(crate) fn find_var_with_elem_width(&mut self, name: &str) -> Option<(u32, u32, u32)> {
        let ts = self.tick();
        let mut depth: u32 = 0;
        for entry in self.on_stack.iter_mut().rev() {
            if entry.name.as_deref() == Some(name) {
                entry.last_access = ts;
                let ew = entry.elem_width.unwrap_or(1);
                return Some((depth, entry.width, ew));
            }
            depth += entry.width;
        }
        // Check spilled
        if let Some(idx) = self
            .spilled
            .iter()
            .position(|v| v.name.as_deref() == Some(name))
        {
            let var = self.spilled.remove(idx);
            let width = var.width;
            let ew = var.elem_width.unwrap_or(1);
            self.reload_var(var);
            return Some((0, width, ew));
        }
        None
    }

    /// Drain any side-effect TASM instructions generated by spill/reload.
    pub(crate) fn drain_side_effects(&mut self) -> Vec<String> {
        std::mem::take(&mut self.side_effects)
    }

    /// Spill every named variable on the operand stack to RAM.
    /// Used before inline asm blocks to isolate the managed stack.
    pub(crate) fn spill_all_named(&mut self) {
        loop {
            let has_named = self.on_stack.iter().any(|v| v.name.is_some());
            if !has_named {
                break;
            }
            if !self.spill_lru() {
                break;
            }
        }
    }

    /// Get the entire on-stack vec (for save/restore in loops).
    pub(crate) fn save_state(&self) -> (Vec<ManagedVar>, Vec<ManagedVar>) {
        (self.on_stack.clone(), self.spilled.clone())
    }

    /// Restore saved state.
    pub(crate) fn restore_state(&mut self, state: (Vec<ManagedVar>, Vec<ManagedVar>)) {
        self.on_stack = state.0;
        self.spilled = state.1;
    }

    // --- Internal ---

    fn tick(&mut self) -> u64 {
        self.access_counter += 1;
        self.access_counter
    }

    /// Ensure there's room for `width` more elements on the stack.
    /// Spills the LRU named variable if necessary.
    pub(crate) fn ensure_space(&mut self, width: u32) {
        while self.stack_depth() + width > self.max_stack_depth {
            if !self.spill_lru() {
                break; // no more named variables to spill
            }
        }
    }

    /// Spill the least-recently-used named variable to RAM.
    /// Returns true if a variable was spilled.
    fn spill_lru(&mut self) -> bool {
        // Find the named variable with the lowest last_access that isn't a temp
        let mut best_idx = None;
        let mut best_access = u64::MAX;

        for (i, entry) in self.on_stack.iter().enumerate() {
            if entry.name.is_some() && entry.last_access < best_access {
                best_access = entry.last_access;
                best_idx = Some(i);
            }
        }

        if let Some(idx) = best_idx {
            let mut var = self.on_stack.remove(idx);
            let addr = self.next_spill_addr;
            self.next_spill_addr += var.width as u64;

            // Compute the stack depth of this variable from top AFTER removal
            // We need to emit instructions to move it from its current stack position to RAM
            // The variable was at index `idx` in on_stack (0 = bottom).
            // After removal, we need to calculate where it was on the real stack.

            // Depth from top of the var (before removal): sum of widths of entries above it
            let depth_from_top: u32 = self.on_stack[idx..].iter().map(|e| e.width).sum();

            // For each element of the variable (width elements), spill to RAM
            for i in 0..var.width {
                let elem_depth = depth_from_top + (var.width - 1 - i);
                let ram_addr = addr + i as u64;
                // Bring element to top, write to RAM
                if elem_depth > 0 && elem_depth <= self.max_stack_depth - 1 {
                    self.side_effects
                        .push((self.formatter.fmt_swap)(elem_depth));
                }
                self.side_effects.push((self.formatter.fmt_push)(ram_addr));
                self.side_effects.push((self.formatter.fmt_swap)(1));
                self.side_effects
                    .push(self.formatter.fmt_write_mem1.clone());
                self.side_effects.push(self.formatter.fmt_pop1.clone());
            }

            var.location = VarLocation::Ram(addr);
            self.spilled.push(var);
            true
        } else {
            false
        }
    }

    /// Reload a spilled variable from RAM onto the top of the stack.
    fn reload_var(&mut self, mut var: ManagedVar) {
        if let VarLocation::Ram(addr) = var.location {
            // Make room if needed
            self.ensure_space(var.width);

            // Read each element from RAM
            for i in 0..var.width {
                let ram_addr = addr + i as u64;
                self.side_effects.push((self.formatter.fmt_push)(ram_addr));
                self.side_effects.push(self.formatter.fmt_read_mem1.clone());
                self.side_effects.push(self.formatter.fmt_pop1.clone());
            }

            var.location = VarLocation::Stack;
            var.last_access = self.tick();
            self.on_stack.push(var);
        }
    }
}

#[cfg(test)]
mod tests;

Homonyms

soft3/glia/run/ir/mod.rs
neural/trident/src/cli/mod.rs
soft3/glia/run/core/mod.rs
cyb/optica/src/scanner/mod.rs
cyb/optica/src/render/mod.rs
neural/trident/src/compile/mod.rs
soft3/tru/rs/graph/mod.rs
neural/trident/src/field/mod.rs
cyb/optica/src/graph/mod.rs
soft3/nox/rs/jets/mod.rs
cyb/prysm/atoms/rs/mod.rs
soft3/glia/run/backend/mod.rs
neural/trident/src/syntax/mod.rs
cyb/optica/src/output/mod.rs
soft3/cybergraph/tests/common/mod.rs
soft3/mudra/src/proof/mod.rs
neural/trident/src/gpu/mod.rs
cyb/optica/src/parser/mod.rs
soft3/glia/import/loader/mod.rs
soft3/tru/rs/model/mod.rs
neural/trident/src/cost/mod.rs
cyb/prysm/system/rs/mod.rs
cyb/shell/src/shell/mod.rs
soft3/nox/rs/patterns/mod.rs
cyb/shell/src/worlds/mod.rs
soft3/mir/src/epoch/mod.rs
soft3/tru/rs/pass/mod.rs
neural/trident/src/config/mod.rs
soft3/glia/run/arch/mod.rs
neural/trident/src/package/mod.rs
soft3/glia/run/bench/mod.rs
neural/trident/src/import/mod.rs
cyb/optica/src/server/mod.rs
neural/trident/src/api/mod.rs
neural/trident/src/neural/mod.rs
neural/trident/src/runtime/mod.rs
neural/trident/src/ast/mod.rs
soft3/nox/rs/data/mod.rs
soft3/mir/src/graph/mod.rs
neural/trident/src/diagnostic/mod.rs
neural/trident/src/typecheck/mod.rs
neural/trident/src/verify/mod.rs
neural/trident/src/deploy/mod.rs
cyb/optica/src/query/mod.rs
soft3/mir/src/frame/mod.rs
neural/trident/src/ir/mod.rs
cyb/prysm/molecules/rs/mod.rs
soft3/tru/rs/focusing/mod.rs
neural/trident/src/lsp/mod.rs
soft3/glia/run/tokenizer/mod.rs
cyb/shell/src/agent/mod.rs
soft3/mir/src/bevy/mod.rs
neural/trident/src/cost/stack_verifier/mod.rs
cyb/honeycrisp/acpu/src/pulse/mod.rs
cyb/honeycrisp/aruminium/src/render/mod.rs
cyb/honeycrisp/acpu/src/gemm/mod.rs
neural/rs/rsc/src/lints/mod.rs
cyb/honeycrisp/acpu/src/sme/mod.rs
cyb/wysm/crates/wasmi/tests/mod.rs
cyb/honeycrisp/acpu/src/lut/mod.rs
cyb/honeycrisp/acpu/src/vector/mod.rs
neural/trident/src/syntax/format/mod.rs
neural/rs/core/src/bounded/mod.rs
cyb/honeycrisp/acpu/src/sync/mod.rs
cyb/honeycrisp/aruminium/src/ffi/mod.rs
cyb/wysm/crates/wasi/tests/mod.rs
neural/trident/src/config/scaffold/mod.rs
cyb/honeycrisp/acpu/src/matrix/mod.rs
soft3/zheng/rs/src/spartan/mod.rs
neural/eidos/rs/src/surface/mod.rs
neural/eidos/rs/src/elab/mod.rs
cyb/shell/src/worlds/vault/mod.rs
neural/eidos/rs/src/tactic_ext/mod.rs
neural/trident/src/ir/tir/mod.rs
neural/trident/src/package/hash/mod.rs
cyb/honeycrisp/acpu/src/field/mod.rs
cyb/honeycrisp/rane/src/mil/mod.rs
neural/trident/src/syntax/lexer/mod.rs
cyb/honeycrisp/acpu/src/probe/mod.rs
cyb/shell/src/worlds/sigma/mod.rs
neural/trident/src/lsp/util/mod.rs
neural/trident/src/package/manifest/mod.rs
neural/rs/macros/src/cell/mod.rs
neural/trident/src/verify/sym/mod.rs
soft3/zheng/rs/src/phi/mod.rs
cyb/shell/src/worlds/models/mod.rs
cyb/honeycrisp/unimem/src/block/mod.rs
neural/trident/src/typecheck/tests/mod.rs
neural/trident/src/api/tests/mod.rs
cyb/shell/src/worlds/body/mod.rs
neural/rs/macros/src/addressed/mod.rs
soft3/glia/run/cli/cmd/mod.rs
cyb/honeycrisp/acpu/src/streaming/mod.rs
neural/trident/src/ir/lir/mod.rs
neural/trident/src/neural/model/mod.rs
soft3/glia/run/backend/cpu/mod.rs
neural/trident/src/config/resolve/mod.rs
soft3/glia/run/arch/decoder/mod.rs
soft3/glia/run/backend/wgpu/mod.rs
neural/trident/src/verify/smt/mod.rs
neural/trident/src/verify/equiv/mod.rs
neural/trident/src/verify/synthesize/mod.rs
soft3/bbg/rs/src/storage/mod.rs
neural/trident/src/neural/training/mod.rs
cyb/honeycrisp/acpu/src/numeric/mod.rs
neural/trident/src/cost/model/mod.rs
neural/trident/src/package/registry/mod.rs
soft3/radio/cyber-bao/src/io/mod.rs
soft3/zheng/rs/src/sumcheck/mod.rs
neural/trident/src/neural/data/mod.rs
neural/trident/src/ir/tree/mod.rs
neural/trident/src/neural/inference/mod.rs
neural/trident/src/syntax/grammar/mod.rs
cyb/shell/src/worlds/robot/mod.rs
neural/rs/macros/src/registers/mod.rs
neural/trident/src/verify/solve/mod.rs
soft3/nox/rs/jets/backends/mod.rs
cyb/shell/src/worlds/com/mod.rs
soft3/glia/run/backend/honeycrisp/mod.rs
neural/rs/core/src/fixed_point/mod.rs
neural/rs/darwin-sys/src/ffi/mod.rs
neural/eidos/rs/src/stdlib/mod.rs
neural/trident/src/ir/kir/mod.rs
cyb/wysm/crates/wast/tests/mod.rs
soft3/radio/iroh-blobs/src/store/mod.rs
neural/trident/src/lsp/semantic/mod.rs
neural/trident/src/package/store/mod.rs
soft3/zheng/rs/src/ccs/mod.rs
soft3/radio/iroh-blobs/examples/common/mod.rs
soft3/strata/nebu/rs/extension/mod.rs
cyb/honeycrisp/acpu/src/crypto/mod.rs
soft3/zheng/rs/src/folding/mod.rs
neural/trident/src/syntax/parser/mod.rs
neural/trident/src/verify/report/mod.rs
cyb/honeycrisp/acpu/src/sparse/mod.rs
soft3/radio/quinn/quinn/src/runtime/mod.rs
cyb/wysm/crates/fuzz/src/oracle/mod.rs
soft3/radio/quinn/quinn-proto/src/config/mod.rs
cyb/evy/forks/bevy_anti_alias/src/contrast_adaptive_sharpening/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/tonemapping/mod.rs
cyb/evy/forks/naga/src/arena/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/experimental/mod.rs
cyb/evy/forks/bevy_render/src/render_phase/mod.rs
cyb/evy/forks/bevy_ecs/src/entity/mod.rs
cyb/evy/forks/bevy_render/src/mesh/mod.rs
neural/trident/src/ir/tir/builder/mod.rs
cyb/wysm/crates/collections/src/arena/mod.rs
soft3/radio/quinn/quinn-proto/src/connection/mod.rs
cyb/wysm/crates/core/src/memory/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/skybox/mod.rs
cyb/evy/forks/bevy_ecs/src/event/mod.rs
neural/trident/src/ir/lir/lower/mod.rs
cyb/evy/forks/bevy_pbr/src/lightmap/mod.rs
cyb/evy/forks/bevy_pbr/src/ssao/mod.rs
cyb/evy/forks/bevy_post_process/src/bloom/mod.rs
cyb/evy/forks/bevy_anti_alias/src/fxaa/mod.rs
soft3/strata/trop/wgsl/src/shaders/mod.rs
cyb/evy/forks/bevy_pbr/src/prepass/mod.rs
cyb/evy/forks/bevy_ecs/src/schedule/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/core_3d/mod.rs
cyb/evy/forks/bevy_ecs/src/relationship/mod.rs
cyb/wysm/crates/wasmi/src/func/mod.rs
cyb/wysm/crates/wasmi/src/engine/mod.rs
cyb/evy/forks/bevy_render/src/render_resource/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/oit/mod.rs
soft3/strata/jali/wgsl/src/shaders/mod.rs
cyb/evy/forks/naga/src/valid/mod.rs
soft3/radio/quinn/quinn-proto/src/range_set/mod.rs
soft3/radio/quinn/quinn/examples/common/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/core_2d/mod.rs
cyb/evy/forks/bevy_anti_alias/src/taa/mod.rs
cyb/wysm/crates/wasmi/src/memory/mod.rs
cyb/evy/forks/bevy_sprite_render/src/tilemap_chunk/mod.rs
cyb/wysm/crates/wasmi/benches/bench/mod.rs
cyb/wysm/crates/wasmi/src/table/mod.rs
soft3/radio/quinn/quinn-udp/src/cmsg/mod.rs
cyb/evy/forks/bevy_ecs/src/reflect/mod.rs
cyb/wysm/crates/cli/src/commands/mod.rs
cyb/evy/forks/bevy_render/src/experimental/mod.rs
cyb/evy/forks/naga/src/keywords/mod.rs
cyb/evy/forks/bevy_ecs/src/bundle/mod.rs
cyb/evy/crates/evy_prysm_core/src/layout/mod.rs
cyb/evy/forks/bevy_pbr/src/ssr/mod.rs
cyb/evy/forks/bevy_sprite_render/src/mesh2d/mod.rs
cyb/evy/forks/bevy_ecs/src/storage/mod.rs
cyb/evy/forks/bevy_ecs/src/message/mod.rs
cyb/evy/forks/bevy_render/src/diagnostic/mod.rs
cyb/evy/forks/bevy_sprite_render/src/render/mod.rs
cyb/evy/forks/bevy_ecs/src/world/mod.rs
cyb/evy/forks/bevy_anti_alias/src/smaa/mod.rs
cyb/evy/forks/bevy_ecs/src/change_detection/mod.rs
cyb/evy/forks/bevy_ecs/src/system/mod.rs
cyb/wysm/crates/wasmi/src/store/mod.rs
neural/trident/src/ir/kir/lower/mod.rs
cyb/wysm/crates/wasi/src/sync/mod.rs
cyb/wysm/crates/core/src/table/mod.rs
warriors/trisha/.vendor/twenty-first/src/tip5/mod.rs
cyb/evy/forks/bevy_render/src/render_graph/mod.rs
soft3/glia/run/backend/wgpu/kernels/mod.rs
cyb/wysm/crates/ir/src/decode/mod.rs
cyb/evy/forks/bevy_post_process/src/dof/mod.rs
soft3/strata/kuro/wgsl/src/shaders/mod.rs
cyb/evy/forks/naga/src/front/mod.rs
soft3/glia/run/backend/cpu/quant/mod.rs
soft3/glia/run/arch/decoder/families/mod.rs
soft3/strata/genies/wgsl/src/shaders/mod.rs
neural/trident/src/ir/tir/neural/mod.rs
neural/trident/src/ir/tir/optimize/mod.rs
cyb/evy/forks/bevy_tasks/src/iter/mod.rs
cyb/evy/forks/bevy_sprite/src/texture_slice/mod.rs
cyb/evy/forks/bevy_render/src/batching/mod.rs
cyb/evy/forks/bevy_pbr/src/light_probe/mod.rs
cyb/evy/forks/bevy_pbr/src/volumetric_fog/mod.rs
neural/trident/src/ir/tir/lower/mod.rs
cyb/wysm/crates/wasmi/tests/integration/mod.rs
cyb/evy/forks/naga/src/back/mod.rs
cyb/evy/forks/bevy_anti_alias/src/dlss/mod.rs
neural/trident/src/syntax/parser/tests/mod.rs
cyb/evy/forks/bevy_render/src/renderer/mod.rs
cyb/evy/forks/bevy_render/src/view/mod.rs
cyb/evy/forks/bevy_ecs/src/component/mod.rs
cyb/wysm/crates/wasmi/src/instance/mod.rs
neural/trident/src/ir/tree/lower/mod.rs
soft3/radio/quinn/quinn-proto/src/tests/mod.rs
cyb/evy/forks/bevy_pbr/src/decal/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/upscaling/mod.rs
neural/trident/src/neural/data/tir_graph/mod.rs
cyb/evy/forks/bevy_pbr/src/atmosphere/mod.rs
cyb/honeycrisp/acpu/src/field/tip5/mod.rs
cyb/evy/forks/bevy_post_process/src/auto_exposure/mod.rs
cyb/evy/forks/bevy_render/src/texture/mod.rs
cyb/evy/forks/bevy_ecs/src/error/mod.rs
cyb/evy/forks/bevy_mesh/src/primitives/mod.rs
soft3/glia/run/backend/honeycrisp/kernels/mod.rs
cyb/evy/forks/bevy_pbr/src/render/mod.rs
cyb/evy/forks/bevy_sprite_render/src/text2d/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/blit/mod.rs
cyb/evy/forks/naga/src/common/mod.rs
cyb/evy/forks/bevy_gizmos/src/primitives/mod.rs
cyb/wysm/crates/c_api/src/types/mod.rs
cyb/wysm/crates/wasmi/src/module/mod.rs
cyb/evy/forks/bevy_post_process/src/effect_stack/mod.rs
cyb/evy/forks/bevy_pbr/src/deferred/mod.rs
cyb/evy/forks/bevy_sprite_render/src/texture_slice/mod.rs
cyb/evy/forks/bevy_post_process/src/motion_blur/mod.rs
cyb/evy/forks/naga/src/proc/mod.rs
cyb/evy/forks/naga/src/compact/mod.rs
cyb/evy/forks/bevy_ecs/src/observer/mod.rs
cyb/evy/forks/bevy_transform/src/components/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/prepass/mod.rs
cyb/evy/forks/bevy_pbr/src/meshlet/mod.rs
cyb/evy/forks/bevy_ecs/src/query/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/deferred/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/fullscreen_vertex_shader/mod.rs
cyb/evy/forks/bevy_render/src/view/window/mod.rs
cyb/evy/forks/naga/src/front/wgsl/mod.rs
neural/inf/rs/cozo/cozorocks/src/bridge/mod.rs
cyb/evy/forks/bevy_ecs/src/storage/table/mod.rs
cyb/evy/forks/bevy_mesh/src/primitives/dim3/mod.rs
soft3/radio/quinn/quinn-proto/src/connection/streams/mod.rs
neural/inf/rs/cozo/cozo-core/src/parse/mod.rs
cyb/evy/forks/naga/src/back/wgsl/mod.rs
cyb/evy/forks/naga/src/back/hlsl/mod.rs
struct Baz { m: mat3x2, } struct Baz { float2 m_0; float2 m_1; float2 m_2; }; float3x2 GetMatmOnBaz(Baz obj) { return float3x2(obj.m_0, obj.m_1, obj.m_2); }
neural/inf/rs/cozo/cozo-core/src/storage/mod.rs
cyb/wysm/crates/wasi/src/sync/snapshots/mod.rs
neural/inf/rs/cozo/cozo-core/src/runtime/mod.rs
cyb/evy/forks/bevy_render/src/view/visibility/mod.rs
cyb/wysm/crates/wasmi/src/module/parser/mod.rs
cyb/evy/forks/bevy_ecs/src/system/commands/mod.rs
neural/inf/rs/cozo/cozo-core/src/fixed_rule/mod.rs
cyb/evy/forks/naga/src/back/glsl/mod.rs
cyb/evy/forks/naga/src/back/dot/mod.rs
soft3/radio/quinn/quinn-proto/src/congestion/bbr/mod.rs
cyb/evy/forks/naga/src/front/spv/mod.rs
cyb/evy/forks/bevy_ecs/src/schedule/executor/mod.rs
cyb/wysm/crates/wasmi/src/engine/limits/mod.rs
neural/inf/rs/cozo/cozo-core/src/query/mod.rs
neural/inf/rs/cozo/cozo-core/src/fts/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/experimental/mip_generation/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/oit/resolve/mod.rs
cyb/evy/forks/naga/src/front/glsl/mod.rs
cyb/evy/forks/bevy_ecs/src/schedule/graph/mod.rs
cyb/evy/forks/naga/src/back/spv/mod.rs
neural/inf/rs/cozo/cozo-core/src/data/mod.rs
cyb/wysm/crates/wasmi/src/engine/executor/mod.rs
cyb/evy/forks/bevy_ecs/src/world/entity_access/mod.rs
cyb/evy/forks/naga/src/back/msl/mod.rs
cyb/wysm/crates/wasmi/src/module/instantiate/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/mod.rs
cyb/evy/forks/bevy_render/src/experimental/occlusion_culling/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/lut/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/crypto/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/aruminium/src/render/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/probe/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/vector/mod.rs
neural/inf/rs/cozo/cozo-core/src/fts/cangjie/mod.rs
cyb/evy/forks/naga/src/front/wgsl/parse/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/sme/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/probe/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/gemm/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/aruminium/src/render/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/func/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/pulse/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/numeric/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/sparse/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/field/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/rane/src/mil/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/streaming/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/crypto/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/matrix/mod.rs
neural/inf/rs/cozo/cozo-core/src/fixed_rule/utilities/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/rane/src/mil/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/sync/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/matrix/mod.rs
cyb/wysm/crates/wasmi/src/engine/executor/handler/mod.rs
neural/inf/rs/cozo/cozo-core/src/fts/tokenizer/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/vector/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/field/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/sync/mod.rs
cyb/evy/forks/naga/src/back/wgsl/polyfill/mod.rs
neural/inf/rs/cozo/cozo-core/src/data/tests/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/pulse/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/sparse/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/aruminium/src/ffi/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/gemm/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/numeric/mod.rs
cyb/evy/forks/naga/src/front/wgsl/lower/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/aruminium/src/ffi/mod.rs
neural/inf/rs/cozo/cozo-core/src/fixed_rule/algos/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/func/stack/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/field/tip5/mod.rs
cyb/wysm/crates/wasmi/src/engine/executor/handler/dispatch/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/func/simd/mod.rs
neural/inf/rs/cozo/cozo-core/src/fts/tokenizer/stop_word_filter/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/field/tip5/mod.rs

Graph