]> git.proxmox.com Git - rustc.git/blame - src/librustc_codegen_llvm/debuginfo/namespace.rs
New upstream version 1.41.1+dfsg1
[rustc.git] / src / librustc_codegen_llvm / debuginfo / namespace.rs
CommitLineData
54a0048b
SL
1// Namespace Handling.
2
041b39d2
XL
3use super::metadata::{unknown_file_metadata, UNKNOWN_LINE_NUMBER};
4use super::utils::{DIB, debug_context};
dc9dc135 5use rustc::ty::{self, Instance};
54a0048b 6
9fa01778
XL
7use crate::llvm;
8use crate::llvm::debuginfo::DIScope;
9use crate::common::CodegenCx;
54a0048b 10use rustc::hir::def_id::DefId;
a7813a04 11use rustc::hir::map::DefPathData;
54a0048b 12
b7449926 13use rustc_data_structures::small_c_str::SmallCStr;
a7813a04 14
ff7c6d11 15pub fn mangled_name_of_instance<'a, 'tcx>(
2c00a5a8 16 cx: &CodegenCx<'a, 'tcx>,
ff7c6d11
XL
17 instance: Instance<'tcx>,
18) -> ty::SymbolName {
2c00a5a8 19 let tcx = cx.tcx;
ff7c6d11 20 tcx.symbol_name(instance)
a7813a04 21}
54a0048b 22
b7449926 23pub fn item_namespace(cx: &CodegenCx<'ll, '_>, def_id: DefId) -> &'ll DIScope {
2c00a5a8 24 if let Some(&scope) = debug_context(cx).namespace_map.borrow().get(&def_id) {
a7813a04 25 return scope;
54a0048b
SL
26 }
27
2c00a5a8 28 let def_key = cx.tcx.def_key(def_id);
b7449926 29 let parent_scope = def_key.parent.map(|parent| {
2c00a5a8 30 item_namespace(cx, DefId {
a7813a04
XL
31 krate: def_id.krate,
32 index: parent
33 })
34 });
35
36 let namespace_name = match def_key.disambiguated_data.data {
60c5eb7d
XL
37 DefPathData::CrateRoot => cx.tcx.crate_name(def_id.krate),
38 data => data.as_symbol()
a7813a04
XL
39 };
40
60c5eb7d 41 let namespace_name = SmallCStr::new(&namespace_name.as_str());
a7813a04
XL
42
43 let scope = unsafe {
5bcae85e 44 llvm::LLVMRustDIBuilderCreateNameSpace(
2c00a5a8 45 DIB(cx),
a7813a04
XL
46 parent_scope,
47 namespace_name.as_ptr(),
2c00a5a8 48 unknown_file_metadata(cx),
041b39d2 49 UNKNOWN_LINE_NUMBER)
a7813a04
XL
50 };
51
2c00a5a8 52 debug_context(cx).namespace_map.borrow_mut().insert(def_id, scope);
a7813a04 53 scope
54a0048b 54}