diff options
| author | Sam McCall <sam.mccall@gmail.com> | 2018-10-18 08:47:24 +0000 |
|---|---|---|
| committer | Sam McCall <sam.mccall@gmail.com> | 2018-10-18 08:47:24 +0000 |
| commit | 5ee0188f2b87c7600ab2fef8f630efb75aeb57d5 (patch) | |
| tree | d64170e746ca30c440f34d5f933c7b53688ce6ef | |
| parent | 6a208e8c5fb4c3df80b0d0430b775eb528692924 (diff) | |
| download | bcm5719-llvm-5ee0188f2b87c7600ab2fef8f630efb75aeb57d5.tar.gz bcm5719-llvm-5ee0188f2b87c7600ab2fef8f630efb75aeb57d5.zip | |
[Support] json::Value construction from std::vector<T> and std::map<string,T>.
Summary: Previously this required a conversion to json::Array/json::Object first.
Reviewers: ioeric
Subscribers: kristina, llvm-commits
Differential Revision: https://reviews.llvm.org/D53385
llvm-svn: 344732
| -rw-r--r-- | llvm/include/llvm/Support/JSON.h | 4 | ||||
| -rw-r--r-- | llvm/unittests/Support/JSONTest.cpp | 2 |
2 files changed, 6 insertions, 0 deletions
diff --git a/llvm/include/llvm/Support/JSON.h b/llvm/include/llvm/Support/JSON.h index 2fc0e7ddb90..7a04fd52bc5 100644 --- a/llvm/include/llvm/Support/JSON.h +++ b/llvm/include/llvm/Support/JSON.h @@ -294,9 +294,13 @@ public: Value(json::Array &&Elements) : Type(T_Array) { create<json::Array>(std::move(Elements)); } + template <typename Elt> + Value(const std::vector<Elt> &C) : Value(json::Array(C)) {} Value(json::Object &&Properties) : Type(T_Object) { create<json::Object>(std::move(Properties)); } + template <typename Elt> + Value(const std::map<std::string, Elt> &C) : Value(json::Object(C)) {} // Strings: types with value semantics. Must be valid UTF-8. Value(std::string V) : Type(T_String) { if (LLVM_UNLIKELY(!isUTF8(V))) { diff --git a/llvm/unittests/Support/JSONTest.cpp b/llvm/unittests/Support/JSONTest.cpp index 64a2bb97bd8..9f2d47b9aa9 100644 --- a/llvm/unittests/Support/JSONTest.cpp +++ b/llvm/unittests/Support/JSONTest.cpp @@ -47,6 +47,8 @@ TEST(JSONTest, Constructors) { s(Object{{"A", Object{{"B", Object{{"X", "Y"}}}}}})); EXPECT_EQ("null", s(llvm::Optional<double>())); EXPECT_EQ("2.5", s(llvm::Optional<double>(2.5))); + EXPECT_EQ("[[2.5,null]]", s(std::vector<std::vector<llvm::Optional<double>>>{ + {2.5, llvm::None}})); } TEST(JSONTest, StringOwnership) { |

