With this patch, the only dependency left is from Utility to Host. After this is broken, Utility will finally be standalone. Differential Revision: https://reviews.llvm.org/D29909 llvm-svn: 295088
167 lines
4.5 KiB
C++
167 lines
4.5 KiB
C++
//===-- ValueObjectPrinter.h ---------------------------------------*- C++
|
|
//-*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef lldb_ValueObjectPrinter_h_
|
|
#define lldb_ValueObjectPrinter_h_
|
|
|
|
// C Includes
|
|
// C++ Includes
|
|
|
|
// Other libraries and framework includes
|
|
// Project includes
|
|
#include "lldb/lldb-private.h"
|
|
#include "lldb/lldb-public.h"
|
|
|
|
#include "lldb/Utility/Flags.h"
|
|
|
|
#include "lldb/DataFormatters/DumpValueObjectOptions.h"
|
|
#include "lldb/Symbol/CompilerType.h"
|
|
|
|
//#include <functional>
|
|
//#include <memory>
|
|
//#include <set>
|
|
|
|
namespace lldb_private {
|
|
|
|
class ValueObjectPrinter {
|
|
public:
|
|
ValueObjectPrinter(ValueObject *valobj, Stream *s);
|
|
|
|
ValueObjectPrinter(ValueObject *valobj, Stream *s,
|
|
const DumpValueObjectOptions &options);
|
|
|
|
~ValueObjectPrinter() {}
|
|
|
|
bool PrintValueObject();
|
|
|
|
protected:
|
|
typedef std::set<uint64_t> InstancePointersSet;
|
|
typedef std::shared_ptr<InstancePointersSet> InstancePointersSetSP;
|
|
|
|
InstancePointersSetSP m_printed_instance_pointers;
|
|
|
|
// only this class (and subclasses, if any) should ever be concerned with
|
|
// the depth mechanism
|
|
ValueObjectPrinter(ValueObject *valobj, Stream *s,
|
|
const DumpValueObjectOptions &options,
|
|
const DumpValueObjectOptions::PointerDepth &ptr_depth,
|
|
uint32_t curr_depth,
|
|
InstancePointersSetSP printed_instance_pointers);
|
|
|
|
// we should actually be using delegating constructors here
|
|
// but some versions of GCC still have trouble with those
|
|
void Init(ValueObject *valobj, Stream *s,
|
|
const DumpValueObjectOptions &options,
|
|
const DumpValueObjectOptions::PointerDepth &ptr_depth,
|
|
uint32_t curr_depth,
|
|
InstancePointersSetSP printed_instance_pointers);
|
|
|
|
bool GetMostSpecializedValue();
|
|
|
|
const char *GetDescriptionForDisplay();
|
|
|
|
const char *GetRootNameForDisplay(const char *if_fail = nullptr);
|
|
|
|
bool ShouldPrintValueObject();
|
|
|
|
bool ShouldPrintValidation();
|
|
|
|
bool IsNil();
|
|
|
|
bool IsUninitialized();
|
|
|
|
bool IsPtr();
|
|
|
|
bool IsRef();
|
|
|
|
bool IsInstancePointer();
|
|
|
|
bool IsAggregate();
|
|
|
|
bool PrintValidationMarkerIfNeeded();
|
|
|
|
bool PrintValidationErrorIfNeeded();
|
|
|
|
bool PrintLocationIfNeeded();
|
|
|
|
void PrintDecl();
|
|
|
|
bool CheckScopeIfNeeded();
|
|
|
|
bool ShouldPrintEmptyBrackets(bool value_printed, bool summary_printed);
|
|
|
|
TypeSummaryImpl *GetSummaryFormatter(bool null_if_omitted = true);
|
|
|
|
void GetValueSummaryError(std::string &value, std::string &summary,
|
|
std::string &error);
|
|
|
|
bool PrintValueAndSummaryIfNeeded(bool &value_printed, bool &summary_printed);
|
|
|
|
bool PrintObjectDescriptionIfNeeded(bool value_printed, bool summary_printed);
|
|
|
|
bool
|
|
ShouldPrintChildren(bool is_failed_description,
|
|
DumpValueObjectOptions::PointerDepth &curr_ptr_depth);
|
|
|
|
bool ShouldExpandEmptyAggregates();
|
|
|
|
ValueObject *GetValueObjectForChildrenGeneration();
|
|
|
|
void PrintChildrenPreamble();
|
|
|
|
void PrintChildrenPostamble(bool print_dotdotdot);
|
|
|
|
lldb::ValueObjectSP GenerateChild(ValueObject *synth_valobj, size_t idx);
|
|
|
|
void PrintChild(lldb::ValueObjectSP child_sp,
|
|
const DumpValueObjectOptions::PointerDepth &curr_ptr_depth);
|
|
|
|
uint32_t GetMaxNumChildrenToPrint(bool &print_dotdotdot);
|
|
|
|
void
|
|
PrintChildren(bool value_printed, bool summary_printed,
|
|
const DumpValueObjectOptions::PointerDepth &curr_ptr_depth);
|
|
|
|
void PrintChildrenIfNeeded(bool value_printed, bool summary_printed);
|
|
|
|
bool PrintChildrenOneLiner(bool hide_names);
|
|
|
|
private:
|
|
ValueObject *m_orig_valobj;
|
|
ValueObject *m_valobj;
|
|
Stream *m_stream;
|
|
DumpValueObjectOptions m_options;
|
|
Flags m_type_flags;
|
|
CompilerType m_compiler_type;
|
|
DumpValueObjectOptions::PointerDepth m_ptr_depth;
|
|
uint32_t m_curr_depth;
|
|
LazyBool m_should_print;
|
|
LazyBool m_is_nil;
|
|
LazyBool m_is_uninit;
|
|
LazyBool m_is_ptr;
|
|
LazyBool m_is_ref;
|
|
LazyBool m_is_aggregate;
|
|
LazyBool m_is_instance_ptr;
|
|
std::pair<TypeSummaryImpl *, bool> m_summary_formatter;
|
|
std::string m_value;
|
|
std::string m_summary;
|
|
std::string m_error;
|
|
bool m_val_summary_ok;
|
|
std::pair<TypeValidatorResult, std::string> m_validation;
|
|
|
|
friend struct StringSummaryFormat;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(ValueObjectPrinter);
|
|
};
|
|
|
|
} // namespace lldb_private
|
|
|
|
#endif // lldb_ValueObjectPrinter_h_
|