diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2009-11-13 04:55:09 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2009-11-13 04:55:09 +0000 |
commit | ce91e0acd570dd9d2e5ef054cec34e820f1a4f75 (patch) | |
tree | 5684855b4137d4c87c62a0def044e879c0975ca6 | |
parent | 7e78567b46273b04541d5b68e5eb11987b54d8a5 (diff) | |
download | external_llvm-ce91e0acd570dd9d2e5ef054cec34e820f1a4f75.zip external_llvm-ce91e0acd570dd9d2e5ef054cec34e820f1a4f75.tar.gz external_llvm-ce91e0acd570dd9d2e5ef054cec34e820f1a4f75.tar.bz2 |
Distinguish "a," from "a". The first one splits into "a" + "" and the second one into
"a" + 0.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@87084 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Support/StringExtras.cpp | 8 | ||||
-rw-r--r-- | unittests/ADT/StringRefTest.cpp | 5 |
2 files changed, 10 insertions, 3 deletions
diff --git a/lib/Support/StringExtras.cpp b/lib/Support/StringExtras.cpp index 687394a..1b233ab 100644 --- a/lib/Support/StringExtras.cpp +++ b/lib/Support/StringExtras.cpp @@ -63,8 +63,10 @@ void llvm::StringRef::split(SmallVectorImpl<StringRef> &A, bool KeepEmpty) const { StringRef rest = *this; + // rest.data() is used to distinguish cases like "a," that splits into + // "a" + "" and "a" that splits into "a" + 0. for (int splits = 0; - rest.size() != 0 && (MaxSplit < 0 || splits < MaxSplit); + rest.data() != NULL && (MaxSplit < 0 || splits < MaxSplit); ++splits) { std::pair<llvm::StringRef, llvm::StringRef> p = rest.split(Separators); @@ -72,7 +74,7 @@ void llvm::StringRef::split(SmallVectorImpl<StringRef> &A, A.push_back(p.first); rest = p.second; } - - if (rest.size() != 0 || KeepEmpty) + // If we have a tail left, add it. + if (rest.data() != NULL && (rest.size() != 0 || KeepEmpty)) A.push_back(rest); } diff --git a/unittests/ADT/StringRefTest.cpp b/unittests/ADT/StringRefTest.cpp index ea1d26c..dfa208a 100644 --- a/unittests/ADT/StringRefTest.cpp +++ b/unittests/ADT/StringRefTest.cpp @@ -143,6 +143,11 @@ TEST(StringRefTest, Split2) { StringRef(",").split(parts, ",", -1, true); EXPECT_TRUE(parts == expected); + expected.clear(); parts.clear(); + expected.push_back("a"); expected.push_back("b"); + StringRef("a,b").split(parts, ",", -1, true); + EXPECT_TRUE(parts == expected); + // Test MaxSplit expected.clear(); parts.clear(); expected.push_back("a,,b,c"); |