1 //===-- DIERef.cpp ----------------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #include "DIERef.h"
11 #include "DWARFCompileUnit.h"
12 #include "DWARFFormValue.h"
13 
14 DIERef::DIERef() :
15     cu_offset(DW_INVALID_OFFSET),
16     die_offset(DW_INVALID_OFFSET)
17 {}
18 
19 DIERef::DIERef(dw_offset_t d) :
20     cu_offset(DW_INVALID_OFFSET),
21     die_offset(d)
22 {}
23 
24 DIERef::DIERef(dw_offset_t c, dw_offset_t d) :
25     cu_offset(c),
26     die_offset(d)
27 {}
28 
29 DIERef::DIERef(lldb::user_id_t uid) :
30     cu_offset(uid>>32),
31     die_offset(uid&0xffffffff)
32 {}
33 
34 DIERef::DIERef(const DWARFFormValue& form_value) :
35     cu_offset(DW_INVALID_OFFSET),
36     die_offset(DW_INVALID_OFFSET)
37 {
38     if (form_value.IsValid())
39     {
40         const DWARFCompileUnit* dwarf_cu = form_value.GetCompileUnit();
41         if (dwarf_cu)
42         {
43             if (dwarf_cu->GetBaseObjOffset() != DW_INVALID_OFFSET)
44                 cu_offset = dwarf_cu->GetBaseObjOffset();
45             else
46                 cu_offset = dwarf_cu->GetOffset();
47         }
48         die_offset = form_value.Reference();
49     }
50 }
51 
52 lldb::user_id_t
53 DIERef::GetUID() const
54 {
55     return ((lldb::user_id_t)cu_offset) << 32 | die_offset;
56 }
57