mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-21 04:25:45 -04:00

As discussed in D61090, there's no good reason for the script interpreter to depend on the command interpreter. When looking at the code, it becomes clear that we mostly use the command interpreter as a way to access the debugger. Hence, it makes more sense to just pass that to the script interpreter directly. This is part 1 out of 2. I have another patch in the pipeline that changes the ownership of the script interpreter to the debugger as well, but I didn't get around to finish that today. Differential revision: https://reviews.llvm.org/D61172 llvm-svn: 359330
97 lines
3.0 KiB
C++
97 lines
3.0 KiB
C++
//===-- ScriptInterpreter.cpp -----------------------------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "lldb/Interpreter/ScriptInterpreter.h"
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string>
|
|
|
|
#include "lldb/Host/PseudoTerminal.h"
|
|
#include "lldb/Interpreter/CommandReturnObject.h"
|
|
#include "lldb/Utility/Status.h"
|
|
#include "lldb/Utility/Stream.h"
|
|
#include "lldb/Utility/StringList.h"
|
|
|
|
using namespace lldb;
|
|
using namespace lldb_private;
|
|
|
|
ScriptInterpreter::ScriptInterpreter(Debugger &debugger,
|
|
lldb::ScriptLanguage script_lang)
|
|
: m_debugger(debugger), m_script_lang(script_lang) {}
|
|
|
|
ScriptInterpreter::~ScriptInterpreter() {}
|
|
|
|
void ScriptInterpreter::CollectDataForBreakpointCommandCallback(
|
|
std::vector<BreakpointOptions *> &bp_options_vec,
|
|
CommandReturnObject &result) {
|
|
result.SetStatus(eReturnStatusFailed);
|
|
result.AppendError(
|
|
"ScriptInterpreter::GetScriptCommands(StringList &) is not implemented.");
|
|
}
|
|
|
|
void ScriptInterpreter::CollectDataForWatchpointCommandCallback(
|
|
WatchpointOptions *bp_options, CommandReturnObject &result) {
|
|
result.SetStatus(eReturnStatusFailed);
|
|
result.AppendError(
|
|
"ScriptInterpreter::GetScriptCommands(StringList &) is not implemented.");
|
|
}
|
|
|
|
std::string ScriptInterpreter::LanguageToString(lldb::ScriptLanguage language) {
|
|
std::string return_value;
|
|
|
|
switch (language) {
|
|
case eScriptLanguageNone:
|
|
return_value = "None";
|
|
break;
|
|
case eScriptLanguagePython:
|
|
return_value = "Python";
|
|
break;
|
|
case eScriptLanguageUnknown:
|
|
return_value = "Unknown";
|
|
break;
|
|
}
|
|
|
|
return return_value;
|
|
}
|
|
|
|
lldb::ScriptLanguage
|
|
ScriptInterpreter::StringToLanguage(const llvm::StringRef &language) {
|
|
if (language.equals_lower(LanguageToString(eScriptLanguageNone)))
|
|
return eScriptLanguageNone;
|
|
if (language.equals_lower(LanguageToString(eScriptLanguagePython)))
|
|
return eScriptLanguagePython;
|
|
return eScriptLanguageUnknown;
|
|
}
|
|
|
|
Status ScriptInterpreter::SetBreakpointCommandCallback(
|
|
std::vector<BreakpointOptions *> &bp_options_vec,
|
|
const char *callback_text) {
|
|
Status return_error;
|
|
for (BreakpointOptions *bp_options : bp_options_vec) {
|
|
return_error = SetBreakpointCommandCallback(bp_options, callback_text);
|
|
if (return_error.Success())
|
|
break;
|
|
}
|
|
return return_error;
|
|
}
|
|
|
|
void ScriptInterpreter::SetBreakpointCommandCallbackFunction(
|
|
std::vector<BreakpointOptions *> &bp_options_vec,
|
|
const char *function_name) {
|
|
for (BreakpointOptions *bp_options : bp_options_vec) {
|
|
SetBreakpointCommandCallbackFunction(bp_options, function_name);
|
|
}
|
|
}
|
|
|
|
std::unique_ptr<ScriptInterpreterLocker>
|
|
ScriptInterpreter::AcquireInterpreterLock() {
|
|
return std::unique_ptr<ScriptInterpreterLocker>(
|
|
new ScriptInterpreterLocker());
|
|
}
|