[llvm] fab08bf - [YAMLTraits] Add trait for char

Jonas Devlieghere via llvm-commits llvm-commits at lists.llvm.org
Mon May 11 16:00:30 PDT 2020


Author: Jonas Devlieghere
Date: 2020-05-11T15:51:47-07:00
New Revision: fab08bf4899e40d02d8bf394a63499ac679ac61c

URL: https://github.com/llvm/llvm-project/commit/fab08bf4899e40d02d8bf394a63499ac679ac61c
DIFF: https://github.com/llvm/llvm-project/commit/fab08bf4899e40d02d8bf394a63499ac679ac61c.diff

LOG: [YAMLTraits] Add trait for char

Add a YAML trait for char.

Differential revision: https://reviews.llvm.org/D79745

Added: 
    

Modified: 
    llvm/include/llvm/Support/YAMLTraits.h
    llvm/lib/Support/YAMLTraits.cpp
    llvm/unittests/Support/YAMLIOTest.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/Support/YAMLTraits.h b/llvm/include/llvm/Support/YAMLTraits.h
index f93f36037679..9aa96401ae17 100644
--- a/llvm/include/llvm/Support/YAMLTraits.h
+++ b/llvm/include/llvm/Support/YAMLTraits.h
@@ -1159,6 +1159,12 @@ struct ScalarTraits<bool> {
   static QuotingType mustQuote(StringRef) { return QuotingType::None; }
 };
 
+template <> struct ScalarTraits<char> {
+  static void output(const char &, void *, raw_ostream &);
+  static StringRef input(StringRef, void *, char &);
+  static QuotingType mustQuote(StringRef S) { return needsQuotes(S); }
+};
+
 template<>
 struct ScalarTraits<StringRef> {
   static void output(const StringRef &, void *, raw_ostream &);

diff  --git a/llvm/lib/Support/YAMLTraits.cpp b/llvm/lib/Support/YAMLTraits.cpp
index f27be3e97430..a4b782db0a96 100644
--- a/llvm/lib/Support/YAMLTraits.cpp
+++ b/llvm/lib/Support/YAMLTraits.cpp
@@ -864,6 +864,17 @@ StringRef ScalarTraits<bool>::input(StringRef Scalar, void *, bool &Val) {
   return "invalid boolean";
 }
 
+void ScalarTraits<char>::output(const char &Val, void *, raw_ostream &Out) {
+  Out << Val;
+}
+
+StringRef ScalarTraits<char>::input(StringRef Scalar, void *, char &Val) {
+  if (Scalar.size() != 1)
+    return "invalid character";
+  Val = Scalar[0];
+  return StringRef();
+}
+
 void ScalarTraits<StringRef>::output(const StringRef &Val, void *,
                                      raw_ostream &Out) {
   Out << Val;

diff  --git a/llvm/unittests/Support/YAMLIOTest.cpp b/llvm/unittests/Support/YAMLIOTest.cpp
index d86489cf7560..b2ea5aab5935 100644
--- a/llvm/unittests/Support/YAMLIOTest.cpp
+++ b/llvm/unittests/Support/YAMLIOTest.cpp
@@ -333,6 +333,7 @@ struct BuiltInTypes {
   uint16_t        u16;
   uint8_t         u8;
   bool            b;
+  char            c;
   int64_t         s64;
   int32_t         s32;
   int16_t         s16;
@@ -357,6 +358,7 @@ namespace yaml {
       io.mapRequired("u16",      bt.u16);
       io.mapRequired("u8",       bt.u8);
       io.mapRequired("b",        bt.b);
+      io.mapRequired("c",        bt.c);
       io.mapRequired("s64",      bt.s64);
       io.mapRequired("s32",      bt.s32);
       io.mapRequired("s16",      bt.s16);
@@ -386,6 +388,7 @@ TEST(YAMLIO, TestReadBuiltInTypes) {
             "u16:      65000\n"
             "u8:       255\n"
             "b:        false\n"
+            "c:        'c'\n"
             "s64:      -5000000000\n"
             "s32:      -2000000000\n"
             "s16:      -32000\n"
@@ -396,7 +399,7 @@ TEST(YAMLIO, TestReadBuiltInTypes) {
             "h16:      0x8765\n"
             "h32:      0xFEDCBA98\n"
             "h64:      0xFEDCBA9876543210\n"
-           "...\n");
+            "...\n");
   yin >> map;
 
   EXPECT_FALSE(yin.error());
@@ -407,6 +410,7 @@ TEST(YAMLIO, TestReadBuiltInTypes) {
   EXPECT_EQ(map.u16, 65000);
   EXPECT_EQ(map.u8,  255);
   EXPECT_EQ(map.b,   false);
+  EXPECT_EQ(map.c,   'c');
   EXPECT_EQ(map.s64, -5000000000LL);
   EXPECT_EQ(map.s32, -2000000000L);
   EXPECT_EQ(map.s16, -32000);
@@ -434,6 +438,7 @@ TEST(YAMLIO, TestReadWriteBuiltInTypes) {
     map.u16 = 50000;
     map.u8  = 254;
     map.b   = true;
+    map.c   = 'd';
     map.s64 = -6000000000LL;
     map.s32 = -2000000000;
     map.s16 = -32000;
@@ -463,6 +468,7 @@ TEST(YAMLIO, TestReadWriteBuiltInTypes) {
     EXPECT_EQ(map.u16,      50000);
     EXPECT_EQ(map.u8,       254);
     EXPECT_EQ(map.b,        true);
+    EXPECT_EQ(map.c,        'd');
     EXPECT_EQ(map.s64,      -6000000000LL);
     EXPECT_EQ(map.s32,      -2000000000L);
     EXPECT_EQ(map.s16,      -32000);


        


More information about the llvm-commits mailing list