//! `#[register(base, bank_size, width)]` — typed MMIO register code generation.
//!
//! Parses a module annotated with `#[register(...)]` containing `#[reg(...)]`
//! structs and enums. Validates bit layouts and generates safe read/write/modify
//! methods backed by read_volatile/write_volatile.
//!
//! Errors: RS001-RS008 (see reference/errors/registers.md).

mod codegen;
mod validate;

use proc_macro2::{Span, TokenStream};
use quote::quote;
use syn::{
    parse::Parser, parse2, punctuated::Punctuated, Attribute, Error, Expr, ExprLit, Field, Fields,
    Ident, Item, ItemEnum, ItemMod, ItemStruct, Lit, LitInt, Result, Token, Type, Visibility,
};

// ---------------------------------------------------------------------------
// Shared types
// ---------------------------------------------------------------------------

pub(crate) struct RegisterModuleAttr {
    pub base: u64,
    pub bank_size: u64,
    pub width: u32,
}

pub(crate) struct RegAttr {
    pub offset: u64,
    pub access: Access,
    pub width_override: Option<u32>,
}

#[derive(Clone, Copy, PartialEq)]
pub(crate) enum Access {
    ReadOnly,
    WriteOnly,
    ReadWrite,
}

pub(crate) struct FieldInfo {
    pub name: Ident,
    pub ty: Type,
    pub bit_start: u32,
    pub bit_end: u32,
    pub vis: Visibility,
}

pub(crate) struct EnumInfo {
    pub name: Ident,
    pub variant_count: usize,
    pub variants: Vec<(Ident, Option<u64>)>,
}

pub(crate) struct RegisterDef {
    pub name: Ident,
    pub vis: Visibility,
    pub attrs: Vec<Attribute>,
    pub offset: u64,
    pub access: Access,
    pub width: u32,
    pub fields: Vec<FieldInfo>,
}

// ---------------------------------------------------------------------------
// Main expansion
// ---------------------------------------------------------------------------

pub fn expand(attr: TokenStream, item: TokenStream) -> Result<TokenStream> {
    let mod_attr = parse_register_module_attr(attr)?;
    let module: ItemMod = parse2(item)?;

    let mod_name = &module.ident;
    let mod_vis = &module.vis;

    let content = match &module.content {
        Some((_, items)) => items,
        None => {
            return Err(Error::new_spanned(
                &module,
                "#[register] must be applied to a module with a body",
            ));
        }
    };

    let enums = collect_enums(content)?;

    let mut generated_items = Vec::new();
    let mut passthrough_items = Vec::new();

    for item in content {
        match item {
            Item::Struct(s) => {
                if let Some(reg_attr) = extract_reg_attr(&s.attrs)? {
                    let reg = parse_register_struct(s, &reg_attr, &mod_attr)?;
                    validate::validate_register(&reg, &mod_attr, &enums)?;
                    let gen = codegen::generate_register_code(&reg, &mod_attr, &enums)?;
                    generated_items.push(gen);
                } else {
                    passthrough_items.push(quote! { #s });
                }
            }
            Item::Enum(e) => {
                passthrough_items.push(generate_enum_passthrough(e)?);
            }
            other => {
                passthrough_items.push(quote! { #other });
            }
        }
    }

    let mod_attrs: Vec<_> = module
        .attrs
        .iter()
        .filter(|a| !a.path().is_ident("register"))
        .collect();

    Ok(quote! {
        #(#mod_attrs)*
        #mod_vis mod #mod_name {
            #(#passthrough_items)*
            #(#generated_items)*
        }
    })
}

// ---------------------------------------------------------------------------
// Attribute parsing
// ---------------------------------------------------------------------------

fn parse_register_module_attr(attr: TokenStream) -> Result<RegisterModuleAttr> {
    let mut base: Option<u64> = None;
    let mut bank_size: Option<u64> = None;
    let mut width: Option<u32> = None;

    let parser = Punctuated::<syn::MetaNameValue, Token![,]>::parse_terminated;
    let parsed = parser.parse2(attr)?;

    for nv in &parsed {
        let key = nv
            .path
            .get_ident()
            .ok_or_else(|| Error::new_spanned(&nv.path, "expected identifier"))?
            .to_string();
        match key.as_str() {
            "base" => base = Some(expr_to_u64(&nv.value)?),
            "bank_size" => bank_size = Some(expr_to_u64(&nv.value)?),
            "width" => width = Some(expr_to_u32(&nv.value)?),
            _ => {
                return Err(Error::new_spanned(
                    &nv.path,
                    "expected `base`, `bank_size`, or `width`",
                ));
            }
        }
    }

    Ok(RegisterModuleAttr {
        base: base.ok_or_else(|| Error::new(Span::call_site(), "missing `base` in #[register]"))?,
        bank_size: bank_size
            .ok_or_else(|| Error::new(Span::call_site(), "missing `bank_size` in #[register]"))?,
        width: width.unwrap_or(32),
    })
}

pub(crate) fn parse_u64_lit(lit: &LitInt) -> Result<u64> {
    let s = lit.to_string().replace('_', "");
    if s.starts_with("0x") || s.starts_with("0X") {
        u64::from_str_radix(&s[2..], 16).map_err(|e| Error::new(lit.span(), e))
    } else if s.starts_with("0b") || s.starts_with("0B") {
        u64::from_str_radix(&s[2..], 2).map_err(|e| Error::new(lit.span(), e))
    } else if s.starts_with("0o") || s.starts_with("0O") {
        u64::from_str_radix(&s[2..], 8).map_err(|e| Error::new(lit.span(), e))
    } else {
        s.parse::<u64>().map_err(|e| Error::new(lit.span(), e))
    }
}

fn expr_to_u64(expr: &Expr) -> Result<u64> {
    match expr {
        Expr::Lit(ExprLit { lit: Lit::Int(lit), .. }) => parse_u64_lit(lit),
        _ => Err(Error::new_spanned(expr, "expected integer literal")),
    }
}

fn expr_to_u32(expr: &Expr) -> Result<u32> {
    match expr {
        Expr::Lit(ExprLit { lit: Lit::Int(lit), .. }) => lit.base10_parse(),
        _ => Err(Error::new_spanned(expr, "expected integer literal")),
    }
}

// ---------------------------------------------------------------------------
// Register struct parsing
// ---------------------------------------------------------------------------

fn extract_reg_attr(attrs: &[Attribute]) -> Result<Option<RegAttr>> {
    for attr in attrs {
        if attr.path().is_ident("reg") {
            let mut offset: Option<u64> = None;
            let mut access: Option<Access> = None;
            let mut width_override: Option<u32> = None;

            attr.parse_nested_meta(|meta| {
                if meta.path.is_ident("offset") {
                    let value: LitInt = meta.value()?.parse()?;
                    offset = Some(parse_u64_lit(&value)?);
                    Ok(())
                } else if meta.path.is_ident("access") {
                    let value: syn::LitStr = meta.value()?.parse()?;
                    access = Some(match value.value().as_str() {
                        "ro" => Access::ReadOnly,
                        "wo" => Access::WriteOnly,
                        "rw" => Access::ReadWrite,
                        other => {
                            return Err(Error::new(
                                value.span(),
                                format!(
                                    "unknown access mode `{}`; expected ro, wo, or rw",
                                    other
                                ),
                            ))
                        }
                    });
                    Ok(())
                } else if meta.path.is_ident("width") {
                    let value: LitInt = meta.value()?.parse()?;
                    width_override = Some(value.base10_parse()?);
                    Ok(())
                } else {
                    Err(meta.error("expected `offset`, `access`, or `width`"))
                }
            })?;

            return Ok(Some(RegAttr {
                offset: offset
                    .ok_or_else(|| Error::new_spanned(attr, "missing `offset` in #[reg]"))?,
                access: access
                    .ok_or_else(|| Error::new_spanned(attr, "missing `access` in #[reg]"))?,
                width_override,
            }));
        }
    }
    Ok(None)
}

fn parse_register_struct(
    s: &ItemStruct,
    reg_attr: &RegAttr,
    mod_attr: &RegisterModuleAttr,
) -> Result<RegisterDef> {
    let reg_width = reg_attr.width_override.unwrap_or(mod_attr.width);

    let fields = match &s.fields {
        Fields::Named(named) => {
            let mut result = Vec::new();
            for f in &named.named {
                if let Some(fi) = parse_field_attr(f)? {
                    result.push(fi);
                }
            }
            result
        }
        _ => {
            return Err(Error::new_spanned(s, "#[reg] structs must have named fields"));
        }
    };

    Ok(RegisterDef {
        name: s.ident.clone(),
        vis: s.vis.clone(),
        attrs: s.attrs.iter().filter(|a| !a.path().is_ident("reg")).cloned().collect(),
        offset: reg_attr.offset,
        access: reg_attr.access,
        width: reg_width,
        fields,
    })
}

fn parse_field_attr(f: &Field) -> Result<Option<FieldInfo>> {
    for attr in &f.attrs {
        if attr.path().is_ident("field") {
            let mut bit_start: Option<u32> = None;
            let mut bit_end: Option<u32> = None;

            attr.parse_nested_meta(|meta| {
                if meta.path.is_ident("bits") {
                    let value = meta.value()?;
                    let start_lit: LitInt = value.parse()?;
                    let start: u32 = start_lit.base10_parse()?;
                    let _dot_dot: Token![..] = value.parse()?;
                    let end_lit: LitInt = value.parse()?;
                    let end: u32 = end_lit.base10_parse()?;
                    bit_start = Some(start);
                    bit_end = Some(end);
                    Ok(())
                } else {
                    Err(meta.error("expected `bits`"))
                }
            })?;

            let start =
                bit_start.ok_or_else(|| Error::new_spanned(attr, "missing `bits` in #[field]"))?;
            let end =
                bit_end.ok_or_else(|| Error::new_spanned(attr, "missing `bits` in #[field]"))?;

            return Ok(Some(FieldInfo {
                name: f.ident.clone().unwrap(),
                ty: f.ty.clone(),
                bit_start: start,
                bit_end: end,
                vis: f.vis.clone(),
            }));
        }
    }
    Ok(None)
}

// ---------------------------------------------------------------------------
// Enum helpers
// ---------------------------------------------------------------------------

fn collect_enums(items: &[Item]) -> Result<Vec<EnumInfo>> {
    let mut enums = Vec::new();
    for item in items {
        if let Item::Enum(e) = item {
            let mut variants = Vec::new();
            for v in &e.variants {
                let disc = match &v.discriminant {
                    Some((_, Expr::Lit(ExprLit { lit: Lit::Int(lit), .. }))) => {
                        Some(parse_u64_lit(lit)?)
                    }
                    _ => None,
                };
                variants.push((v.ident.clone(), disc));
            }
            enums.push(EnumInfo {
                name: e.ident.clone(),
                variant_count: e.variants.len(),
                variants,
            });
        }
    }
    Ok(enums)
}

fn generate_enum_passthrough(e: &ItemEnum) -> Result<TokenStream> {
    let attrs = &e.attrs;
    let vis = &e.vis;
    let name = &e.ident;
    let variants = &e.variants;
    let first_variant = variants.first().map(|v| &v.ident);

    Ok(quote! {
        #(#attrs)*
        #[derive(Clone, Copy, PartialEq, Eq, Debug)]
        #vis enum #name { #variants }

        impl Default for #name {
            fn default() -> Self {
                #name::#first_variant
            }
        }
    })
}

pub(crate) fn extract_type_name_str(ty: &Type) -> Option<String> {
    match ty {
        Type::Path(tp) => Some(tp.path.segments.last()?.ident.to_string()),
        _ => None,
    }
}

Homonyms

cyberia/src/components/mod.rs
cyberia/src/pages/mod.rs
cyb/optica/src/output/mod.rs
neural/trident/src/compile/mod.rs
cyb/optica/src/parser/mod.rs
soft3/nox/rs/data/mod.rs
neural/trident/src/api/mod.rs
soft3/mir/src/graph/mod.rs
cyb/optica/src/render/mod.rs
cyb/optica/src/scanner/mod.rs
soft3/cybergraph/tests/common/mod.rs
neural/trident/src/verify/mod.rs
soft3/tru/rs/model/mod.rs
neural/trident/src/diagnostic/mod.rs
soft3/mudra/src/proof/mod.rs
cyb/optica/src/graph/mod.rs
soft3/glia/import/loader/mod.rs
soft3/glia/run/backend/mod.rs
neural/trident/src/import/mod.rs
soft3/tru/rs/pass/mod.rs
soft3/mir/src/bevy/mod.rs
neural/trident/src/package/mod.rs
neural/trident/src/lsp/mod.rs
neural/trident/src/field/mod.rs
cyb/prysm/atoms/rs/mod.rs
soft3/tru/rs/graph/mod.rs
neural/trident/src/deploy/mod.rs
soft3/mir/src/epoch/mod.rs
neural/trident/src/runtime/mod.rs
soft3/glia/run/arch/mod.rs
neural/trident/src/typecheck/mod.rs
neural/trident/src/gpu/mod.rs
soft3/nox/rs/jets/mod.rs
soft3/glia/run/tokenizer/mod.rs
soft3/mir/src/frame/mod.rs
neural/trident/src/ir/mod.rs
neural/trident/src/config/mod.rs
soft3/nox/rs/patterns/mod.rs
neural/trident/src/cost/mod.rs
soft3/glia/run/ir/mod.rs
neural/trident/src/cli/mod.rs
soft3/tru/rs/focusing/mod.rs
neural/trident/src/neural/mod.rs
cyb/optica/src/query/mod.rs
cyb/prysm/system/rs/mod.rs
neural/trident/src/ast/mod.rs
soft3/glia/run/bench/mod.rs
cyb/prysm/molecules/rs/mod.rs
cyb/optica/src/server/mod.rs
soft3/glia/run/core/mod.rs
neural/trident/src/syntax/mod.rs
cyb/honeycrisp/acpu/src/vector/mod.rs
soft3/glia/run/backend/cpu/mod.rs
soft3/zheng/rs/src/spartan/mod.rs
soft3/bbg/rs/src/storage/mod.rs
neural/trident/src/config/resolve/mod.rs
cyb/honeycrisp/aruminium/src/ffi/mod.rs
cyb/cyb/cyb-shell/src/worlds/mod.rs
cyb/wysm/crates/wasi/tests/mod.rs
soft3/zheng/rs/src/ccs/mod.rs
neural/trident/src/package/store/mod.rs
cyb/cyb/cyb-shell/src/shell/mod.rs
cyb/wysm/crates/wasmi/tests/mod.rs
neural/trident/src/verify/synthesize/mod.rs
cyb/honeycrisp/acpu/src/field/mod.rs
neural/rs/macros/src/addressed/mod.rs
soft3/glia/run/cli/cmd/mod.rs
neural/trident/src/cost/stack_verifier/mod.rs
neural/eidos/rs/src/stdlib/mod.rs
neural/trident/src/verify/sym/mod.rs
neural/trident/src/syntax/format/mod.rs
neural/trident/src/syntax/grammar/mod.rs
neural/trident/src/lsp/util/mod.rs
neural/rs/rsc/src/lints/mod.rs
neural/trident/src/typecheck/tests/mod.rs
neural/eidos/rs/src/surface/mod.rs
soft3/mir/src/frame/tiers/mod.rs
cyb/honeycrisp/acpu/src/pulse/mod.rs
neural/trident/src/ir/lir/mod.rs
neural/trident/src/package/registry/mod.rs
neural/trident/src/neural/model/mod.rs
neural/trident/src/package/hash/mod.rs
cyb/honeycrisp/acpu/src/sync/mod.rs
soft3/glia/run/arch/decoder/mod.rs
neural/trident/src/verify/report/mod.rs
neural/trident/src/ir/tir/mod.rs
cyb/honeycrisp/rane/src/mil/mod.rs
cyb/honeycrisp/acpu/src/crypto/mod.rs
soft3/zheng/rs/src/folding/mod.rs
neural/trident/src/ir/tree/mod.rs
cyb/honeycrisp/acpu/src/matrix/mod.rs
soft3/glia/run/backend/honeycrisp/mod.rs
neural/eidos/rs/src/elab/mod.rs
neural/trident/src/verify/solve/mod.rs
neural/rs/core/src/fixed_point/mod.rs
neural/trident/src/syntax/parser/mod.rs
neural/trident/src/neural/data/mod.rs
neural/trident/src/verify/smt/mod.rs
soft3/radio/iroh-blobs/examples/common/mod.rs
soft3/strata/nebu/rs/extension/mod.rs
neural/rs/darwin-sys/src/ffi/mod.rs
cyb/honeycrisp/acpu/src/sparse/mod.rs
soft3/glia/run/backend/wgpu/mod.rs
neural/rs/core/src/bounded/mod.rs
neural/eidos/rs/src/tactic_ext/mod.rs
neural/trident/src/cost/model/mod.rs
cyb/wysm/crates/wast/tests/mod.rs
soft3/radio/iroh-blobs/src/store/mod.rs
neural/trident/src/package/manifest/mod.rs
cyb/cyb/cyb-shell/src/agent/mod.rs
neural/trident/src/neural/training/mod.rs
neural/trident/src/verify/equiv/mod.rs
neural/trident/src/syntax/lexer/mod.rs
cyb/honeycrisp/acpu/src/numeric/mod.rs
soft3/radio/cyber-bao/src/io/mod.rs
neural/trident/src/ir/kir/mod.rs
cyb/honeycrisp/aruminium/src/render/mod.rs
neural/trident/src/neural/inference/mod.rs
cyb/honeycrisp/acpu/src/probe/mod.rs
neural/trident/src/api/tests/mod.rs
cyb/honeycrisp/acpu/src/gemm/mod.rs
soft3/nox/rs/jets/backends/mod.rs
neural/trident/src/lsp/semantic/mod.rs
neural/rs/macros/src/cell/mod.rs
neural/trident/src/config/scaffold/mod.rs
soft3/zheng/rs/src/sumcheck/mod.rs
cyb/evy/forks/bevy_ecs/src/entity/mod.rs
neural/trident/src/ir/tir/builder/mod.rs
cyb/evy/forks/bevy_ecs/src/system/mod.rs
cyb/evy/forks/bevy_sprite_render/src/render/mod.rs
soft3/strata/jali/wgsl/src/shaders/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/tonemapping/mod.rs
cyb/evy/forks/bevy_anti_alias/src/dlss/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/skybox/mod.rs
cyb/evy/forks/bevy_sprite_render/src/text2d/mod.rs
cyb/evy/forks/bevy_render/src/batching/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/experimental/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/oit/mod.rs
cyb/evy/forks/bevy_sprite_render/src/tilemap_chunk/mod.rs
cyb/evy/forks/bevy_pbr/src/atmosphere/mod.rs
cyb/evy/forks/bevy_post_process/src/motion_blur/mod.rs
cyb/wysm/crates/wasmi/src/store/mod.rs
cyb/evy/forks/bevy_render/src/render_graph/mod.rs
cyb/wysm/crates/wasmi/benches/bench/mod.rs
cyb/evy/forks/bevy_anti_alias/src/contrast_adaptive_sharpening/mod.rs
neural/trident/src/ir/tir/stack/mod.rs
cyb/evy/forks/bevy_render/src/texture/mod.rs
cyb/wysm/crates/c_api/src/types/mod.rs
soft3/strata/genies/wgsl/src/shaders/mod.rs
cyb/wysm/crates/core/src/memory/mod.rs
bootloader/go-cyber/mcp/rust/src/proto/mod.rs
cyb/evy/forks/bevy_ecs/src/bundle/mod.rs
cyb/evy/forks/bevy_mesh/src/primitives/mod.rs
cyb/evy/forks/bevy_ecs/src/schedule/mod.rs
cyb/wysm/crates/wasmi/src/module/mod.rs
cyb/evy/forks/bevy_sprite/src/texture_slice/mod.rs
cyb/evy/forks/bevy_ecs/src/observer/mod.rs
neural/trident/src/ir/tir/neural/mod.rs
cyb/evy/forks/bevy_render/src/view/mod.rs
neural/trident/src/ir/lir/lower/mod.rs
cyb/evy/forks/bevy_anti_alias/src/smaa/mod.rs
bootloader/go-cyber/mcp/rust/src/clients/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/fullscreen_vertex_shader/mod.rs
cyb/wysm/crates/wasmi/tests/integration/mod.rs
cyb/wysm/crates/ir/src/decode/mod.rs
cyb/wysm/crates/wasmi/src/memory/mod.rs
cyb/evy/crates/evy_prysm_core/src/layout/mod.rs
cyb/evy/forks/bevy_anti_alias/src/fxaa/mod.rs
cyb/evy/forks/bevy_pbr/src/prepass/mod.rs
cyb/evy/forks/bevy_render/src/render_resource/mod.rs
cyb/evy/forks/bevy_ecs/src/query/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/core_2d/mod.rs
cyb/wysm/crates/cli/src/commands/mod.rs
cyb/evy/forks/bevy_render/src/renderer/mod.rs
cyb/wysm/crates/collections/src/arena/mod.rs
cyb/evy/forks/bevy_post_process/src/effect_stack/mod.rs
cyb/evy/forks/bevy_ecs/src/change_detection/mod.rs
cyb/evy/forks/bevy_pbr/src/ssao/mod.rs
cyb/evy/forks/naga/src/keywords/mod.rs
cyb/evy/forks/naga/src/compact/mod.rs
neural/trident/src/ir/tir/lower/mod.rs
cyb/evy/forks/bevy_pbr/src/render/mod.rs
cyb/evy/forks/bevy_ecs/src/world/mod.rs
cyb/evy/forks/bevy_anti_alias/src/taa/mod.rs
cyb/evy/forks/bevy_ecs/src/reflect/mod.rs
soft3/strata/kuro/wgsl/src/shaders/mod.rs
cyb/evy/forks/bevy_ecs/src/error/mod.rs
neural/trident/src/ir/kir/lower/mod.rs
cyb/evy/forks/naga/src/proc/mod.rs
cyb/evy/forks/bevy_ecs/src/event/mod.rs
cyb/evy/forks/bevy_ecs/src/component/mod.rs
cyb/evy/forks/bevy_sprite_render/src/mesh2d/mod.rs
cyb/evy/forks/bevy_ecs/src/relationship/mod.rs
cyb/wysm/crates/wasmi/src/instance/mod.rs
cyb/evy/forks/bevy_pbr/src/ssr/mod.rs
bootloader/go-cyber/mcp/rust/src/tools/mod.rs
soft3/glia/run/backend/honeycrisp/kernels/mod.rs
cyb/evy/forks/naga/src/back/mod.rs
soft3/glia/run/backend/cpu/quant/mod.rs
cyb/wysm/crates/core/src/table/mod.rs
cyb/evy/forks/bevy_post_process/src/dof/mod.rs
cyb/evy/forks/bevy_pbr/src/light_probe/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/prepass/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/upscaling/mod.rs
cyb/wysm/crates/wasmi/src/table/mod.rs
cyb/evy/forks/bevy_post_process/src/bloom/mod.rs
cyb/evy/forks/bevy_pbr/src/lightmap/mod.rs
neural/trident/src/ir/tir/optimize/mod.rs
cyb/evy/forks/bevy_gizmos/src/primitives/mod.rs
cyb/evy/forks/bevy_post_process/src/auto_exposure/mod.rs
neural/trident/src/neural/data/tir_graph/mod.rs
cyb/evy/forks/bevy_render/src/experimental/mod.rs
cyb/wysm/crates/wasmi/src/engine/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/deferred/mod.rs
cyb/evy/forks/naga/src/arena/mod.rs
cyb/evy/forks/bevy_render/src/diagnostic/mod.rs
cyb/evy/forks/bevy_render/src/render_phase/mod.rs
cyb/evy/forks/bevy_transform/src/components/mod.rs
soft3/strata/trop/wgsl/src/shaders/mod.rs
soft3/glia/run/backend/wgpu/kernels/mod.rs
cyb/evy/forks/bevy_sprite_render/src/texture_slice/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/core_3d/mod.rs
cyb/evy/forks/bevy_render/src/mesh/mod.rs
neural/trident/src/ir/tree/lower/mod.rs
cyb/evy/forks/bevy_pbr/src/volumetric_fog/mod.rs
cyb/evy/forks/bevy_pbr/src/decal/mod.rs
cyb/wysm/crates/fuzz/src/oracle/mod.rs
cyb/evy/forks/bevy_ecs/src/message/mod.rs
cyb/evy/forks/naga/src/valid/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/blit/mod.rs
cyb/evy/forks/naga/src/front/mod.rs
cyb/wysm/crates/wasi/src/sync/mod.rs
cyb/evy/forks/bevy_pbr/src/meshlet/mod.rs
cyb/evy/forks/bevy_pbr/src/deferred/mod.rs
neural/trident/src/syntax/parser/tests/mod.rs
cyb/evy/forks/bevy_ecs/src/storage/mod.rs
cyb/evy/forks/bevy_tasks/src/iter/mod.rs
soft3/glia/run/arch/decoder/families/mod.rs
cyb/wysm/crates/wasmi/src/func/mod.rs
cyb/evy/forks/naga/src/common/mod.rs
cyb/evy/forks/naga/src/front/wgsl/mod.rs
cyb/evy/forks/naga/src/back/spv/mod.rs
cyb/evy/forks/naga/src/back/dot/mod.rs
cyb/evy/forks/bevy_render/src/view/window/mod.rs
cyb/wysm/crates/wasi/src/sync/snapshots/mod.rs
cyb/evy/forks/bevy_render/src/experimental/occlusion_culling/mod.rs
cyb/evy/forks/bevy_ecs/src/schedule/graph/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/mod.rs
cyb/wysm/crates/wasmi/src/module/parser/mod.rs
cyb/wysm/crates/wasmi/src/engine/limits/mod.rs
cyb/wysm/crates/wasmi/src/engine/executor/mod.rs
cyb/evy/forks/bevy_ecs/src/system/commands/mod.rs
cyb/evy/forks/naga/src/back/wgsl/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/oit/resolve/mod.rs
cyb/wysm/crates/wasmi/src/module/instantiate/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/experimental/mip_generation/mod.rs
cyb/evy/forks/bevy_ecs/src/storage/table/mod.rs
bootloader/go-cyber/cw/packages/cyber-std/src/tokenfactory/mod.rs
cyb/evy/forks/bevy_render/src/view/visibility/mod.rs
cyb/evy/forks/bevy_ecs/src/schedule/executor/mod.rs
cyb/evy/forks/naga/src/front/spv/mod.rs
cyb/evy/forks/naga/src/back/msl/mod.rs
cyb/evy/forks/naga/src/front/glsl/mod.rs
cyb/evy/forks/bevy_ecs/src/world/entity_access/mod.rs
cyb/evy/forks/bevy_mesh/src/primitives/dim3/mod.rs
cyb/evy/forks/naga/src/back/glsl/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); }
cyb/wysm/crates/wasmi/src/engine/executor/handler/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/func/mod.rs
cyb/evy/forks/naga/src/front/wgsl/parse/mod.rs
cyb/evy/forks/naga/src/back/wgsl/polyfill/mod.rs
cyb/evy/forks/naga/src/front/wgsl/lower/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/func/simd/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/func/stack/mod.rs
cyb/wysm/crates/wasmi/src/engine/executor/handler/dispatch/mod.rs

Graph