//===-- FormatterBytecode.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 // //===----------------------------------------------------------------------===// #include "lldb/DataFormatters/TypeSummary.h" #include "lldb/Symbol/CompilerType.h" namespace lldb_private { namespace FormatterBytecode { enum DataType : uint8_t { Any, String, Int, UInt, Object, Type, Selector }; enum OpCodes : uint8_t { #define DEFINE_OPCODE(OP, MNEMONIC, NAME) op_##NAME = OP, #include "FormatterBytecode.def" #undef DEFINE_OPCODE }; enum Selectors : uint8_t { #define DEFINE_SELECTOR(ID, NAME) sel_##NAME = ID, #include "FormatterBytecode.def" #undef DEFINE_SELECTOR }; enum Signatures : uint8_t { #define DEFINE_SIGNATURE(ID, NAME) sig_##NAME = ID, #include "FormatterBytecode.def" #undef DEFINE_SIGNATURE }; using ControlStackElement = llvm::StringRef; using DataStackElement = std::variant; struct DataStack : public std::vector { DataStack() = default; DataStack(lldb::ValueObjectSP initial_value) : std::vector({initial_value}) {} void Push(DataStackElement el) { push_back(el); } template T Pop() { T el = std::get(back()); pop_back(); return el; } DataStackElement PopAny() { DataStackElement el = back(); pop_back(); return el; } }; llvm::Error Interpret(std::vector &control, DataStack &data, Selectors sel); } // namespace FormatterBytecode std::string toString(FormatterBytecode::OpCodes op); std::string toString(FormatterBytecode::Selectors sel); std::string toString(FormatterBytecode::Signatures sig); } // namespace lldb_private