Add new ConstantArray::isString(), as the conditions for using getString()

are complex enough to check that it should be a seperate method.

While I'm here, improve ConstantArray::getNullValue a bit, though the
FIXME is still quite valid.

llvm-svn: 10850
This commit is contained in:
Chris Lattner 2004-01-14 17:06:21 +00:00
parent 9a38c78fe6
commit 87ce7dcb3e
1 changed files with 13 additions and 6 deletions

View File

@ -304,9 +304,12 @@ public:
return reinterpret_cast<const ArrayType*>(Value::getType());
}
/// 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.
/// 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 isString() const;
/// getAsString - If this array is isString(), then this method converts the
/// array to an std::string and returns it. Otherwise, it asserts out.
///
std::string getAsString() const;
@ -319,9 +322,13 @@ public:
virtual bool isNullValue() const {
// FIXME: This should be made to be MUCH faster. Just check against well
// known null value!
for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
if (!cast<Constant>(getOperand(i))->isNullValue())
return false;
if (getNumOperands()) {
const Constant *First = cast<Constant>(getOperand(0));
if (!First->isNullValue()) return false;
for (unsigned i = 1, e = getNumOperands(); i != e; ++i)
if (cast<Constant>(getOperand(i)) != First)
return false;
}
return true;
}