Initial checkin of lldb code from internal Apple repo.


git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@105619 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Symbol/Declaration.cpp b/source/Symbol/Declaration.cpp
new file mode 100644
index 0000000..a31a304
--- /dev/null
+++ b/source/Symbol/Declaration.cpp
@@ -0,0 +1,172 @@
+//===-- Declaration.cpp -----------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/Symbol/Declaration.h"
+#include "lldb/Core/Stream.h"
+
+using namespace lldb_private;
+
+Declaration::Declaration() :
+    m_file(),
+    m_line(0),
+    m_column(0)
+{
+}
+
+Declaration::Declaration(const FileSpec& f, uint32_t l, uint32_t c) :
+    m_file(f),
+    m_line(l),
+    m_column(c)
+{
+}
+
+Declaration::Declaration(const Declaration& rhs) :
+    m_file(rhs.m_file),
+    m_line(rhs.m_line),
+    m_column(rhs.m_column)
+{
+}
+
+Declaration::Declaration(const Declaration* decl_ptr) :
+    m_file(),
+    m_line(0),
+    m_column(0)
+{
+    if (decl_ptr != NULL)
+        *this = *decl_ptr;
+}
+
+bool
+Declaration::IsValid() const
+{
+    return m_file && m_line != 0;
+}
+
+void
+Declaration::Clear()
+{
+    m_file.Clear();
+    m_line= 0;
+    m_column = 0;
+}
+
+void
+Declaration::Dump(Stream *s) const
+{
+    if (m_file)
+    {
+        *s << ", decl = '" << m_file;
+        if (m_line > 0)
+            s->Printf(":%u", m_line);
+        if (m_column > 0)
+            s->Printf(":%u", m_column);
+        s->PutChar('\'');
+    }
+    else
+    {
+        if (m_line > 0)
+        {
+            s->Printf(", line = %u", m_line);
+            if (m_column > 0)
+                s->Printf(":%u", m_column);
+        }
+        else if (m_column > 0)
+            s->Printf(", column = %u", m_column);
+    }
+}
+
+void
+Declaration::DumpStopContext (Stream *s) const
+{
+    if (m_file)
+    {
+        if (s->GetVerbose())
+            *s << m_file;
+        else
+            m_file.GetFilename().Dump(s);
+
+        if (m_line > 0)
+            s->Printf(":%u", m_line);
+        if (m_column > 0)
+            s->Printf(":%u", m_column);
+    }
+    else
+    {
+        s->Printf(" line %u", m_line);
+        if (m_column > 0)
+            s->Printf(":%u", m_column);
+    }
+}
+
+uint32_t
+Declaration::GetColumn() const
+{
+    return m_column;
+}
+
+FileSpec&
+Declaration::GetFile()
+{
+    return m_file;
+}
+
+const FileSpec&
+Declaration::GetFile() const
+{
+    return m_file;
+}
+
+uint32_t
+Declaration::GetLine() const
+{
+    return m_line;
+}
+
+size_t
+Declaration::MemorySize() const
+{
+    return sizeof(Declaration);
+}
+
+void
+Declaration::SetColumn(uint32_t col)
+{
+    m_column = col;
+}
+
+void
+Declaration::SetFile(const FileSpec& file)
+{
+    m_file = file;
+}
+
+void
+Declaration::SetLine(uint32_t line)
+{
+    m_line = line;
+}
+
+
+
+int
+Declaration::Compare(const Declaration& a, const Declaration& b)
+{
+    int result = FileSpec::Compare(a.m_file, b.m_file, true);
+    if (result)
+        return result;
+    if (a.m_line < b.m_line)
+        return -1;
+    else if (a.m_line > b.m_line)
+        return 1;
+    if (a.m_column < b.m_column)
+        return -1;
+    else if (a.m_column > b.m_column)
+        return 1;
+    return 0;
+}