DIBuilder: Extract DIHeaderFieldIterator::getNumber(), NFC

Reduce code duplication between `DIBuilder` and `DIExpressionIterator`
by implementing a `getNumber()` directly in the iterator.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226772 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan P. N. Exon Smith
2015-01-22 03:11:13 +00:00
parent b5f4854fb4
commit eaa29e9019

View File

@@ -99,6 +99,16 @@ public:
return Header.slice(Current.end() - Header.begin() + 1, StringRef::npos); return Header.slice(Current.end() - Header.begin() + 1, StringRef::npos);
} }
/// \brief Get the current field as a number.
///
/// Convert the current field into a number. Return \c 0 on error.
template <class T> T getNumber() const {
T Int;
if (getCurrent().getAsInteger(0, Int))
return 0;
return Int;
}
private: private:
void increment() { void increment() {
assert(Current.data() != nullptr && "Cannot increment past the end"); assert(Current.data() != nullptr && "Cannot increment past the end");
@@ -204,10 +214,7 @@ public:
} }
template <class T> T getHeaderFieldAs(unsigned Index) const { template <class T> T getHeaderFieldAs(unsigned Index) const {
T Int; return getHeaderIterator(Index).getNumber<T>();
if (getHeaderField(Index).getAsInteger(0, Int))
return 0;
return Int;
} }
uint16_t getTag() const { return getHeaderFieldAs<uint16_t>(0); } uint16_t getTag() const { return getHeaderFieldAs<uint16_t>(0); }
@@ -883,12 +890,7 @@ public:
DIExpressionIterator() {} DIExpressionIterator() {}
DIExpressionIterator(const DIExpression Expr) DIExpressionIterator(const DIExpression Expr)
: I(Expr.getHeader()) { ++I; } : I(Expr.getHeader()) { ++I; }
uint64_t operator*() const { uint64_t operator*() const { return I.getNumber<uint64_t>(); }
uint64_t UInt;
if (I->getAsInteger(0, UInt))
return 0;
return UInt;
}
DIExpressionIterator &operator++() { DIExpressionIterator &operator++() {
increment(); increment();
return *this; return *this;