
This patch enforces that every scripted object implements all the necessary abstract methods. Every scripted affordance language interface can implement a list of abstract methods name that checked when the object is instanciated. Since some scripting affordances implementations can be derived from template base classes, we can't check the object dictionary since it will contain the definition of the base class, so instead, this checks the scripting class dictionary. Previously, for the various python interfaces, we used `ABC.abstractmethod` decorators but this is too language specific and doesn't work for scripting affordances that are not derived from template base classes (i.e OperatingSystem, ScriptedThreadPlan, ...), so this patch provides generic/language-agnostic checks for every scripted affordance. Signed-off-by: Med Ismail Bennani <ismail@bennani.ma>
58 lines
2.0 KiB
C++
58 lines
2.0 KiB
C++
//===-- ScriptedThreadPythonInterface.h ------------------------*- 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_INTERFACES_SCRIPTEDTHREADPYTHONINTERFACE_H
|
|
#define LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_INTERFACES_SCRIPTEDTHREADPYTHONINTERFACE_H
|
|
|
|
#include "lldb/Host/Config.h"
|
|
|
|
#if LLDB_ENABLE_PYTHON
|
|
|
|
#include "ScriptedPythonInterface.h"
|
|
#include "lldb/Interpreter/Interfaces/ScriptedThreadInterface.h"
|
|
#include <optional>
|
|
|
|
namespace lldb_private {
|
|
class ScriptedThreadPythonInterface : public ScriptedThreadInterface,
|
|
public ScriptedPythonInterface {
|
|
public:
|
|
ScriptedThreadPythonInterface(ScriptInterpreterPythonImpl &interpreter);
|
|
|
|
llvm::Expected<StructuredData::GenericSP>
|
|
CreatePluginObject(llvm::StringRef class_name, ExecutionContext &exe_ctx,
|
|
StructuredData::DictionarySP args_sp,
|
|
StructuredData::Generic *script_obj = nullptr) override;
|
|
|
|
llvm::SmallVector<llvm::StringLiteral> GetAbstractMethods() const override {
|
|
return llvm::SmallVector<llvm::StringLiteral>(
|
|
{"get_stop_reason", "get_register_context"});
|
|
}
|
|
|
|
lldb::tid_t GetThreadID() override;
|
|
|
|
std::optional<std::string> GetName() override;
|
|
|
|
lldb::StateType GetState() override;
|
|
|
|
std::optional<std::string> GetQueue() override;
|
|
|
|
StructuredData::DictionarySP GetStopReason() override;
|
|
|
|
StructuredData::ArraySP GetStackFrames() override;
|
|
|
|
StructuredData::DictionarySP GetRegisterInfo() override;
|
|
|
|
std::optional<std::string> GetRegisterContext() override;
|
|
|
|
StructuredData::ArraySP GetExtendedInfo() override;
|
|
};
|
|
} // namespace lldb_private
|
|
|
|
#endif // LLDB_ENABLE_PYTHON
|
|
#endif // LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_INTERFACES_SCRIPTEDTHREADPYTHONINTERFACE_H
|