3 use super::metadata::{unknown_file_metadata, UNKNOWN_LINE_NUMBER};
4 use super::utils::{debug_context, DIB};
5 use rustc::ty::{self, Instance};
7 use crate::common::CodegenCx;
9 use crate::llvm::debuginfo::DIScope;
10 use rustc::hir::map::DefPathData;
11 use rustc_hir::def_id::DefId;
13 use rustc_data_structures::small_c_str::SmallCStr;
15 pub fn mangled_name_of_instance<'a, 'tcx>(
16 cx: &CodegenCx<'a, 'tcx>,
17 instance: Instance<'tcx>,
20 tcx.symbol_name(instance)
23 pub fn item_namespace(cx: &CodegenCx<'ll, '_>, def_id: DefId) -> &'ll DIScope {
24 if let Some(&scope) = debug_context(cx).namespace_map.borrow().get(&def_id) {
28 let def_key = cx.tcx.def_key(def_id);
29 let parent_scope = def_key
31 .map(|parent| item_namespace(cx, DefId { krate: def_id.krate, index: parent }));
33 let namespace_name = match def_key.disambiguated_data.data {
34 DefPathData::CrateRoot => cx.tcx.crate_name(def_id.krate),
35 data => data.as_symbol(),
38 let namespace_name = SmallCStr::new(&namespace_name.as_str());
41 llvm::LLVMRustDIBuilderCreateNameSpace(
44 namespace_name.as_ptr(),
45 unknown_file_metadata(cx),
50 debug_context(cx).namespace_map.borrow_mut().insert(def_id, scope);