use super::BackendTypes; use crate::debuginfo::{FunctionDebugContext, MirDebugScope, VariableAccess, VariableKind}; use rustc::hir::def_id::CrateNum; use rustc::mir; use rustc::ty::{self, Ty}; use rustc_data_structures::indexed_vec::IndexVec; use rustc_mir::monomorphize::Instance; use syntax::ast::Name; use syntax_pos::{SourceFile, Span}; pub trait DebugInfoMethods<'tcx>: BackendTypes { fn create_vtable_metadata(&self, ty: Ty<'tcx>, vtable: Self::Value); /// Creates the function-specific debug context. /// /// Returns the FunctionDebugContext for the function which holds state needed /// for debug info creation. The function may also return another variant of the /// FunctionDebugContext enum which indicates why no debuginfo should be created /// for the function. fn create_function_debug_context( &self, instance: Instance<'tcx>, sig: ty::FnSig<'tcx>, llfn: Self::Value, mir: &mir::Mir<'_>, ) -> FunctionDebugContext; fn create_mir_scopes( &self, mir: &mir::Mir<'_>, debug_context: &mut FunctionDebugContext, ) -> IndexVec>; fn extend_scope_to_file( &self, scope_metadata: Self::DIScope, file: &SourceFile, defining_crate: CrateNum, ) -> Self::DIScope; fn debuginfo_finalize(&self); fn debuginfo_upvar_ops_sequence(&self, byte_offset_of_var_in_env: u64) -> [i64; 4]; } pub trait DebugInfoBuilderMethods<'tcx>: BackendTypes { fn declare_local( &mut self, dbg_context: &FunctionDebugContext, variable_name: Name, variable_type: Ty<'tcx>, scope_metadata: Self::DIScope, variable_access: VariableAccess<'_, Self::Value>, variable_kind: VariableKind, span: Span, ); fn set_source_location( &mut self, debug_context: &mut FunctionDebugContext, scope: Option, span: Span, ); fn insert_reference_to_gdb_debug_scripts_section_global(&mut self); fn set_value_name(&mut self, value: Self::Value, name: &str); }