From 13cfdea1ef74147a1861a7eae50249003f8c7929 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 14 Jan 2004 17:06:38 +0000 Subject: [PATCH] Implement ConstantArray::isString git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10851 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/Constants.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index 0a1c213fd20..bfac24fe9b9 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(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(getOperand(i))->getRawValue();