Implement ConstantArray::isString
authorChris Lattner <sabre@nondot.org>
Wed, 14 Jan 2004 17:06:38 +0000 (17:06 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 14 Jan 2004 17:06:38 +0000 (17:06 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10851 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Constants.cpp

index 0a1c213fd205595f41b5b554dd6bd8353976503e..bfac24fe9b96ab15ad817cbb55ce49480dab9001 100644 (file)
@@ -754,14 +754,27 @@ ConstantArray *ConstantArray::get(const std::string &Str) {
   return ConstantArray::get(ATy, ElementVals);
 }
 
+/// isString - This method returns true if the array is an array of sbyte or
+/// ubyte, and if the elements of the array are all ConstantInt's.
+bool ConstantArray::isString() const {
+  // Check the element type for sbyte or ubyte...
+  if (getType()->getElementType() != Type::UByteTy ||
+      getType()->getElementType() != Type::SByteTy)
+    return false;
+  // Check the elements to make sure they are all integers, not constant
+  // expressions.
+  for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
+    if (!isa<ConstantInt>(getOperand(i)))
+      return false;
+  return true;
+}
+
 // getAsString - If the sub-element type of this array is either sbyte or ubyte,
 // then this method converts the array to an std::string and returns it.
 // Otherwise, it asserts out.
 //
 std::string ConstantArray::getAsString() const {
-  assert((getType()->getElementType() == Type::UByteTy ||
-          getType()->getElementType() == Type::SByteTy) && "Not a string!");
-
+  assert(isString() && "Not a string!");
   std::string Result;
   for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
     Result += (char)cast<ConstantInt>(getOperand(i))->getRawValue();