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/Interpreter/CommandObjectCrossref.cpp b/source/Interpreter/CommandObjectCrossref.cpp
new file mode 100644
index 0000000..27b6637
--- /dev/null
+++ b/source/Interpreter/CommandObjectCrossref.cpp
@@ -0,0 +1,92 @@
+//===-- CommandObjectCrossref.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/Interpreter/CommandObjectCrossref.h"
+
+// C Includes
+// C++ Includes
+// Other libraries and framework includes
+// Project includes
+#include "lldb/Interpreter/CommandReturnObject.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+//-------------------------------------------------------------------------
+// CommandObjectCrossref
+//-------------------------------------------------------------------------
+
+CommandObjectCrossref::CommandObjectCrossref
+(
+    const char *name,
+    const char *help,
+    const char *syntax
+) :
+    CommandObject (name, help, syntax),
+    m_crossref_object_types()
+{
+}
+
+CommandObjectCrossref::~CommandObjectCrossref ()
+{
+}
+
+bool
+CommandObjectCrossref::Execute
+(
+    Args& command,
+    CommandContext *context,
+    CommandInterpreter *interpreter,
+    CommandReturnObject &result
+)
+{
+    if (m_crossref_object_types.GetArgumentCount() == 0)
+    {
+        result.AppendErrorWithFormat ("There are no objects for which you can call '%s'.\n", GetCommandName());
+        result.SetStatus (eReturnStatusFailed);
+    }
+    else
+    {
+        GenerateHelpText (result);
+    }
+    return result.Succeeded();
+}
+
+void
+CommandObjectCrossref::AddObject (const char *obj_name)
+{
+    m_crossref_object_types.AppendArgument (obj_name);
+}
+
+const char **
+CommandObjectCrossref::GetObjectTypes () const
+{
+    return m_crossref_object_types.GetConstArgumentVector();
+}
+
+void
+CommandObjectCrossref::GenerateHelpText (CommandReturnObject &result)
+{
+    result.AppendMessage ("This command can be called on the following types of objects:");
+
+    for (int i = 0; i < m_crossref_object_types.GetArgumentCount(); ++i)
+    {
+        const char *obj_name = m_crossref_object_types.GetArgumentAtIndex(i);
+        result.AppendMessageWithFormat ("    %s    (e.g.  '%s %s')\n", obj_name,
+                                        obj_name, GetCommandName());
+    }
+
+    result.SetStatus (eReturnStatusSuccessFinishNoResult);
+}
+
+bool
+CommandObjectCrossref::IsCrossRefObject ()
+{
+    return true;
+}