X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FSupport%2FTwine.cpp;h=75cea2961a9dc68d8faccbbd4a6e99681c69283f;hb=84be958ed8db1ba2e0caca8964b7077761694f92;hp=292c0c2b9e5e53772ab3a38240a311f2908aa898;hpb=b7be0e8afc5378c77c70e3c0fb6a03c74e551688;p=oota-llvm.git diff --git a/lib/Support/Twine.cpp b/lib/Support/Twine.cpp index 292c0c2b9e5..75cea2961a9 100644 --- a/lib/Support/Twine.cpp +++ b/lib/Support/Twine.cpp @@ -9,13 +9,13 @@ #include "llvm/ADT/Twine.h" #include "llvm/ADT/SmallString.h" +#include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; std::string Twine::str() const { SmallString<256> Vec; - toVector(Vec); - return std::string(Vec.begin(), Vec.end()); + return toStringRef(Vec).str(); } void Twine::toVector(SmallVectorImpl &Out) const { @@ -23,28 +23,55 @@ void Twine::toVector(SmallVectorImpl &Out) const { print(OS); } -void Twine::printOneChild(raw_ostream &OS, const void *Ptr, +StringRef Twine::toStringRef(SmallVectorImpl &Out) const { + if (isSingleStringRef()) + return getSingleStringRef(); + toVector(Out); + return StringRef(Out.data(), Out.size()); +} + +StringRef Twine::toNullTerminatedStringRef(SmallVectorImpl &Out) const { + if (isUnary()) { + switch (getLHSKind()) { + case CStringKind: + // Already null terminated, yay! + return StringRef(static_cast(LHS)); + case StdStringKind: { + const std::string *str = static_cast(LHS); + return StringRef(str->c_str(), str->size()); + } + default: + break; + } + } + toVector(Out); + Out.push_back(0); + Out.pop_back(); + return StringRef(Out.data(), Out.size()); +} + +void Twine::printOneChild(raw_ostream &OS, const void *Ptr, NodeKind Kind) const { switch (Kind) { case Twine::NullKind: break; case Twine::EmptyKind: break; case Twine::TwineKind: - static_cast(Ptr)->print(OS); + static_cast(Ptr)->print(OS); break; - case Twine::CStringKind: - OS << static_cast(Ptr); + case Twine::CStringKind: + OS << static_cast(Ptr); break; case Twine::StdStringKind: - OS << *static_cast(Ptr); + OS << *static_cast(Ptr); break; case Twine::StringRefKind: - OS << *static_cast(Ptr); + OS << *static_cast(Ptr); break; case Twine::DecUIKind: - OS << *static_cast(Ptr); + OS << (unsigned)(uintptr_t)Ptr; break; case Twine::DecIKind: - OS << *static_cast(Ptr); + OS << (int)(intptr_t)Ptr; break; case Twine::DecULKind: OS << *static_cast(Ptr); @@ -64,7 +91,7 @@ void Twine::printOneChild(raw_ostream &OS, const void *Ptr, } } -void Twine::printOneChildRepr(raw_ostream &OS, const void *Ptr, +void Twine::printOneChildRepr(raw_ostream &OS, const void *Ptr, NodeKind Kind) const { switch (Kind) { case Twine::NullKind: @@ -88,10 +115,10 @@ void Twine::printOneChildRepr(raw_ostream &OS, const void *Ptr, << static_cast(Ptr) << "\""; break; case Twine::DecUIKind: - OS << "decUI:\"" << *static_cast(Ptr) << "\""; + OS << "decUI:\"" << (unsigned)(uintptr_t)Ptr << "\""; break; case Twine::DecIKind: - OS << "decI:\"" << *static_cast(Ptr) << "\""; + OS << "decI:\"" << (int)(intptr_t)Ptr << "\""; break; case Twine::DecULKind: OS << "decUL:\"" << *static_cast(Ptr) << "\""; @@ -125,9 +152,9 @@ void Twine::printRepr(raw_ostream &OS) const { } void Twine::dump() const { - print(llvm::errs()); + print(llvm::dbgs()); } void Twine::dumpRepr() const { - printRepr(llvm::errs()); + printRepr(llvm::dbgs()); }