diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-01-20 05:02:42 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-01-20 05:02:42 +0000 |
commit | aa687a3d4cdc2c964fd70df7925d9a8a2e6d55fc (patch) | |
tree | a0e6cf28c826c3ac550bfad1cff30d7e4780e817 /llvm/lib/IR/DIBuilder.cpp | |
parent | 3bc66f1f4733fd29792c11a686d416aa9ab4cc38 (diff) | |
download | bcm5719-llvm-aa687a3d4cdc2c964fd70df7925d9a8a2e6d55fc.tar.gz bcm5719-llvm-aa687a3d4cdc2c964fd70df7925d9a8a2e6d55fc.zip |
Reapply "IR: Simplify DIBuilder's HeaderBuilder API, NFC"
This reverts commit r226542, effectively reapplying r226540. This time,
initialize `IsEmpty` in the copy and move constructors as well.
llvm-svn: 226545
Diffstat (limited to 'llvm/lib/IR/DIBuilder.cpp')
-rw-r--r-- | llvm/lib/IR/DIBuilder.cpp | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/llvm/lib/IR/DIBuilder.cpp b/llvm/lib/IR/DIBuilder.cpp index eb686aa4bec..603fafc15fd 100644 --- a/llvm/lib/IR/DIBuilder.cpp +++ b/llvm/lib/IR/DIBuilder.cpp @@ -25,15 +25,24 @@ using namespace llvm::dwarf; namespace { class HeaderBuilder { + /// \brief Whether there are any fields yet. + /// + /// Note that this is not equivalent to \c Chars.empty(), since \a concat() + /// may have been called already with an empty string. + bool IsEmpty; SmallVector<char, 256> Chars; public: - explicit HeaderBuilder(Twine T) { T.toVector(Chars); } - HeaderBuilder(const HeaderBuilder &X) : Chars(X.Chars) {} - HeaderBuilder(HeaderBuilder &&X) : Chars(std::move(X.Chars)) {} + HeaderBuilder() : IsEmpty(true) {} + HeaderBuilder(const HeaderBuilder &X) : IsEmpty(X.IsEmpty), Chars(X.Chars) {} + HeaderBuilder(HeaderBuilder &&X) + : IsEmpty(X.IsEmpty), Chars(std::move(X.Chars)) {} template <class Twineable> HeaderBuilder &concat(Twineable &&X) { - Chars.push_back(0); + if (IsEmpty) + IsEmpty = false; + else + Chars.push_back(0); Twine(X).toVector(Chars); return *this; } @@ -43,7 +52,7 @@ public: } static HeaderBuilder get(unsigned Tag) { - return HeaderBuilder("0x" + Twine::utohexstr(Tag)); + return HeaderBuilder().concat("0x" + Twine::utohexstr(Tag)); } }; } @@ -739,8 +748,10 @@ static HeaderBuilder setTypeFlagsInHeader(StringRef Header, Flags = 0; Flags |= FlagsToSet; - return HeaderBuilder(Twine(I.getPrefix())).concat(Flags).concat( - I.getSuffix()); + return HeaderBuilder() + .concat(I.getPrefix()) + .concat(Flags) + .concat(I.getSuffix()); } static DIType createTypeWithFlags(LLVMContext &Context, DIType Ty, |