mod block;
mod closure_conv;
mod dce;
mod expr;
mod fold;
mod ids;
mod imports;
mod lower;
mod module;
mod monomorphise;
mod resolve_refs;
mod resolved_type;
mod span;
mod types;
mod visitor;
pub use block::{IrBlockStatement, IrMatchArm};
pub use closure_conv::ClosureConversionPass;
pub use dce::{
eliminate_dead_code, eliminate_dead_code_expr, DeadCodeEliminationPass, DeadCodeEliminator,
};
pub use expr::{DispatchKind, IrExpr, ReferenceTarget};
pub use fold::{fold_constants, ConstantFolder, ConstantFoldingPass};
pub use ids::{
BindingId, EnumId, FieldIdx, FunctionId, ImplId, LetId, MethodIdx, StructId, TraitId,
VariantIdx,
};
pub use imports::{ImportedKind, IrImport, IrImportItem};
pub use lower::{lower_to_ir, lower_to_ir_with_path};
pub use module::{IrModule, IrModuleNode};
pub(crate) use monomorphise::walkers::walk_expr_children_mut;
pub use monomorphise::MonomorphisePass;
pub use resolve_refs::ResolveReferencesPass;
pub use resolved_type::{GenericBase, ResolvedType};
pub use span::{FileId, IrSpan};
pub use types::{
ImplTarget, IrEnum, IrEnumVariant, IrField, IrFunction, IrFunctionParam, IrFunctionSig,
IrGenericParam, IrImpl, IrLet, IrStruct, IrTrait, IrTraitRef,
};
pub use visitor::{
walk_block_statement, walk_expr, walk_expr_children, walk_module, walk_module_children,
IrVisitor,
};
use crate::ast::Visibility;
impl Visibility {
#[must_use]
pub const fn is_public(&self) -> bool {
matches!(self, Self::Public)
}
}
#[must_use]
pub fn simple_type_name(name: &str) -> &str {
name.rsplit("::").next().unwrap_or(name)
}