LLDB mainline
lldb_private::FormatterBytecode Namespace Reference

Classes

struct  DataStack
class  Dictionary

Typedefs

using ControlStackElement = llvm::StringRef
using ControlStack = std::vector<ControlStackElement>
using DictionarySP = std::shared_ptr<Dictionary>
using DataStackElement

Enumerations

enum  DataType : uint8_t {
  Any , String , Int , UInt ,
  Object , Type , Selector , Integer ,
  Dict
}
enum  OpCodes : uint8_t
enum  Selectors : uint8_t
enum  Signatures : uint8_t

Functions

llvm::Error Interpret (ControlStack &control, DataStack &data, Signatures sig)
static llvm::Error FormatImpl (DataStack &data)
 Implement the @format function.
static llvm::Error TypeCheck (llvm::ArrayRef< DataStackElement > data, DataType type)
static llvm::Error TypeCheck (llvm::ArrayRef< DataStackElement > data, DataType type1, DataType type2)
static llvm::Error TypeCheck (llvm::ArrayRef< DataStackElement > data, DataType type1, DataType type2, DataType type3)
template<typename T>
static DataStackElement WrapAPSIntResult (T result, unsigned bit_width, bool is_unsigned)
 Wrap the result of a binary operator applied to two APSInts back into a DataStackElement.
static bool Reaches (const Dictionary *from, const Dictionary *target)
 Returns true if target is transitively reachable via from.

Typedef Documentation

◆ ControlStack

◆ ControlStackElement

Definition at line 54 of file FormatterBytecode.h.

◆ DataStackElement

Initial value:
std::variant<std::string, uint64_t, int64_t, lldb::ValueObjectSP,
Generic representation of a type in a programming language.
std::shared_ptr< Dictionary > DictionarySP
std::shared_ptr< lldb_private::ValueObject > ValueObjectSP

Definition at line 68 of file FormatterBytecode.h.

◆ DictionarySP

Definition at line 64 of file FormatterBytecode.h.

Enumeration Type Documentation

◆ DataType

Enumerator
Any 
String 
Int 

Deprecated: use Integer.

UInt 

Deprecated: use Integer.

Object 
Type 
Selector 
Integer 
Dict 

Definition at line 22 of file FormatterBytecode.h.

◆ OpCodes

Definition at line 36 of file FormatterBytecode.h.

◆ Selectors

Definition at line 42 of file FormatterBytecode.h.

◆ Signatures

Definition at line 48 of file FormatterBytecode.h.

Function Documentation

◆ FormatImpl()

llvm::Error lldb_private::FormatterBytecode::FormatImpl ( DataStack & data)
static

◆ Interpret()

◆ Reaches()

bool lldb_private::FormatterBytecode::Reaches ( const Dictionary * from,
const Dictionary * target )
static

Returns true if target is transitively reachable via from.

Likewise, returns true if they are the same dictionary. This is used to prevent memory leaks caused by retain cycles. Dictionaries can be shared by multiple parents, so each one is visited only once to prevent exponential running time.

Definition at line 227 of file FormatterBytecode.cpp.

Referenced by Interpret().

◆ TypeCheck() [1/3]

llvm::Error lldb_private::FormatterBytecode::TypeCheck ( llvm::ArrayRef< DataStackElement > data,
DataType type )
static

Definition at line 149 of file FormatterBytecode.cpp.

References Any, Dict, Int, Integer, Object, Selector, String, Type, and UInt.

Referenced by TypeCheck(), and TypeCheck().

◆ TypeCheck() [2/3]

llvm::Error lldb_private::FormatterBytecode::TypeCheck ( llvm::ArrayRef< DataStackElement > data,
DataType type1,
DataType type2 )
static

Definition at line 195 of file FormatterBytecode.cpp.

References error(), and TypeCheck().

◆ TypeCheck() [3/3]

llvm::Error lldb_private::FormatterBytecode::TypeCheck ( llvm::ArrayRef< DataStackElement > data,
DataType type1,
DataType type2,
DataType type3 )
static

Definition at line 202 of file FormatterBytecode.cpp.

References error(), and TypeCheck().

◆ WrapAPSIntResult()

template<typename T>
DataStackElement lldb_private::FormatterBytecode::WrapAPSIntResult ( T result,
unsigned bit_width,
bool is_unsigned )
static

Wrap the result of a binary operator applied to two APSInts back into a DataStackElement.

Comparison operators yield bool and need bit_width/ is_unsigned to construct the boolean's APSInt representation; arithmetic operators already yield a correctly-tagged APSInt and ignore them.

Definition at line 214 of file FormatterBytecode.cpp.