summaryrefslogtreecommitdiffstats
path: root/lldb/source/API
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2014-01-27 23:43:24 +0000
committerGreg Clayton <gclayton@apple.com>2014-01-27 23:43:24 +0000
commit44d937820b451296f80449ac3de296345e80f183 (patch)
tree00d14538eded9f7e8bd075128d6ad5fd5ac1caed /lldb/source/API
parentf1cb16e481a60dbac58affcf8c8e423dac3937cb (diff)
downloadbcm5719-llvm-44d937820b451296f80449ac3de296345e80f183.tar.gz
bcm5719-llvm-44d937820b451296f80449ac3de296345e80f183.zip
Merging the iohandler branch back into main.
The many many benefits include: 1 - Input/Output/Error streams are now handled as real streams not a push style input 2 - auto completion in python embedded interpreter 3 - multi-line input for "script" and "expression" commands now allow you to edit previous/next lines using up and down arrow keys and this makes multi-line input actually a viable thing to use 4 - it is now possible to use curses to drive LLDB (please try the "gui" command) We will need to deal with and fix any buildbot failures and tests and arise now that input/output and error are correctly hooked up in all cases. llvm-svn: 200263
Diffstat (limited to 'lldb/source/API')
-rw-r--r--lldb/source/API/CMakeLists.txt1
-rw-r--r--lldb/source/API/SBCommandInterpreter.cpp16
-rw-r--r--lldb/source/API/SBDebugger.cpp112
-rw-r--r--lldb/source/API/SBInputReader.cpp216
4 files changed, 72 insertions, 273 deletions
diff --git a/lldb/source/API/CMakeLists.txt b/lldb/source/API/CMakeLists.txt
index 560167e2853..a626f614d0b 100644
--- a/lldb/source/API/CMakeLists.txt
+++ b/lldb/source/API/CMakeLists.txt
@@ -21,7 +21,6 @@ add_lldb_library(lldbAPI
SBFrame.cpp
SBFunction.cpp
SBHostOS.cpp
- SBInputReader.cpp
SBInstruction.cpp
SBInstructionList.cpp
SBLineEntry.cpp
diff --git a/lldb/source/API/SBCommandInterpreter.cpp b/lldb/source/API/SBCommandInterpreter.cpp
index ac77e2e4112..f1faa13ba98 100644
--- a/lldb/source/API/SBCommandInterpreter.cpp
+++ b/lldb/source/API/SBCommandInterpreter.cpp
@@ -107,6 +107,22 @@ SBCommandInterpreter::AliasExists (const char *cmd)
return false;
}
+bool
+SBCommandInterpreter::IsActive ()
+{
+ if (m_opaque_ptr)
+ return m_opaque_ptr->IsActive ();
+ return false;
+}
+
+const char *
+SBCommandInterpreter::GetIOHandlerControlSequence(char ch)
+{
+ if (m_opaque_ptr)
+ return m_opaque_ptr->GetDebugger().GetTopIOHandlerControlSequence (ch).GetCString();
+ return NULL;
+}
+
lldb::ReturnStatus
SBCommandInterpreter::HandleCommand (const char *command_line, SBCommandReturnObject &result, bool add_to_history)
{
diff --git a/lldb/source/API/SBDebugger.cpp b/lldb/source/API/SBDebugger.cpp
index 10c0b7dea20..8d6887a6c28 100644
--- a/lldb/source/API/SBDebugger.cpp
+++ b/lldb/source/API/SBDebugger.cpp
@@ -20,7 +20,6 @@
#include "lldb/API/SBError.h"
#include "lldb/API/SBEvent.h"
#include "lldb/API/SBFrame.h"
-#include "lldb/API/SBInputReader.h"
#include "lldb/API/SBProcess.h"
#include "lldb/API/SBSourceManager.h"
#include "lldb/API/SBStream.h"
@@ -37,6 +36,7 @@
#include "lldb/Core/Debugger.h"
#include "lldb/Core/State.h"
+#include "lldb/Core/StreamFile.h"
#include "lldb/DataFormatters/DataVisualization.h"
#include "lldb/Host/DynamicLibrary.h"
#include "lldb/Interpreter/Args.h"
@@ -49,6 +49,29 @@ using namespace lldb;
using namespace lldb_private;
+SBInputReader::SBInputReader()
+{
+}
+SBInputReader::~SBInputReader()
+{
+}
+
+SBError
+SBInputReader::Initialize(lldb::SBDebugger& sb_debugger, unsigned long (*)(void*, lldb::SBInputReader*, lldb::InputReaderAction, char const*, unsigned long), void*, lldb::InputReaderGranularity, char const*, char const*, bool)
+{
+ return SBError();
+}
+
+void
+SBInputReader::SetIsDone(bool)
+{
+}
+bool
+SBInputReader::IsActive() const
+{
+ return false;
+}
+
static lldb::DynamicLibrarySP
LoadPlugin (const lldb::DebuggerSP &debugger_sp, const FileSpec& spec, Error& error)
{
@@ -111,7 +134,7 @@ SBDebugger::Clear ()
log->Printf ("SBDebugger(%p)::Clear ()", m_opaque_sp.get());
if (m_opaque_sp)
- m_opaque_sp->CleanUpInputReaders ();
+ m_opaque_sp->ClearIOHandlers ();
m_opaque_sp.reset();
}
@@ -309,7 +332,11 @@ FILE *
SBDebugger::GetInputFileHandle ()
{
if (m_opaque_sp)
- return m_opaque_sp->GetInputFile().GetStream();
+ {
+ StreamFileSP stream_file_sp (m_opaque_sp->GetInputFile());
+ if (stream_file_sp)
+ return stream_file_sp->GetFile().GetStream();
+ }
return NULL;
}
@@ -317,7 +344,11 @@ FILE *
SBDebugger::GetOutputFileHandle ()
{
if (m_opaque_sp)
- return m_opaque_sp->GetOutputFile().GetStream();
+ {
+ StreamFileSP stream_file_sp (m_opaque_sp->GetOutputFile());
+ if (stream_file_sp)
+ return stream_file_sp->GetFile().GetStream();
+ }
return NULL;
}
@@ -325,7 +356,12 @@ FILE *
SBDebugger::GetErrorFileHandle ()
{
if (m_opaque_sp)
- return m_opaque_sp->GetErrorFile().GetStream();
+ if (m_opaque_sp)
+ {
+ StreamFileSP stream_file_sp (m_opaque_sp->GetErrorFile());
+ if (stream_file_sp)
+ return stream_file_sp->GetFile().GetStream();
+ }
return NULL;
}
@@ -885,17 +921,17 @@ SBDebugger::DispatchInput (void* baton, const void *data, size_t data_len)
void
SBDebugger::DispatchInput (const void *data, size_t data_len)
{
- Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
-
- if (log)
- log->Printf ("SBDebugger(%p)::DispatchInput (data=\"%.*s\", size_t=%" PRIu64 ")",
- m_opaque_sp.get(),
- (int) data_len,
- (const char *) data,
- (uint64_t)data_len);
-
- if (m_opaque_sp)
- m_opaque_sp->DispatchInput ((const char *) data, data_len);
+// Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+//
+// if (log)
+// log->Printf ("SBDebugger(%p)::DispatchInput (data=\"%.*s\", size_t=%" PRIu64 ")",
+// m_opaque_sp.get(),
+// (int) data_len,
+// (const char *) data,
+// (uint64_t)data_len);
+//
+// if (m_opaque_sp)
+// m_opaque_sp->DispatchInput ((const char *) data, data_len);
}
void
@@ -911,54 +947,18 @@ SBDebugger::DispatchInputEndOfFile ()
if (m_opaque_sp)
m_opaque_sp->DispatchInputEndOfFile ();
}
-
-bool
-SBDebugger::InputReaderIsTopReader (const lldb::SBInputReader &reader)
-{
- Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
-
- if (log)
- log->Printf ("SBDebugger(%p)::InputReaderIsTopReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
-
- if (m_opaque_sp && reader.IsValid())
- {
- InputReaderSP reader_sp (*reader);
- return m_opaque_sp->InputReaderIsTopReader (reader_sp);
- }
-
- return false;
-}
-
void
SBDebugger::PushInputReader (SBInputReader &reader)
{
- Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
-
- if (log)
- log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
-
- if (m_opaque_sp && reader.IsValid())
- {
- TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
- Mutex::Locker api_locker;
- if (target_sp)
- api_locker.Lock(target_sp->GetAPIMutex());
- InputReaderSP reader_sp(*reader);
- m_opaque_sp->PushInputReader (reader_sp);
- }
}
void
-SBDebugger::NotifyTopInputReader (InputReaderAction notification)
+SBDebugger::RunCommandInterpreter (bool auto_handle_events,
+ bool spawn_thread)
{
- Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
-
- if (log)
- log->Printf ("SBDebugger(%p)::NotifyTopInputReader (%d)", m_opaque_sp.get(), notification);
-
if (m_opaque_sp)
- m_opaque_sp->NotifyTopInputReader (notification);
+ m_opaque_sp->GetCommandInterpreter().RunCommandInterpreter(auto_handle_events, spawn_thread);
}
void
@@ -1050,7 +1050,7 @@ SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger
if (!value_str.empty())
{
StringList string_list;
- string_list.SplitIntoLines(value_str.c_str(), value_str.size());
+ string_list.SplitIntoLines(value_str);
return SBStringList(&string_list);
}
}
diff --git a/lldb/source/API/SBInputReader.cpp b/lldb/source/API/SBInputReader.cpp
deleted file mode 100644
index 82b75c869f0..00000000000
--- a/lldb/source/API/SBInputReader.cpp
+++ /dev/null
@@ -1,216 +0,0 @@
-//===-- SBInputReader.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/lldb-enumerations.h"
-
-#include "lldb/API/SBDebugger.h"
-#include "lldb/API/SBError.h"
-#include "lldb/API/SBInputReader.h"
-#include "lldb/API/SBStream.h"
-#include "lldb/API/SBStringList.h"
-#include "lldb/Core/InputReader.h"
-#include "lldb/Core/Log.h"
-
-
-using namespace lldb;
-using namespace lldb_private;
-
-SBInputReader::SBInputReader () :
- m_opaque_sp (),
- m_callback_function (NULL),
- m_callback_baton (NULL)
-
-{
-}
-
-SBInputReader::SBInputReader (const lldb::InputReaderSP &reader_sp) :
- m_opaque_sp (reader_sp)
-{
- Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
-
- if (log)
- log->Printf ("SBInputReader::SBInputReader (reader_sp=%p) => SBInputReader(%p)", reader_sp.get(),
- m_opaque_sp.get());
-}
-
-SBInputReader::SBInputReader (const SBInputReader &rhs) :
- m_opaque_sp (rhs.m_opaque_sp)
-{
- Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
-
- if (log)
- log->Printf("SBInputReader::SBInputReader (rhs.sp=%p) => SBInputReader(%p)",
- rhs.m_opaque_sp.get(), m_opaque_sp.get());
-}
-
-SBInputReader::~SBInputReader ()
-{
-}
-
-size_t
-SBInputReader::PrivateCallback
-(
- void *baton,
- InputReader &reader,
- lldb::InputReaderAction notification,
- const char *bytes,
- size_t bytes_len
-)
-{
- SBInputReader *sb_reader = (SBInputReader *)baton;
- return sb_reader->m_callback_function (sb_reader->m_callback_baton,
- sb_reader,
- notification,
- bytes,
- bytes_len);
-}
-
-SBError
-SBInputReader::Initialize
-(
- SBDebugger &debugger,
- Callback callback_function,
- void *callback_baton,
- lldb::InputReaderGranularity granularity,
- const char *end_token,
- const char *prompt,
- bool echo
-)
-{
- Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
-
- if (log)
- log->Printf("SBInputReader(%p)::Initialize (SBDebugger(%p), callback_function=%p, callback_baton=%p, "
- "granularity=%s, end_token=\"%s\", prompt=\"%s\", echo=%i)",
- m_opaque_sp.get(),
- debugger.get(),
- callback_function,
- callback_baton,
- InputReader::GranularityAsCString (granularity), end_token, prompt,
- echo);
-
- SBError sb_error;
- m_opaque_sp.reset (new InputReader (debugger.ref()));
-
- m_callback_function = callback_function;
- m_callback_baton = callback_baton;
-
- if (m_opaque_sp)
- {
- sb_error.SetError (m_opaque_sp->Initialize (SBInputReader::PrivateCallback,
- this,
- granularity,
- end_token,
- prompt,
- echo));
- }
-
- if (sb_error.Fail())
- {
- m_opaque_sp.reset ();
- m_callback_function = NULL;
- m_callback_baton = NULL;
- }
-
- if (log)
- {
- SBStream sstr;
- sb_error.GetDescription (sstr);
- log->Printf ("SBInputReader(%p)::Initialize (...) => SBError(%p): %s", m_opaque_sp.get(),
- sb_error.get(), sstr.GetData());
- }
-
- return sb_error;
-}
-
-bool
-SBInputReader::IsValid () const
-{
- return (m_opaque_sp.get() != NULL);
-}
-
-const SBInputReader &
-SBInputReader::operator = (const SBInputReader &rhs)
-{
- if (this != &rhs)
- m_opaque_sp = rhs.m_opaque_sp;
- return *this;
-}
-
-InputReader *
-SBInputReader::operator->() const
-{
- return m_opaque_sp.get();
-}
-
-lldb::InputReaderSP &
-SBInputReader::operator *()
-{
- return m_opaque_sp;
-}
-
-const lldb::InputReaderSP &
-SBInputReader::operator *() const
-{
- return m_opaque_sp;
-}
-
-InputReader *
-SBInputReader::get() const
-{
- return m_opaque_sp.get();
-}
-
-InputReader &
-SBInputReader::ref() const
-{
- assert (m_opaque_sp.get());
- return *m_opaque_sp;
-}
-
-bool
-SBInputReader::IsDone () const
-{
- if (m_opaque_sp)
- return m_opaque_sp->IsDone();
- else
- return true;
-}
-
-void
-SBInputReader::SetIsDone (bool value)
-{
- if (m_opaque_sp)
- m_opaque_sp->SetIsDone (value);
-}
-
-bool
-SBInputReader::IsActive () const
-{
- Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
-
- bool ret_value = false;
- if (m_opaque_sp)
- ret_value = m_opaque_sp->IsActive();
-
- if (log)
- log->Printf ("SBInputReader(%p)::IsActive () => %i", m_opaque_sp.get(), ret_value);
-
- return ret_value;
-}
-
-InputReaderGranularity
-SBInputReader::GetGranularity ()
-{
- if (m_opaque_sp)
- return m_opaque_sp->GetGranularity();
- else
- return eInputReaderGranularityInvalid;
-}
OpenPOWER on IntegriCloud