DIBuilder: Extract DIHeaderFieldIterator::getNumber(), NFC
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Thu, 22 Jan 2015 03:11:13 +0000 (03:11 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Thu, 22 Jan 2015 03:11:13 +0000 (03:11 +0000)
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

include/llvm/IR/DebugInfo.h

index 13fa23c8fd6ce3732f5b2a99da7d6dacfec4ea1a..fc4d95cfc14712dffa0675c2fed7ee2ff76ba8e4 100644 (file)
@@ -99,6 +99,16 @@ public:
     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:
   void increment() {
     assert(Current.data() != nullptr && "Cannot increment past the end");
@@ -204,10 +214,7 @@ public:
   }
 
   template <class T> T getHeaderFieldAs(unsigned Index) const {
-    T Int;
-    if (getHeaderField(Index).getAsInteger(0, Int))
-      return 0;
-    return Int;
+    return getHeaderIterator(Index).getNumber<T>();
   }
 
   uint16_t getTag() const { return getHeaderFieldAs<uint16_t>(0); }
@@ -883,12 +890,7 @@ public:
   DIExpressionIterator() {}
   DIExpressionIterator(const DIExpression Expr)
     : I(Expr.getHeader()) { ++I; }
-  uint64_t operator*() const {
-    uint64_t UInt;
-    if (I->getAsInteger(0, UInt))
-      return 0;
-    return UInt;
-  }
+  uint64_t operator*() const { return I.getNumber<uint64_t>(); }
   DIExpressionIterator &operator++() {
     increment();
     return *this;