1//===-- ScriptedInterface.h -------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_INTERPRETER_INTERFACES_SCRIPTEDINTERFACE_H
10#define LLDB_INTERPRETER_INTERFACES_SCRIPTEDINTERFACE_H
11
12#include "lldb/Core/StructuredDataImpl.h"
13#include "lldb/Target/ExecutionContext.h"
14#include "lldb/Utility/LLDBLog.h"
15#include "lldb/Utility/Log.h"
16#include "lldb/Utility/UnimplementedError.h"
17#include "lldb/lldb-private.h"
18
19#include "llvm/Support/Compiler.h"
20
21#include <string>
22
23namespace lldb_private {
24class ScriptedInterface {
25public:
26 ScriptedInterface() = default;
27 virtual ~ScriptedInterface() = default;
28
29 StructuredData::GenericSP GetScriptObjectInstance() {
30 return m_object_instance_sp;
31 }
32
33 virtual llvm::SmallVector<llvm::StringLiteral> GetAbstractMethods() const = 0;
34
35 template <typename Ret>
36 static Ret ErrorWithMessage(llvm::StringRef caller_name,
37 llvm::StringRef error_msg, Status &error,
38 LLDBLog log_caterogy = LLDBLog::Process) {
39 LLDB_LOGF(GetLog(log_caterogy), "%s ERROR = %s", caller_name.data(),
40 error_msg.data());
41 std::string full_error_message =
42 llvm::Twine(caller_name + llvm::Twine(" ERROR = ") +
43 llvm::Twine(error_msg))
44 .str();
45 if (const char *detailed_error = error.AsCString())
46 full_error_message +=
47 llvm::Twine(llvm::Twine(" (") + llvm::Twine(detailed_error) +
48 llvm::Twine(")"))
49 .str();
50 error.SetErrorString(full_error_message);
51 return {};
52 }
53
54 template <typename T = StructuredData::ObjectSP>
55 bool CheckStructuredDataObject(llvm::StringRef caller, T obj, Status &error) {
56 if (!obj)
57 return ErrorWithMessage<bool>(caller_name: caller, error_msg: "Null Structured Data object",
58 error);
59
60 if (!obj->IsValid()) {
61 return ErrorWithMessage<bool>(caller_name: caller, error_msg: "Invalid StructuredData object",
62 error);
63 }
64
65 if (error.Fail())
66 return ErrorWithMessage<bool>(caller_name: caller, error_msg: error.AsCString(), error);
67
68 return true;
69 }
70
71protected:
72 StructuredData::GenericSP m_object_instance_sp;
73};
74} // namespace lldb_private
75#endif // LLDB_INTERPRETER_INTERFACES_SCRIPTEDINTERFACE_H
76

source code of lldb/include/lldb/Interpreter/Interfaces/ScriptedInterface.h