]>
Commit | Line | Data |
---|---|---|
54a0048b SL |
1 | // Namespace Handling. |
2 | ||
041b39d2 XL |
3 | use super::metadata::{unknown_file_metadata, UNKNOWN_LINE_NUMBER}; |
4 | use super::utils::{DIB, debug_context}; | |
dc9dc135 | 5 | use rustc::ty::{self, Instance}; |
54a0048b | 6 | |
9fa01778 XL |
7 | use crate::llvm; |
8 | use crate::llvm::debuginfo::DIScope; | |
9 | use crate::common::CodegenCx; | |
54a0048b | 10 | use rustc::hir::def_id::DefId; |
a7813a04 | 11 | use rustc::hir::map::DefPathData; |
54a0048b | 12 | |
b7449926 | 13 | use rustc_data_structures::small_c_str::SmallCStr; |
a7813a04 | 14 | |
ff7c6d11 | 15 | pub 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 | 23 | pub 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 | } |