blob: 24a686d889e1f53add25e20eca6f544829daae4a [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- SBCompileUnit.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 "lldb/API/SBCompileUnit.h"
11#include "lldb/API/SBLineEntry.h"
Caroline Tice98f930f2010-09-20 05:20:02 +000012#include "lldb/API/SBStream.h"
Chris Lattner24943d22010-06-08 16:52:24 +000013#include "lldb/Symbol/CompileUnit.h"
14#include "lldb/Symbol/LineEntry.h"
15#include "lldb/Symbol/LineTable.h"
16
17using namespace lldb;
18using namespace lldb_private;
19
20
21SBCompileUnit::SBCompileUnit () :
Greg Clayton63094e02010-06-23 01:19:29 +000022 m_opaque_ptr (NULL)
Chris Lattner24943d22010-06-08 16:52:24 +000023{
24}
25
26SBCompileUnit::SBCompileUnit (lldb_private::CompileUnit *lldb_object_ptr) :
Greg Clayton63094e02010-06-23 01:19:29 +000027 m_opaque_ptr (lldb_object_ptr)
Chris Lattner24943d22010-06-08 16:52:24 +000028{
29}
30
31SBCompileUnit::~SBCompileUnit ()
32{
Greg Clayton63094e02010-06-23 01:19:29 +000033 m_opaque_ptr = NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000034}
35
36SBFileSpec
37SBCompileUnit::GetFileSpec () const
38{
39 SBFileSpec file_spec;
Greg Clayton63094e02010-06-23 01:19:29 +000040 if (m_opaque_ptr)
41 file_spec.SetFileSpec(*m_opaque_ptr);
Chris Lattner24943d22010-06-08 16:52:24 +000042 return file_spec;
43}
44
45uint32_t
46SBCompileUnit::GetNumLineEntries () const
47{
Greg Clayton63094e02010-06-23 01:19:29 +000048 if (m_opaque_ptr)
Chris Lattner24943d22010-06-08 16:52:24 +000049 {
Greg Clayton63094e02010-06-23 01:19:29 +000050 LineTable *line_table = m_opaque_ptr->GetLineTable ();
Chris Lattner24943d22010-06-08 16:52:24 +000051 if (line_table)
52 return line_table->GetSize();
53 }
54 return 0;
55}
56
57SBLineEntry
58SBCompileUnit::GetLineEntryAtIndex (uint32_t idx) const
59{
60 SBLineEntry sb_line_entry;
Greg Clayton63094e02010-06-23 01:19:29 +000061 if (m_opaque_ptr)
Chris Lattner24943d22010-06-08 16:52:24 +000062 {
Greg Clayton63094e02010-06-23 01:19:29 +000063 LineTable *line_table = m_opaque_ptr->GetLineTable ();
Chris Lattner24943d22010-06-08 16:52:24 +000064 if (line_table)
65 {
66 LineEntry line_entry;
67 if (line_table->GetLineEntryAtIndex(idx, line_entry))
68 sb_line_entry.SetLineEntry(line_entry);
69 }
70 }
71 return sb_line_entry;
72}
73
74uint32_t
75SBCompileUnit::FindLineEntryIndex (uint32_t start_idx, uint32_t line, SBFileSpec *inline_file_spec) const
76{
Greg Clayton63094e02010-06-23 01:19:29 +000077 if (m_opaque_ptr)
Chris Lattner24943d22010-06-08 16:52:24 +000078 {
79 FileSpec file_spec;
80 if (inline_file_spec && inline_file_spec->IsValid())
81 file_spec = inline_file_spec->ref();
82 else
Greg Clayton63094e02010-06-23 01:19:29 +000083 file_spec = *m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +000084
Greg Clayton63094e02010-06-23 01:19:29 +000085 return m_opaque_ptr->FindLineEntry (start_idx,
Chris Lattner24943d22010-06-08 16:52:24 +000086 line,
87 inline_file_spec ? inline_file_spec->get() : NULL,
88 NULL);
89 }
90 return UINT32_MAX;
91}
92
93bool
94SBCompileUnit::IsValid () const
95{
Greg Clayton63094e02010-06-23 01:19:29 +000096 return m_opaque_ptr != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000097}
98
99bool
100SBCompileUnit::operator == (const SBCompileUnit &rhs) const
101{
Greg Clayton63094e02010-06-23 01:19:29 +0000102 return m_opaque_ptr == rhs.m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +0000103}
104
105bool
106SBCompileUnit::operator != (const SBCompileUnit &rhs) const
107{
Greg Clayton63094e02010-06-23 01:19:29 +0000108 return m_opaque_ptr != rhs.m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +0000109}
110
111const lldb_private::CompileUnit *
112SBCompileUnit::operator->() const
113{
Greg Clayton63094e02010-06-23 01:19:29 +0000114 return m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +0000115}
116
117const lldb_private::CompileUnit &
118SBCompileUnit::operator*() const
119{
Greg Clayton63094e02010-06-23 01:19:29 +0000120 return *m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +0000121}
Caroline Tice98f930f2010-09-20 05:20:02 +0000122
123bool
124SBCompileUnit::GetDescription (SBStream &description)
125{
126 if (m_opaque_ptr)
127 {
128 m_opaque_ptr->Dump (description.get(), false);
129 }
130 else
131 description.Printf ("No Value");
132
133 return true;
134}
135
136PyObject *
137SBCompileUnit::__repr__ ()
138{
139 SBStream description;
140 description.ref();
141 GetDescription (description);
142 return PyString_FromString (description.GetData());
143}