1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00

IR: Simplify DIBuilder's HeaderBuilder API, NFC

Change `HeaderBuilder` API to work well even when it's not starting with
a tag.  There's already one case like this, and the tag is moving
elsewhere as part of PR22235.

llvm-svn: 226540
This commit is contained in:
Duncan P. N. Exon Smith 2015-01-20 02:54:07 +00:00
parent cafdfa8860
commit c8ffb8d88e

View File

@ -25,15 +25,23 @@ using namespace llvm::dwarf;
namespace { namespace {
class HeaderBuilder { 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; SmallVector<char, 256> Chars;
public: public:
explicit HeaderBuilder(Twine T) { T.toVector(Chars); } HeaderBuilder() : IsEmpty(true) {}
HeaderBuilder(const HeaderBuilder &X) : Chars(X.Chars) {} HeaderBuilder(const HeaderBuilder &X) : Chars(X.Chars) {}
HeaderBuilder(HeaderBuilder &&X) : Chars(std::move(X.Chars)) {} HeaderBuilder(HeaderBuilder &&X) : Chars(std::move(X.Chars)) {}
template <class Twineable> HeaderBuilder &concat(Twineable &&X) { template <class Twineable> HeaderBuilder &concat(Twineable &&X) {
Chars.push_back(0); if (IsEmpty)
IsEmpty = false;
else
Chars.push_back(0);
Twine(X).toVector(Chars); Twine(X).toVector(Chars);
return *this; return *this;
} }
@ -43,7 +51,7 @@ public:
} }
static HeaderBuilder get(unsigned Tag) { static HeaderBuilder get(unsigned Tag) {
return HeaderBuilder("0x" + Twine::utohexstr(Tag)); return HeaderBuilder().concat("0x" + Twine::utohexstr(Tag));
} }
}; };
} }
@ -739,8 +747,10 @@ static HeaderBuilder setTypeFlagsInHeader(StringRef Header,
Flags = 0; Flags = 0;
Flags |= FlagsToSet; Flags |= FlagsToSet;
return HeaderBuilder(Twine(I.getPrefix())).concat(Flags).concat( return HeaderBuilder()
I.getSuffix()); .concat(I.getPrefix())
.concat(Flags)
.concat(I.getSuffix());
} }
static DIType createTypeWithFlags(LLVMContext &Context, DIType Ty, static DIType createTypeWithFlags(LLVMContext &Context, DIType Ty,