Thanks Shafik!
-- Davide On Mon, Sep 17, 2018 at 4:16 PM Shafik Yaghmour via lldb-commits <lldb-commits@lists.llvm.org> wrote: > > Author: shafik > Date: Mon Sep 17 16:15:35 2018 > New Revision: 342424 > > URL: http://llvm.org/viewvc/llvm-project?rev=342424&view=rev > Log: > Revert "[DataFormatters] Add formatter for C++17 std::variant" > > This reverts commit r342421. > > Because it breaks build bot > http://green.lab.llvm.org/green/job/lldb-cmake-clang-5.0.2//418/console > > Removed: > > lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/variant/Makefile > > lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/variant/TestDataFormatterLibcxxVariant.py > > lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/variant/main.cpp > lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp > lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxVariant.h > Modified: > lldb/trunk/lldb.xcodeproj/project.pbxproj > lldb/trunk/source/Plugins/Language/CPlusPlus/CMakeLists.txt > lldb/trunk/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp > lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxx.h > > Modified: lldb/trunk/lldb.xcodeproj/project.pbxproj > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/lldb.xcodeproj/project.pbxproj?rev=342424&r1=342423&r2=342424&view=diff > ============================================================================== > --- lldb/trunk/lldb.xcodeproj/project.pbxproj (original) > +++ lldb/trunk/lldb.xcodeproj/project.pbxproj Mon Sep 17 16:15:35 2018 > @@ -401,8 +401,6 @@ > AF9FF1F71FAA79FE00474976 /* LibCxxQueue.cpp in Sources */ = > {isa = PBXBuildFile; fileRef = AF9FF1F61FAA79FE00474976 /* LibCxxQueue.cpp > */; }; > AF9FF1F51FAA79A400474976 /* LibCxxTuple.cpp in Sources */ = > {isa = PBXBuildFile; fileRef = AF9FF1F41FAA79A400474976 /* LibCxxTuple.cpp > */; }; > 945261C41B9A11FC00BF138D /* LibCxxUnorderedMap.cpp in Sources > */ = {isa = PBXBuildFile; fileRef = 945261BA1B9A11E800BF138D /* > LibCxxUnorderedMap.cpp */; }; > - E414F6F121388F6C00C50BC6 /* LibCxxVariant.cpp in Sources */ = > {isa = PBXBuildFile; fileRef = E414F6F021388F6B00C50BC6 /* LibCxxVariant.cpp > */; }; > - E414F6EE21388F0300C50BC6 /* LibCxxVariant.h in Headers */ = > {isa = PBXBuildFile; fileRef = E414F6ED21388F0200C50BC6 /* LibCxxVariant.h > */; }; > 945261C51B9A11FC00BF138D /* LibCxxVector.cpp in Sources */ = > {isa = PBXBuildFile; fileRef = 945261BB1B9A11E800BF138D /* LibCxxVector.cpp > */; }; > 945261C61B9A11FC00BF138D /* LibStdcpp.cpp in Sources */ = > {isa = PBXBuildFile; fileRef = 945261BC1B9A11E800BF138D /* LibStdcpp.cpp */; > }; > 4CDB8D6E1DBA91B6006C5B13 /* LibStdcppTuple.cpp in Sources */ > = {isa = PBXBuildFile; fileRef = 4CDB8D681DBA91A6006C5B13 /* > LibStdcppTuple.cpp */; }; > @@ -2058,8 +2056,6 @@ > AF9FF1F61FAA79FE00474976 /* LibCxxQueue.cpp */ = {isa = > PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; > name = LibCxxQueue.cpp; path = Language/CPlusPlus/LibCxxQueue.cpp; sourceTree > = "<group>"; }; > AF9FF1F41FAA79A400474976 /* LibCxxTuple.cpp */ = {isa = > PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; > name = LibCxxTuple.cpp; path = Language/CPlusPlus/LibCxxTuple.cpp; sourceTree > = "<group>"; }; > 945261BA1B9A11E800BF138D /* LibCxxUnorderedMap.cpp */ = {isa > = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = > LibCxxUnorderedMap.cpp; path = Language/CPlusPlus/LibCxxUnorderedMap.cpp; > sourceTree = "<group>"; }; > - E414F6F021388F6B00C50BC6 /* LibCxxVariant.cpp */ = {isa = > PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; > name = LibCxxVariant.cpp; path = Language/CPlusPlus/LibCxxVariant.cpp; > sourceTree = "<group>"; }; > - E414F6ED21388F0200C50BC6 /* LibCxxVariant.h */ = {isa = > PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name > = LibCxxVariant.h; path = Language/CPlusPlus/LibCxxVariant.h; sourceTree = > "<group>"; }; > 945261BB1B9A11E800BF138D /* LibCxxVector.cpp */ = {isa = > PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = > LibCxxVector.cpp; path = Language/CPlusPlus/LibCxxVector.cpp; sourceTree = > "<group>"; }; > 945261BC1B9A11E800BF138D /* LibStdcpp.cpp */ = {isa = > PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = > LibStdcpp.cpp; path = Language/CPlusPlus/LibStdcpp.cpp; sourceTree = > "<group>"; }; > 945261BD1B9A11E800BF138D /* LibStdcpp.h */ = {isa = > PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LibStdcpp.h; > path = Language/CPlusPlus/LibStdcpp.h; sourceTree = "<group>"; }; > @@ -6479,8 +6475,6 @@ > AF9FF1F61FAA79FE00474976 /* LibCxxQueue.cpp > */, > AF9FF1F41FAA79A400474976 /* LibCxxTuple.cpp > */, > 945261BA1B9A11E800BF138D /* > LibCxxUnorderedMap.cpp */, > - E414F6ED21388F0200C50BC6 /* LibCxxVariant.h > */, > - E414F6F021388F6B00C50BC6 /* LibCxxVariant.cpp > */, > 945261BB1B9A11E800BF138D /* LibCxxVector.cpp > */, > 945261BD1B9A11E800BF138D /* LibStdcpp.h */, > 945261BC1B9A11E800BF138D /* LibStdcpp.cpp */, > @@ -7087,7 +7081,6 @@ > 6D0F614F1C80AB0C00A4ECEE /* > JavaLanguageRuntime.h in Headers */, > AF27AD561D3603EA00CF2833 /* > DynamicLoaderDarwin.h in Headers */, > AFCB2BBE1BF577F40018B553 /* > PythonExceptionState.h in Headers */, > - E414F6EE21388F0300C50BC6 /* LibCxxVariant.h > in Headers */, > 267F684B1CC02DED0086832B /* ABISysV_s390x.h > in Headers */, > AF8AD6311BEC28A400150209 /* > PlatformAppleWatchSimulator.h in Headers */, > ); > @@ -7943,7 +7936,6 @@ > AF0C112818580CD800C4C45B /* QueueItem.cpp in > Sources */, > AF254E31170CCC33007AE5C9 /* > PlatformDarwinKernel.cpp in Sources */, > 2689004913353E0400698AC0 /* Scalar.cpp in > Sources */, > - E414F6F121388F6C00C50BC6 /* LibCxxVariant.cpp > in Sources */, > 263FDE601A79A01500E68013 /* FormatEntity.cpp > in Sources */, > AF8AD62E1BEC28A400150209 /* > PlatformAppleTVSimulator.cpp in Sources */, > 2689004A13353E0400698AC0 /* SearchFilter.cpp > in Sources */, > > Removed: > lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/variant/Makefile > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/variant/Makefile?rev=342423&view=auto > ============================================================================== > --- > lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/variant/Makefile > (original) > +++ > lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/variant/Makefile > (removed) > @@ -1,7 +0,0 @@ > -LEVEL = ../../../../../make > - > -CXX_SOURCES := main.cpp > - > -USE_LIBCPP := 1 > -include $(LEVEL)/Makefile.rules > -CXXFLAGS += -std=c++17 > > Removed: > lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/variant/TestDataFormatterLibcxxVariant.py > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/variant/TestDataFormatterLibcxxVariant.py?rev=342423&view=auto > ============================================================================== > --- > lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/variant/TestDataFormatterLibcxxVariant.py > (original) > +++ > lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/variant/TestDataFormatterLibcxxVariant.py > (removed) > @@ -1,81 +0,0 @@ > -""" > -Test lldb data formatter subsystem. > -""" > - > -from __future__ import print_function > - > - > -import os > -import time > -import lldb > -from lldbsuite.test.decorators import * > -from lldbsuite.test.lldbtest import * > -from lldbsuite.test import lldbutil > - > -class LibcxxOptionalDataFormatterTestCase(TestBase): > - > - mydir = TestBase.compute_mydir(__file__) > - > - @add_test_categories(["libc++"]) > - ## We are skipping clang version less that 5.0 since this test requires > -std=c++17 > - @skipIf(oslist=no_match(["macosx"]), compiler="clang", > compiler_version=['<', '5.0']) > - ## We are skipping gcc version less that 5.1 since this test requires > -std=c++17 > - @skipIf(compiler="gcc", compiler_version=['<', '5.1']) > - > - def test_with_run_command(self): > - """Test that that file and class static variables display > correctly.""" > - self.build() > - > - (self.target, self.process, _, bkpt) = > lldbutil.run_to_source_breakpoint(self, '// break here', > - lldb.SBFileSpec("main.cpp", False)) > - > - self.runCmd( "frame variable has_variant" ) > - > - output = self.res.GetOutput() > - > - ## The variable has_variant tells us if the test program > - ## detected we have a sufficient libc++ version to support variant > - ## false means we do not and therefore should skip the test > - if output.find("(bool) has_variant = false") != -1 : > - self.skipTest( "std::variant not supported" ) > - > - lldbutil.continue_to_breakpoint(self.process, bkpt) > - > - self.expect("frame variable v1", > - substrs=['v1 = Active Type = int {', > - 'Value = 12', > - '}']) > - > - self.expect("frame variable v1_ref", > - substrs=['v1_ref = Active Type = int : {', > - 'Value = 12', > - '}']) > - > - self.expect("frame variable v_v1", > - substrs=['v_v1 = Active Type = std::__1::variant<int, > double, char> {', > - 'Value = Active Type = int {', > - 'Value = 12', > - '}', > - '}']) > - > - lldbutil.continue_to_breakpoint(self.process, bkpt) > - > - self.expect("frame variable v1", > - substrs=['v1 = Active Type = double {', > - 'Value = 2', > - '}']) > - > - lldbutil.continue_to_breakpoint(self.process, bkpt) > - > - self.expect("frame variable v2", > - substrs=['v2 = Active Type = double {', > - 'Value = 2', > - '}']) > - > - self.expect("frame variable v3", > - substrs=['v3 = Active Type = char {', > - 'Value = \'A\'', > - '}']) > - > - self.expect("frame variable v_no_value", > - substrs=['v_no_value = No Value']) > > Removed: > lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/variant/main.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/variant/main.cpp?rev=342423&view=auto > ============================================================================== > --- > lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/variant/main.cpp > (original) > +++ > lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/variant/main.cpp > (removed) > @@ -1,60 +0,0 @@ > -#include <cstdio> > -#include <string> > -#include <vector> > - > -// If we have libc++ 4.0 or greater we should have <variant> > -// According to libc++ C++1z status page > https://libcxx.llvm.org/cxx1z_status.html > -#if _LIBCPP_VERSION >= 4000 > -#include <variant> > -#define HAVE_VARIANT 1 > -#else > -#define HAVE_VARIANT 0 > -#endif > - > -struct S { > - operator int() { throw 42; } > -} ; > - > - > -int main() > -{ > - bool has_variant = HAVE_VARIANT ; > - > - printf( "%d\n", has_variant ) ; // break here > - > -#if HAVE_VARIANT == 1 > - std::variant<int, double, char> v1; > - std::variant<int, double, char> &v1_ref = v1; > - std::variant<int, double, char> v2; > - std::variant<int, double, char> v3; > - std::variant<std::variant<int,double,char>> v_v1 ; > - std::variant<int, double, char> v_no_value; > - > - v1 = 12; // v contains int > - v_v1 = v1 ; > - int i = std::get<int>(v1); > - printf( "%d\n", i ); // break here > - > - v2 = 2.0 ; > - double d = std::get<double>(v2) ; > - printf( "%f\n", d ); > - > - v3 = 'A' ; > - char c = std::get<char>(v3) ; > - printf( "%d\n", c ); > - > - // Checking v1 above and here to make sure we done maintain the incorrect > - // state when we change its value. > - v1 = 2.0; > - d = std::get<double>(v1) ; > - printf( "%f\n", d ); // break here > - > - try { > - v_no_value.emplace<0>(S()); > - } catch( ... ) {} > - > - printf( "%zu\n", v_no_value.index() ) ; > -#endif > - > - return 0; // break here > -} > > Modified: lldb/trunk/source/Plugins/Language/CPlusPlus/CMakeLists.txt > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/CPlusPlus/CMakeLists.txt?rev=342424&r1=342423&r2=342424&view=diff > ============================================================================== > --- lldb/trunk/source/Plugins/Language/CPlusPlus/CMakeLists.txt (original) > +++ lldb/trunk/source/Plugins/Language/CPlusPlus/CMakeLists.txt Mon Sep 17 > 16:15:35 2018 > @@ -13,7 +13,6 @@ add_lldb_library(lldbPluginCPlusPlusLang > LibCxxQueue.cpp > LibCxxTuple.cpp > LibCxxUnorderedMap.cpp > - LibCxxVariant.cpp > LibCxxVector.cpp > LibStdcpp.cpp > LibStdcppTuple.cpp > > Modified: lldb/trunk/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp?rev=342424&r1=342423&r2=342424&view=diff > ============================================================================== > --- lldb/trunk/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp > (original) > +++ lldb/trunk/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp Mon > Sep 17 16:15:35 2018 > @@ -39,7 +39,6 @@ > #include "CxxStringTypes.h" > #include "LibCxx.h" > #include "LibCxxAtomic.h" > -#include "LibCxxVariant.h" > #include "LibStdcpp.h" > > using namespace lldb; > @@ -517,10 +516,6 @@ static void LoadLibCxxFormatters(lldb::T > "libc++ std::optional synthetic children", > ConstString("^std::__(ndk)?1::optional<.+>(( )?&)?$"), > stl_synth_flags, true); > - AddCXXSynthetic(cpp_category_sp, LibcxxVariantFrontEndCreator, > - "libc++ std::variant synthetic children", > - ConstString("^std::__(ndk)?1::variant<.+>(( )?&)?$"), > - stl_synth_flags, true); > AddCXXSynthetic( > cpp_category_sp, > lldb_private::formatters::LibcxxAtomicSyntheticFrontEndCreator, > @@ -622,11 +617,6 @@ static void LoadLibCxxFormatters(lldb::T > "libc++ std::optional summary provider", > ConstString("^std::__(ndk)?1::optional<.+>(( )?&)?$"), > stl_summary_flags, true); > - AddCXXSummary(cpp_category_sp, > - lldb_private::formatters::LibcxxVariantSummaryProvider, > - "libc++ std::variant summary provider", > - ConstString("^std::__(ndk)?1::variant<.+>(( )?&)?$"), > - stl_summary_flags, true); > > stl_summary_flags.SetSkipPointers(true); > > > Modified: lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxx.h > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxx.h?rev=342424&r1=342423&r2=342424&view=diff > ============================================================================== > --- lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxx.h (original) > +++ lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxx.h Mon Sep 17 16:15:35 > 2018 > @@ -142,10 +142,6 @@ SyntheticChildrenFrontEnd * > LibcxxOptionalFrontEndCreator(CXXSyntheticChildren *, > lldb::ValueObjectSP valobj_sp); > > -SyntheticChildrenFrontEnd * > -LibcxxVariantFrontEndCreator(CXXSyntheticChildren *, > - lldb::ValueObjectSP valobj_sp); > - > } // namespace formatters > } // namespace lldb_private > > > Removed: lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp?rev=342423&view=auto > ============================================================================== > --- lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp (original) > +++ lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp (removed) > @@ -1,273 +0,0 @@ > -//===-- LibCxxVariant.cpp --------------------------------------*- C++ > -*-===// > -// > -// The LLVM Compiler Infrastructure > -// > -// This file is distributed under the University of Illinois Open Source > -// License. See LICENSE.TXT for details. > -// > -//===----------------------------------------------------------------------===// > - > -#include "LibCxxVariant.h" > -#include "lldb/DataFormatters/FormattersHelpers.h" > - > -#include "llvm/ADT/Optional.h" > -#include "llvm/ADT/ScopeExit.h" > - > -using namespace lldb; > -using namespace lldb_private; > - > -// libc++ variant implementation contains two members that we care about both > -// are contained in the __impl member. > -// - __index which tells us which of the variadic template types is the > active > -// type for the variant > -// - __data is a variadic union which recursively contains itself as member > -// which refers to the tailing variadic types. > -// - __head which refers to the leading non pack type > -// - __value refers to the actual value contained > -// - __tail which refers to the remaining pack types > -// > -// e.g. given std::variant<int,double,char> v1 > -// > -// (lldb) frame var -R v1.__impl.__data > -//(... __union<... 0, int, double, char>) v1.__impl.__data = { > -// ... > -// __head = { > -// __value = ... > -// } > -// __tail = { > -// ... > -// __head = { > -// __value = ... > -// } > -// __tail = { > -// ... > -// __head = { > -// __value = ... > -// ... > -// > -// So given > -// - __index equal to 0 the active value is contained in > -// > -// __data.__head.__value > -// > -// - __index equal to 1 the active value is contained in > -// > -// __data.__tail.__head.__value > -// > -// - __index equal to 2 the active value is contained in > -// > -// __data.__tail.__tail.__head.__value > -// > - > -namespace { > -// libc++ std::variant index could have one of three states > -// 1) VALID, we can obtain it and its not variant_npos > -// 2) INVALID, we can't obtain it or it is not a type we expect > -// 3) NPOS, its value is variant_npos which means the variant has no value > -enum class LibcxxVariantIndexValidity { VALID, INVALID, NPOS }; > - > -LibcxxVariantIndexValidity > -LibcxxVariantGetIndexValidity(ValueObjectSP &impl_sp) { > - ValueObjectSP index_sp( > - impl_sp->GetChildMemberWithName(ConstString("__index"), true)); > - > - if (!index_sp) > - return LibcxxVariantIndexValidity::INVALID; > - > - int64_t index_value = index_sp->GetValueAsSigned(0); > - > - CompilerType index_compiler_type = index_sp->GetCompilerType(); > - > - // We are expecting two layers of typedefs before we obtain the basic type > - // The next two checks verify this. > - if (!index_compiler_type.IsTypedefType()) > - return LibcxxVariantIndexValidity::INVALID; > - > - if (!index_compiler_type.GetTypedefedType().IsTypedefType()) > - return LibcxxVariantIndexValidity::INVALID; > - > - lldb::BasicType index_basic_type = index_compiler_type.GetTypedefedType() > - .GetTypedefedType() > - .GetBasicTypeEnumeration(); > - > - if (index_basic_type == eBasicTypeInvalid) > - return LibcxxVariantIndexValidity::INVALID; > - > - if (index_value == -1) > - return LibcxxVariantIndexValidity::NPOS; > - > - return LibcxxVariantIndexValidity::VALID; > -} > - > -llvm::Optional<uint64_t> LibcxxVariantIndexValue(ValueObjectSP &impl_sp) { > - ValueObjectSP index_sp( > - impl_sp->GetChildMemberWithName(ConstString("__index"), true)); > - > - if (!index_sp) > - return {}; > - > - return {index_sp->GetValueAsUnsigned(0)}; > -} > - > -ValueObjectSP LibcxxVariantGetNthHead(ValueObjectSP &impl_sp, uint64_t > index) { > - ValueObjectSP data_sp( > - impl_sp->GetChildMemberWithName(ConstString("__data"), true)); > - > - if (!data_sp) > - return ValueObjectSP{}; > - > - ValueObjectSP current_level = data_sp; > - for (uint64_t n = index; n != 0; --n) { > - ValueObjectSP tail_sp( > - current_level->GetChildMemberWithName(ConstString("__tail"), true)); > - > - if (!tail_sp) > - return ValueObjectSP{}; > - > - current_level = tail_sp; > - } > - > - return current_level->GetChildMemberWithName(ConstString("__head"), true); > -}; > -} // namespace > - > -namespace lldb_private { > -namespace formatters { > -bool LibcxxVariantSummaryProvider(ValueObject &valobj, Stream &stream, > - const TypeSummaryOptions &options) { > - ValueObjectSP valobj_sp(valobj.GetNonSyntheticValue()); > - if (!valobj_sp) > - return false; > - > - ValueObjectSP impl_sp( > - valobj_sp->GetChildMemberWithName(ConstString("__impl"), true)); > - > - if (!impl_sp) > - return false; > - > - LibcxxVariantIndexValidity validity = > LibcxxVariantGetIndexValidity(impl_sp); > - > - if (validity == LibcxxVariantIndexValidity::INVALID) > - return false; > - > - if (validity == LibcxxVariantIndexValidity::NPOS) { > - stream.Printf(" No Value"); > - return true; > - } > - > - auto optional_index_value = LibcxxVariantIndexValue(impl_sp); > - > - if (!optional_index_value) > - return false; > - > - uint64_t index_value = *optional_index_value; > - > - ValueObjectSP nth_head = LibcxxVariantGetNthHead(impl_sp, index_value); > - > - if (!nth_head) > - return false; > - > - CompilerType head_type = nth_head->GetCompilerType(); > - > - if (!head_type) > - return false; > - > - CompilerType template_type = head_type.GetTypeTemplateArgument(1); > - > - if (!template_type) > - return false; > - > - stream.Printf(" Active Type = %s ", > template_type.GetTypeName().GetCString()); > - > - return true; > -} > -} // namespace formatters > -} // namespace lldb_private > - > -namespace { > -class VariantFrontEnd : public SyntheticChildrenFrontEnd { > -public: > - VariantFrontEnd(ValueObject &valobj) : SyntheticChildrenFrontEnd(valobj) { > - Update(); > - } > - > - size_t GetIndexOfChildWithName(const ConstString &name) override { > - return formatters::ExtractIndexFromString(name.GetCString()); > - } > - > - bool MightHaveChildren() override { return true; } > - bool Update() override; > - size_t CalculateNumChildren() override { return m_size; } > - ValueObjectSP GetChildAtIndex(size_t idx) override; > - > -private: > - size_t m_size = 0; > - ValueObjectSP m_base_sp; > -}; > -} // namespace > - > -bool VariantFrontEnd::Update() { > - m_size = 0; > - ValueObjectSP impl_sp( > - m_backend.GetChildMemberWithName(ConstString("__impl"), true)); > - if (!impl_sp) > - return false; > - > - LibcxxVariantIndexValidity validity = > LibcxxVariantGetIndexValidity(impl_sp); > - > - if (validity == LibcxxVariantIndexValidity::INVALID) > - return false; > - > - if (validity == LibcxxVariantIndexValidity::NPOS) > - return true; > - > - m_size = 1; > - > - return false; > -} > - > -ValueObjectSP VariantFrontEnd::GetChildAtIndex(size_t idx) { > - if (idx >= m_size) > - return ValueObjectSP(); > - > - ValueObjectSP impl_sp( > - m_backend.GetChildMemberWithName(ConstString("__impl"), true)); > - > - auto optional_index_value = LibcxxVariantIndexValue(impl_sp); > - > - if (!optional_index_value) > - return ValueObjectSP(); > - > - uint64_t index_value = *optional_index_value; > - > - ValueObjectSP nth_head = LibcxxVariantGetNthHead(impl_sp, index_value); > - > - if (!nth_head) > - return ValueObjectSP(); > - > - CompilerType head_type = nth_head->GetCompilerType(); > - > - if (!head_type) > - return ValueObjectSP(); > - > - CompilerType template_type = head_type.GetTypeTemplateArgument(1); > - > - if (!template_type) > - return ValueObjectSP(); > - > - ValueObjectSP head_value( > - nth_head->GetChildMemberWithName(ConstString("__value"), true)); > - > - if (!head_value) > - return ValueObjectSP(); > - > - return head_value->Clone(ConstString(ConstString("Value").AsCString())); > -} > - > -SyntheticChildrenFrontEnd * > -formatters::LibcxxVariantFrontEndCreator(CXXSyntheticChildren *, > - lldb::ValueObjectSP valobj_sp) { > - if (valobj_sp) > - return new VariantFrontEnd(*valobj_sp); > - return nullptr; > -} > > Removed: lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxVariant.h > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxVariant.h?rev=342423&view=auto > ============================================================================== > --- lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxVariant.h (original) > +++ lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxVariant.h (removed) > @@ -1,31 +0,0 @@ > -//===-- LibCxxVariant.h -------------------------------------------*- C++ > -//-*-===// > -// > -// The LLVM Compiler Infrastructure > -// > -// This file is distributed under the University of Illinois Open Source > -// License. See LICENSE.TXT for details. > -// > -//===----------------------------------------------------------------------===// > - > -#ifndef liblldb_LibCxxVariant_h_ > -#define liblldb_LibCxxVariant_h_ > - > -#include "lldb/Core/ValueObject.h" > -#include "lldb/DataFormatters/TypeSummary.h" > -#include "lldb/DataFormatters/TypeSynthetic.h" > -#include "lldb/Utility/Stream.h" > - > -namespace lldb_private { > -namespace formatters { > -bool LibcxxVariantSummaryProvider( > - ValueObject &valobj, Stream &stream, > - const TypeSummaryOptions &options); // libc++ std::variant<> > - > -SyntheticChildrenFrontEnd *LibcxxVariantFrontEndCreator(CXXSyntheticChildren > *, > - lldb::ValueObjectSP); > - > -} // namespace formatters > -} // namespace lldb_private > - > -#endif // liblldb_LibCxxVariant_h_ > > > _______________________________________________ > lldb-commits mailing list > lldb-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits