aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-01-14 17:06:38 +0000
committerChris Lattner <sabre@nondot.org>2004-01-14 17:06:38 +0000
commit13cfdea1ef74147a1861a7eae50249003f8c7929 (patch)
treed4c3d40956d2bc9a488bcd1672ed3ad401c1f1a4 /lib
parent9b0a5ee5bb77b5f74320f3603750f4521d16d196 (diff)
Implement ConstantArray::isString
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10851 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/VMCore/Constants.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp
index 0a1c213fd2..bfac24fe9b 100644
--- a/lib/VMCore/Constants.cpp
+++ b/lib/VMCore/Constants.cpp
@@ -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();