Files
clang-p2996/lldb/source/Plugins/ScriptInterpreter/None/ScriptInterpreterNone.cpp
Zachary Turner 2c1f46dcc6 Convert the ScriptInterpreter system to a plugin-based one.
Previously embedded interpreters were handled as ad-hoc source
files compiled into source/Interpreter.  This made it hard to
disable a specific interpreter, or to add support for other
interpreters and allow the developer to choose which interpreter(s)
were enabled for a particular build.

This patch converts script interpreters over to a plugin-based system.
Script interpreters now live in source/Plugins/ScriptInterpreter, and
the canonical LLDB interpreter, ScriptInterpreterPython, is moved there
as well.

Any new code interfacing with the Python C API must live in this location
from here on out.  Additionally, generic code should never need to
reference or make assumptions about the presence of a specific interpreter
going forward.

Differential Revision: http://reviews.llvm.org/D11431
Reviewed By: Greg Clayton

llvm-svn: 243681
2015-07-30 20:28:07 +00:00

94 lines
2.3 KiB
C++

//===-- ScriptInterpreterNone.cpp -------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "ScriptInterpreterNone.h"
#include "lldb/Core/Debugger.h"
#include "lldb/Core/PluginManager.h"
#include "lldb/Core/Stream.h"
#include "lldb/Core/StreamFile.h"
#include "lldb/Core/StringList.h"
#include "lldb/Interpreter/CommandInterpreter.h"
#include <mutex>
using namespace lldb;
using namespace lldb_private;
ScriptInterpreterNone::ScriptInterpreterNone(CommandInterpreter &interpreter)
: ScriptInterpreter(interpreter, eScriptLanguageNone)
{
}
ScriptInterpreterNone::~ScriptInterpreterNone()
{
}
bool
ScriptInterpreterNone::ExecuteOneLine(const char *command, CommandReturnObject *, const ExecuteScriptOptions &)
{
m_interpreter.GetDebugger().GetErrorFile()->PutCString(
"error: there is no embedded script interpreter in this mode.\n");
return false;
}
void
ScriptInterpreterNone::ExecuteInterpreterLoop()
{
m_interpreter.GetDebugger().GetErrorFile()->PutCString(
"error: there is no embedded script interpreter in this mode.\n");
}
void
ScriptInterpreterNone::Initialize()
{
static std::once_flag g_once_flag;
std::call_once(g_once_flag, []()
{
PluginManager::RegisterPlugin(GetPluginNameStatic(), GetPluginDescriptionStatic(),
lldb::eScriptLanguageNone, CreateInstance);
});
}
void
ScriptInterpreterNone::Terminate()
{
}
lldb::ScriptInterpreterSP
ScriptInterpreterNone::CreateInstance(CommandInterpreter &interpreter)
{
return std::make_shared<ScriptInterpreterNone>(interpreter);
}
lldb_private::ConstString
ScriptInterpreterNone::GetPluginNameStatic()
{
static ConstString g_name("script-none");
return g_name;
}
const char *
ScriptInterpreterNone::GetPluginDescriptionStatic()
{
return "Null script interpreter";
}
lldb_private::ConstString
ScriptInterpreterNone::GetPluginName()
{
return GetPluginNameStatic();
}
uint32_t
ScriptInterpreterNone::GetPluginVersion()
{
return 1;
}