diff options
author | Jonas Devlieghere <jonas@devlieghere.com> | 2020-05-11 14:41:38 -0700 |
---|---|---|
committer | Jonas Devlieghere <jonas@devlieghere.com> | 2020-05-11 15:51:47 -0700 |
commit | fab08bf4899e40d02d8bf394a63499ac679ac61c (patch) | |
tree | 3fac880e4eddd91b0268c2c331ab99ebbbf10101 | |
parent | 020022e12e03fb7e6b0405bc18a87921a11cde7e (diff) | |
download | llvm-fab08bf4899e40d02d8bf394a63499ac679ac61c.zip llvm-fab08bf4899e40d02d8bf394a63499ac679ac61c.tar.gz llvm-fab08bf4899e40d02d8bf394a63499ac679ac61c.tar.bz2 |
[YAMLTraits] Add trait for char
Add a YAML trait for char.
Differential revision: https://reviews.llvm.org/D79745
-rw-r--r-- | llvm/include/llvm/Support/YAMLTraits.h | 6 | ||||
-rw-r--r-- | llvm/lib/Support/YAMLTraits.cpp | 11 | ||||
-rw-r--r-- | llvm/unittests/Support/YAMLIOTest.cpp | 8 |
3 files changed, 24 insertions, 1 deletions
diff --git a/llvm/include/llvm/Support/YAMLTraits.h b/llvm/include/llvm/Support/YAMLTraits.h index f93f360..9aa9640 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 f27be3e..a4b782d 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 d86489c..b2ea5aa 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); |