forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			217 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			217 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C++
		
	
	
	
//===-- 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)
 | 
						|
{
 | 
						|
    LogSP 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)
 | 
						|
{
 | 
						|
    LogSP 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
 | 
						|
)
 | 
						|
{
 | 
						|
    LogSP 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
 | 
						|
{
 | 
						|
    LogSP 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;
 | 
						|
}
 |