[Support] Teach YAMLIO about polymorphic types
authorScott Linder <scott@scottlinder.com>
Wed, 14 Nov 2018 19:39:59 +0000 (19:39 +0000)
committerScott Linder <scott@scottlinder.com>
Wed, 14 Nov 2018 19:39:59 +0000 (19:39 +0000)
commitc0830f55779adf07809f6b1af4351c3a2f293dfc
tree2e0903f2f91d399847025dea59473c66baf26b9d
parent32dc5b9bf134b5a98c1a22395a5cd0ca5c409fe7
[Support] Teach YAMLIO about polymorphic types

Add support for "polymorphic" types to YAMLIO.

PolymorphicTraits can dynamically switch between other traits (Scalar, Map, or
Sequence). When inputting, the PolymorphicTraits type is told which type to
become, and when outputting the PolymorphicTraits type is asked which type it
currently is.

Also add support for TaggedScalarTraits to allow dynamically differentiating
between multiple scalar types using YAML tags.

Serialize empty maps as "{}" and empty sequences as "[]", so that types
are preserved when round-tripping PolymorphicTraits. This change has
equivalent semantics, but may break e.g. tests which compare output
verbatim.

Differential Revision: https://reviews.llvm.org/D48144

llvm-svn: 346884
clang-tools-extra/unittests/clang-doc/YAMLGeneratorTest.cpp
clang/unittests/Tooling/DiagnosticsYamlTest.cpp
clang/unittests/Tooling/RefactoringActionRulesTest.cpp
llvm/include/llvm/Support/YAMLTraits.h
llvm/lib/Support/YAMLTraits.cpp
llvm/unittests/Support/YAMLIOTest.cpp