[llvm-commits] [llvm] r79602 - /llvm/trunk/lib/Support/APInt.cpp

Erick Tryzelaar idadesub at users.sourceforge.net
Thu Aug 20 23:48:38 PDT 2009


Author: erickt
Date: Fri Aug 21 01:48:37 2009
New Revision: 79602

URL: http://llvm.org/viewvc/llvm-project?rev=79602&view=rev
Log:
Clean up the APInt function getDigit.

Modified:
    llvm/trunk/lib/Support/APInt.cpp

Modified: llvm/trunk/lib/Support/APInt.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/APInt.cpp?rev=79602&r1=79601&r2=79602&view=diff

==============================================================================
--- llvm/trunk/lib/Support/APInt.cpp (original)
+++ llvm/trunk/lib/Support/APInt.cpp Fri Aug 21 01:48:37 2009
@@ -46,30 +46,27 @@
 
 /// A utility function that converts a character to a digit.
 inline static unsigned getDigit(char cdigit, uint8_t radix) {
-  // Get a digit
-  unsigned digit = 0;
+  unsigned r;
+
   if (radix == 16) {
-    if (!isxdigit(cdigit))
-      llvm_unreachable("Invalid hex digit in string");
-    if (isdigit(cdigit))
-      digit = cdigit - '0';
-    else if (cdigit >= 'a')
-      digit = cdigit - 'a' + 10;
-    else if (cdigit >= 'A')
-      digit = cdigit - 'A' + 10;
-    else
-      llvm_unreachable("huh? we shouldn't get here");
-  } else if (isdigit(cdigit)) {
-    digit = cdigit - '0';
-    assert((radix == 10 ||
-            (radix == 8 && digit != 8 && digit != 9) ||
-            (radix == 2 && (digit == 0 || digit == 1))) &&
-           "Invalid digit in string for given radix");
-  } else {
-    llvm_unreachable("Invalid character in digit string");
-  }
+    r = cdigit - '0';
+    if (r <= 9)
+      return r;
+
+    r = cdigit - 'A';
+    if (r <= 5)
+      return r + 10;
+
+    r = cdigit - 'a';
+    if (r <= 5)
+      return r + 10;
+  }
+
+  r = cdigit - '0';
+  if (r < radix)
+    return r;
 
-  return digit;
+  return -1U;
 }
 
 
@@ -2076,6 +2073,7 @@
   // Enter digit traversal loop
   for (StringRef::iterator e = str.end(); p != e; ++p) {
     unsigned digit = getDigit(*p, radix);
+    assert(digit < radix && "Invalid character in digit string");
 
     // Shift or multiply the value by the radix
     if (slen > 1) {





More information about the llvm-commits mailing list