diff options
| -rw-r--r-- | llvm/include/llvm/Constants.h | 5 | ||||
| -rw-r--r-- | llvm/lib/VMCore/Constants.cpp | 13 |
2 files changed, 18 insertions, 0 deletions
diff --git a/llvm/include/llvm/Constants.h b/llvm/include/llvm/Constants.h index 3bf935bb5b0..f5fff4d7fb4 100644 --- a/llvm/include/llvm/Constants.h +++ b/llvm/include/llvm/Constants.h @@ -334,6 +334,11 @@ public: /// ubyte, and if the elements of the array are all ConstantInt's. bool isString() const; + /// isCString - This method returns true if the array is a string (see + /// isString) and it ends in a null byte \0 and does not contains any other + /// null bytes except its terminator. + bool isCString() const; + /// getAsString - If this array is isString(), then this method converts the /// array to an std::string and returns it. Otherwise, it asserts out. /// diff --git a/llvm/lib/VMCore/Constants.cpp b/llvm/lib/VMCore/Constants.cpp index 2c996f5301f..ce29a21f86c 100644 --- a/llvm/lib/VMCore/Constants.cpp +++ b/llvm/lib/VMCore/Constants.cpp @@ -1073,6 +1073,19 @@ bool ConstantArray::isString() const { return true; } +/// isCString - This method returns true if the array is a string (see +/// isString) and it ends in a null byte \0 and does not contains any other +/// null bytes except its terminator. +bool ConstantArray::isCString() const { + if (!isString()) return false; + // This is safe because a ConstantArray cannot be a zero array. + for (unsigned i = 0, e = getNumOperands()-1; i != e; ++i) + if (cast<ConstantInt>(getOperand(i))->getZExtValue() == 0) + 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. |

