| //! Interface of a Rust codegen backend | |
| //! | |
| //! This crate defines all the traits that have to be implemented by a codegen backend in order to | |
| //! use the backend-agnostic codegen code in `rustc_codegen_ssa`. | |
| //! | |
| //! The interface is designed around two backend-specific data structures, the codegen context and | |
| //! the builder. The codegen context is supposed to be read-only after its creation and during the | |
| //! actual codegen, while the builder stores the information about the function during codegen and | |
| //! is used to produce the instructions of the backend IR. | |
| //! | |
| //! The traits contain associated types that are backend-specific, such as the backend's value or | |
| //! basic blocks. | |
| mod abi; | |
| mod asm; | |
| mod backend; | |
| mod builder; | |
| mod consts; | |
| mod coverageinfo; | |
| mod debuginfo; | |
| mod declare; | |
| mod intrinsic; | |
| mod misc; | |
| mod statics; | |
| mod type_; | |
| mod write; | |
| use std::fmt; | |
| use rustc_middle::ty::Ty; | |
| use rustc_middle::ty::layout::{FnAbiOf, LayoutOf, TyAndLayout}; | |
| use rustc_target::callconv::FnAbi; | |
| pub use self::abi::AbiBuilderMethods; | |
| pub use self::asm::{ | |
| AsmBuilderMethods, AsmCodegenMethods, GlobalAsmOperandRef, InlineAsmOperandRef, | |
| }; | |
| pub use self::backend::{BackendTypes, CodegenBackend, ExtraBackendMethods}; | |
| pub use self::builder::{BuilderMethods, OverflowOp, ReturnSlot}; | |
| pub use self::consts::ConstCodegenMethods; | |
| pub use self::coverageinfo::CoverageInfoBuilderMethods; | |
| pub use self::debuginfo::{DebugInfoBuilderMethods, DebugInfoCodegenMethods}; | |
| pub use self::declare::PreDefineCodegenMethods; | |
| pub use self::intrinsic::IntrinsicCallBuilderMethods; | |
| pub use self::misc::MiscCodegenMethods; | |
| pub use self::statics::{StaticBuilderMethods, StaticCodegenMethods}; | |
| pub use self::type_::{ | |
| ArgAbiBuilderMethods, BaseTypeCodegenMethods, DerivedTypeCodegenMethods, | |
| LayoutTypeCodegenMethods, TypeCodegenMethods, TypeMembershipCodegenMethods, | |
| }; | |
| pub use self::write::{ModuleBufferMethods, WriteBackendMethods}; | |
| pub trait CodegenObject = Copy + fmt::Debug; | |
| pub trait CodegenMethods<'tcx> = LayoutOf<'tcx, LayoutOfResult = TyAndLayout<'tcx>> | |
| + FnAbiOf<'tcx, FnAbiOfResult = &'tcx FnAbi<'tcx, Ty<'tcx>>> | |
| + TypeCodegenMethods<'tcx> | |
| + ConstCodegenMethods | |
| + StaticCodegenMethods | |
| + DebugInfoCodegenMethods<'tcx> | |
| + AsmCodegenMethods<'tcx> | |
| + PreDefineCodegenMethods<'tcx>; |