124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBInputReader.cpp ---------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-enumerations.h" 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1363094e0bb161580564954dee512955c1c79d3476Greg Clayton#include "lldb/API/SBDebugger.h" 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/API/SBError.h" 1563094e0bb161580564954dee512955c1c79d3476Greg Clayton#include "lldb/API/SBInputReader.h" 167826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice#include "lldb/API/SBStream.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/API/SBStringList.h" 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/InputReader.h" 197826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice#include "lldb/Core/Log.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInputReader::SBInputReader () : 2663094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_sp (), 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_callback_function (NULL), 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_callback_baton (NULL) 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInputReader::SBInputReader (const lldb::InputReaderSP &reader_sp) : 3463094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_sp (reader_sp) 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 36952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 377826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 387826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 39a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBInputReader::SBInputReader (reader_sp=%p) => SBInputReader(%p)", reader_sp.get(), 4061ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice m_opaque_sp.get()); 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInputReader::SBInputReader (const SBInputReader &rhs) : 4463094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_sp (rhs.m_opaque_sp) 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 46952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 477826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 487826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 49a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf("SBInputReader::SBInputReader (rhs.sp=%p) => SBInputReader(%p)", 5061ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice rhs.m_opaque_sp.get(), m_opaque_sp.get()); 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInputReader::~SBInputReader () 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInputReader::PrivateCallback 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner( 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void *baton, 6163094e0bb161580564954dee512955c1c79d3476Greg Clayton InputReader &reader, 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::InputReaderAction notification, 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *bytes, 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t bytes_len 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner) 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBInputReader *sb_reader = (SBInputReader *)baton; 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return sb_reader->m_callback_function (sb_reader->m_callback_baton, 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner sb_reader, 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner notification, 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bytes, 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bytes_len); 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBError 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInputReader::Initialize 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner( 7863094e0bb161580564954dee512955c1c79d3476Greg Clayton SBDebugger &debugger, 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Callback callback_function, 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void *callback_baton, 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::InputReaderGranularity granularity, 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *end_token, 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *prompt, 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool echo 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner) 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 87952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 887826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 897826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 90a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf("SBInputReader(%p)::Initialize (SBDebugger(%p), callback_function=%p, callback_baton=%p, " 9149ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton "granularity=%s, end_token=\"%s\", prompt=\"%s\", echo=%i)", 92a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton m_opaque_sp.get(), 93a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton debugger.get(), 94a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton callback_function, 95a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton callback_baton, 96a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton InputReader::GranularityAsCString (granularity), end_token, prompt, 97a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton echo); 987826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBError sb_error; 10063094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_sp.reset (new InputReader (debugger.ref())); 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_callback_function = callback_function; 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_callback_baton = callback_baton; 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10563094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 10763094e0bb161580564954dee512955c1c79d3476Greg Clayton sb_error.SetError (m_opaque_sp->Initialize (SBInputReader::PrivateCallback, 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner this, 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner granularity, 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner end_token, 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner prompt, 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner echo)); 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (sb_error.Fail()) 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 11763094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_sp.reset (); 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_callback_function = NULL; 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_callback_baton = NULL; 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1227826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 1237826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice { 1247826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice SBStream sstr; 1257826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice sb_error.GetDescription (sstr); 126a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBInputReader(%p)::Initialize (...) => SBError(%p): %s", m_opaque_sp.get(), 12761ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice sb_error.get(), sstr.GetData()); 1287826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice } 1297826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return sb_error; 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInputReader::IsValid () const 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 13663094e0bb161580564954dee512955c1c79d3476Greg Clayton return (m_opaque_sp.get() != NULL); 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst SBInputReader & 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInputReader::operator = (const SBInputReader &rhs) 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (this != &rhs) 14363094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_sp = rhs.m_opaque_sp; 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14763094e0bb161580564954dee512955c1c79d3476Greg ClaytonInputReader * 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInputReader::operator->() const 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 15063094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_sp.get(); 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb::InputReaderSP & 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInputReader::operator *() 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 15663094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_sp; 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst lldb::InputReaderSP & 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInputReader::operator *() const 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 16263094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_sp; 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16563094e0bb161580564954dee512955c1c79d3476Greg ClaytonInputReader * 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInputReader::get() const 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 16863094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_sp.get(); 16963094e0bb161580564954dee512955c1c79d3476Greg Clayton} 17063094e0bb161580564954dee512955c1c79d3476Greg Clayton 17163094e0bb161580564954dee512955c1c79d3476Greg ClaytonInputReader & 17263094e0bb161580564954dee512955c1c79d3476Greg ClaytonSBInputReader::ref() const 17363094e0bb161580564954dee512955c1c79d3476Greg Clayton{ 17463094e0bb161580564954dee512955c1c79d3476Greg Clayton assert (m_opaque_sp.get()); 17563094e0bb161580564954dee512955c1c79d3476Greg Clayton return *m_opaque_sp; 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInputReader::IsDone () const 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 18163094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 18263094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_sp->IsDone(); 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInputReader::SetIsDone (bool value) 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 19063094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 19163094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_sp->SetIsDone (value); 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInputReader::IsActive () const 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 197952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1987826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 1997826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice bool ret_value = false; 20063094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 2017826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice ret_value = m_opaque_sp->IsActive(); 2027826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 2037826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 204a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBInputReader(%p)::IsActive () => %i", m_opaque_sp.get(), ret_value); 2057826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 2067826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice return ret_value; 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerInputReaderGranularity 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInputReader::GetGranularity () 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 21263094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 21363094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_sp->GetGranularity(); 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return eInputReaderGranularityInvalid; 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 217