pub mod edge_kind {
pub const ASSIGNMENT: u32 = 1 << 0;
pub const CALL_ARG: u32 = 1 << 1;
pub const RETURN: u32 = 1 << 2;
pub const PHI: u32 = 1 << 3;
pub const DOMINANCE: u32 = 1 << 4;
pub const ALIAS: u32 = 1 << 5;
pub const MEM_STORE: u32 = 1 << 6;
pub const MEM_LOAD: u32 = 1 << 7;
pub const MUT_REF: u32 = 1 << 8;
pub const CONTROL: u32 = 1 << 9;
pub const INDEX: u32 = 1 << 10;
pub const BASE: u32 = 1 << 11;
pub const INDUCTION_VARIABLE: u32 = 1 << 12;
pub const UPPER_BOUND: u32 = 1 << 13;
pub const FORMAT_STRING_ARG: u32 = 1 << 14;
pub const CALL_ARG_SLOT_BASE: u32 = 1 << 16;
pub const CALL_ARG_0: u32 = CALL_ARG_SLOT_BASE;
pub const CALL_ARG_1: u32 = CALL_ARG_SLOT_BASE << 1;
pub const CALL_ARG_2: u32 = CALL_ARG_SLOT_BASE << 2;
pub const CALL_ARG_3: u32 = CALL_ARG_SLOT_BASE << 3;
pub const CALL_ARG_4: u32 = CALL_ARG_SLOT_BASE << 4;
pub const CALL_ARG_5: u32 = CALL_ARG_SLOT_BASE << 5;
pub const CALL_ARG_6: u32 = CALL_ARG_SLOT_BASE << 6;
pub const CALL_ARG_7: u32 = CALL_ARG_SLOT_BASE << 7;
pub const CALL_ARG_MAX_SLOT: u32 = 7;
pub const SIZE_ARG: u32 = 1 << 24;
#[must_use]
pub const fn call_arg_slot(n: u32) -> u32 {
if n > CALL_ARG_MAX_SLOT {
CALL_ARG
} else {
CALL_ARG_SLOT_BASE << n
}
}
}
pub mod tag_family {
pub const FUNCTION: u32 = 1 << 0;
pub const FILE: u32 = 1 << 1;
pub const PACKAGE: u32 = 1 << 2;
}
pub mod node_kind {
pub const VARIABLE: u32 = 1;
pub const CALL: u32 = 2;
pub const IMPORT: u32 = 3;
pub const LITERAL: u32 = 4;
pub const SSA: u32 = 5;
pub const BASIC_BLOCK: u32 = 6;
pub const BINARY: u32 = 7;
pub const FUNCTION_DECL: u32 = 8;
}
pub mod arg_of;
pub mod call_to;
pub mod edge;
pub mod in_file;
pub mod in_function;
pub mod in_package;
pub mod literal_of;
pub mod node_kind_eq;
pub mod return_value_of;
pub mod size_argument_of;
#[cfg(feature = "inventory-registry")]
pub(crate) fn inventory_u32_le_bytes(words: &[u32]) -> Vec<u8> {
words.iter().flat_map(|v| v.to_le_bytes()).collect()
}