summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrits van Bommel <fvbommel@gmail.com>2011-07-15 11:05:37 +0000
committerFrits van Bommel <fvbommel@gmail.com>2011-07-15 11:05:37 +0000
commit331dbca73db75bbb87fcd81e2b8a68c9195de8b5 (patch)
tree9845af9f963b55ce61ed54931a136f214f573fab
parent0bd9d3af54b62152355525bea7914bdef4600371 (diff)
downloadllvm-331dbca73db75bbb87fcd81e2b8a68c9195de8b5.tar.gz
llvm-331dbca73db75bbb87fcd81e2b8a68c9195de8b5.tar.bz2
llvm-331dbca73db75bbb87fcd81e2b8a68c9195de8b5.tar.xz
In Twine::str(), if the Twine stores only a std::string, just return a direct copy of that instead of first copying to a SmallString and converting that to a std::string. Also fix some indentation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135267 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Support/Twine.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/Support/Twine.cpp b/lib/Support/Twine.cpp
index 75cea2961a..d62123cc98 100644
--- a/lib/Support/Twine.cpp
+++ b/lib/Support/Twine.cpp
@@ -14,6 +14,11 @@
using namespace llvm;
std::string Twine::str() const {
+ // If we're storing only a std::string, just return it.
+ if (LHSKind == StdStringKind && RHSKind == EmptyKind)
+ return *static_cast<const std::string*>(LHS);
+
+ // Otherwise, flatten and copy the contents first.
SmallString<256> Vec;
return toStringRef(Vec).str();
}
@@ -37,9 +42,9 @@ StringRef Twine::toNullTerminatedStringRef(SmallVectorImpl<char> &Out) const {
// Already null terminated, yay!
return StringRef(static_cast<const char*>(LHS));
case StdStringKind: {
- const std::string *str = static_cast<const std::string*>(LHS);
- return StringRef(str->c_str(), str->size());
- }
+ const std::string *str = static_cast<const std::string*>(LHS);
+ return StringRef(str->c_str(), str->size());
+ }
default:
break;
}