|  | //! 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}; | 
|  | 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, ThinBufferMethods, 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>; |