blob: dc873e365359baaf45069daf5392310442afdf46 [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"
12#include "lldb/Symbol/CompileUnit.h"
13#include "lldb/Symbol/LineEntry.h"
14#include "lldb/Symbol/LineTable.h"
15
16using namespace lldb;
17using namespace lldb_private;
18
19
20SBCompileUnit::SBCompileUnit () :
Greg Clayton63094e02010-06-23 01:19:29 +000021 m_opaque_ptr (NULL)
Chris Lattner24943d22010-06-08 16:52:24 +000022{
23}
24
25SBCompileUnit::SBCompileUnit (lldb_private::CompileUnit *lldb_object_ptr) :
Greg Clayton63094e02010-06-23 01:19:29 +000026 m_opaque_ptr (lldb_object_ptr)
Chris Lattner24943d22010-06-08 16:52:24 +000027{
28}
29
30SBCompileUnit::~SBCompileUnit ()
31{
Greg Clayton63094e02010-06-23 01:19:29 +000032 m_opaque_ptr = NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000033}
34
35SBFileSpec
36SBCompileUnit::GetFileSpec () const
37{
38 SBFileSpec file_spec;
Greg Clayton63094e02010-06-23 01:19:29 +000039 if (m_opaque_ptr)
40 file_spec.SetFileSpec(*m_opaque_ptr);
Chris Lattner24943d22010-06-08 16:52:24 +000041 return file_spec;
42}
43
44uint32_t
45SBCompileUnit::GetNumLineEntries () const
46{
Greg Clayton63094e02010-06-23 01:19:29 +000047 if (m_opaque_ptr)
Chris Lattner24943d22010-06-08 16:52:24 +000048 {
Greg Clayton63094e02010-06-23 01:19:29 +000049 LineTable *line_table = m_opaque_ptr->GetLineTable ();
Chris Lattner24943d22010-06-08 16:52:24 +000050 if (line_table)
51 return line_table->GetSize();
52 }
53 return 0;
54}
55
56SBLineEntry
57SBCompileUnit::GetLineEntryAtIndex (uint32_t idx) const
58{
59 SBLineEntry sb_line_entry;
Greg Clayton63094e02010-06-23 01:19:29 +000060 if (m_opaque_ptr)
Chris Lattner24943d22010-06-08 16:52:24 +000061 {
Greg Clayton63094e02010-06-23 01:19:29 +000062 LineTable *line_table = m_opaque_ptr->GetLineTable ();
Chris Lattner24943d22010-06-08 16:52:24 +000063 if (line_table)
64 {
65 LineEntry line_entry;
66 if (line_table->GetLineEntryAtIndex(idx, line_entry))
67 sb_line_entry.SetLineEntry(line_entry);
68 }
69 }
70 return sb_line_entry;
71}
72
73uint32_t
74SBCompileUnit::FindLineEntryIndex (uint32_t start_idx, uint32_t line, SBFileSpec *inline_file_spec) const
75{
Greg Clayton63094e02010-06-23 01:19:29 +000076 if (m_opaque_ptr)
Chris Lattner24943d22010-06-08 16:52:24 +000077 {
78 FileSpec file_spec;
79 if (inline_file_spec && inline_file_spec->IsValid())
80 file_spec = inline_file_spec->ref();
81 else
Greg Clayton63094e02010-06-23 01:19:29 +000082 file_spec = *m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +000083
Greg Clayton63094e02010-06-23 01:19:29 +000084 return m_opaque_ptr->FindLineEntry (start_idx,
Chris Lattner24943d22010-06-08 16:52:24 +000085 line,
86 inline_file_spec ? inline_file_spec->get() : NULL,
87 NULL);
88 }
89 return UINT32_MAX;
90}
91
92bool
93SBCompileUnit::IsValid () const
94{
Greg Clayton63094e02010-06-23 01:19:29 +000095 return m_opaque_ptr != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000096}
97
98bool
99SBCompileUnit::operator == (const SBCompileUnit &rhs) const
100{
Greg Clayton63094e02010-06-23 01:19:29 +0000101 return m_opaque_ptr == rhs.m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +0000102}
103
104bool
105SBCompileUnit::operator != (const SBCompileUnit &rhs) const
106{
Greg Clayton63094e02010-06-23 01:19:29 +0000107 return m_opaque_ptr != rhs.m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +0000108}
109
110const lldb_private::CompileUnit *
111SBCompileUnit::operator->() const
112{
Greg Clayton63094e02010-06-23 01:19:29 +0000113 return m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +0000114}
115
116const lldb_private::CompileUnit &
117SBCompileUnit::operator*() const
118{
Greg Clayton63094e02010-06-23 01:19:29 +0000119 return *m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +0000120}