]> granicus.if.org Git - clang/commitdiff
[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)
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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@346884 91177308-0d34-0410-b5e6-96231b3b80d8

unittests/Tooling/DiagnosticsYamlTest.cpp
unittests/Tooling/RefactoringActionRulesTest.cpp

index 18284bd99575e5eb5c524006cfc5689ba1e694da..420d7af2efffd3dec88e08d1dcb5b1097eb9c720 100644 (file)
@@ -82,7 +82,7 @@ TEST(DiagnosticsYamlTest, serializesDiagnostics) {
             "    Message:         'message #3'\n"
             "    FileOffset:      72\n"
             "    FilePath:        'path/to/source2.cpp'\n"
-            "    Replacements:    \n"
+            "    Replacements:    []\n"
             "...\n",
             YamlContentStream.str());
 }
@@ -113,7 +113,7 @@ TEST(DiagnosticsYamlTest, deserializesDiagnostics) {
                             "    Message:         'message #3'\n"
                             "    FileOffset:      98\n"
                             "    FilePath:        path/to/source.cpp\n"
-                            "    Replacements:    \n"
+                            "    Replacements:    []\n"
                             "...\n";
   TranslationUnitDiagnostics TUDActual;
   yaml::Input YAML(YamlContent);
index e9a12deb3f0ed9d8d16dfce6da7901f40272c649..acacfa05b4c9b65e994d1d5dc3921203dae77922 100644 (file)
@@ -117,8 +117,8 @@ TEST_F(RefactoringActionRulesTest, MyFirstRefactoringRule) {
                  "Key:             'input.cpp:30'\n"
                  "FilePath:        input.cpp\n"
                  "Error:           ''\n"
-                 "InsertedHeaders: \n"
-                 "RemovedHeaders:  \n"
+                 "InsertedHeaders: []\n"
+                 "RemovedHeaders:  []\n"
                  "Replacements:    \n" // Extra whitespace here!
                  "  - FilePath:        input.cpp\n"
                  "    Offset:          30\n"