blob: 427fa3f4f793a038a7ab33b8ec189576bfa7e69e [file] [log] [blame]
//===-- ScriptedInterface.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_INTERPRETER_SCRIPTEDINTERFACE_H
#define LLDB_INTERPRETER_SCRIPTEDINTERFACE_H
#include "lldb/Core/StructuredDataImpl.h"
#include "lldb/Target/ExecutionContext.h"
#include "lldb/Utility/Log.h"
#include "lldb/Utility/Logging.h"
#include "lldb/lldb-private.h"
#include "llvm/Support/Compiler.h"
#include <string>
namespace lldb_private {
class ScriptedInterface {
public:
ScriptedInterface() = default;
virtual ~ScriptedInterface() = default;
virtual StructuredData::GenericSP
CreatePluginObject(llvm::StringRef class_name, ExecutionContext &exe_ctx,
StructuredData::DictionarySP args_sp) = 0;
template <typename Ret>
Ret ErrorWithMessage(llvm::StringRef caller_name, llvm::StringRef error_msg,
Status &error,
uint32_t log_caterogy = LIBLLDB_LOG_PROCESS) {
LLDB_LOGF(GetLogIfAllCategoriesSet(log_caterogy), "%s ERROR = %s",
caller_name.data(), error_msg.data());
error.SetErrorString(llvm::Twine(caller_name + llvm::Twine(" ERROR = ") +
llvm::Twine(error_msg))
.str());
return {};
}
template <typename T = StructuredData::ObjectSP>
bool CheckStructuredDataObject(llvm::StringRef caller, T obj, Status &error) {
if (!obj) {
return ErrorWithMessage<bool>(caller,
llvm::Twine("Null StructuredData object (" +
llvm::Twine(error.AsCString()) +
llvm::Twine(")."))
.str(),
error);
}
if (!obj->IsValid()) {
return ErrorWithMessage<bool>(
caller,
llvm::Twine("Invalid StructuredData object (" +
llvm::Twine(error.AsCString()) + llvm::Twine(")."))
.str(),
error);
}
if (error.Fail())
return ErrorWithMessage<bool>(caller, error.AsCString(), error);
return true;
}
protected:
StructuredData::GenericSP m_object_instance_sp;
};
} // namespace lldb_private
#endif // LLDB_INTERPRETER_SCRIPTEDINTERFACE_H