MDString
authorDevang Patel <dpatel@apple.com>
Thu, 23 Jul 2009 02:00:51 +0000 (02:00 +0000)
committerDevang Patel <dpatel@apple.com>
Thu, 23 Jul 2009 02:00:51 +0000 (02:00 +0000)
- Rename member function size(). New name is length().
- Store string beginning and length. Earlier it used to store string end.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76841 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/LLVMContext.h
include/llvm/MDNode.h
lib/AsmParser/LLParser.cpp
lib/Bitcode/Reader/BitcodeReader.cpp
lib/Bitcode/Writer/BitcodeWriter.cpp
lib/VMCore/AsmWriter.cpp
lib/VMCore/LLVMContext.cpp
lib/VMCore/LLVMContextImpl.cpp
lib/VMCore/LLVMContextImpl.h
unittests/VMCore/MetadataTest.cpp

index 134311e98afe750b2f1775dc262b80a3c80bf68c..0751ccd83a74bcb9efe6f364b78b22306bd962cc 100644 (file)
@@ -232,7 +232,7 @@ public:
   MDNode* getMDNode(Value* const* Vals, unsigned NumVals);
   
   // MDString accessors
-  MDString* getMDString(const char *StrBegin, const char *StrEnd);
+  MDString* getMDString(const char *StrBegin, unsigned Length);
   MDString* getMDString(const std::string &Str);
   
   // FunctionType accessors
index 14bfe5798a6b6cdc2b3f8eb503390cfdd478c2c0..06cc90931e3d62df5792a6cab34f35e3939e862e 100644 (file)
@@ -64,16 +64,17 @@ public:
 ///
 class MDString : public MetadataBase {
   MDString(const MDString &);            // DO NOT IMPLEMENT
-  const char *StrBegin, *StrEnd;
+  const char *StrBegin;
+  unsigned StrLength;
   friend class LLVMContextImpl;
 
 protected:
-  explicit MDString(const char *begin, const char *end)
+  explicit MDString(const char *begin, unsigned l)
     : MetadataBase(Type::MetadataTy, Value::MDStringVal),
-      StrBegin(begin), StrEnd(end) {}
+      StrBegin(begin), StrLength(l) {}
 
 public:
-  intptr_t size() const { return StrEnd - StrBegin; }
+  unsigned length() const { return StrLength; }
 
   /// begin() - Pointer to the first byte of the string.
   ///
@@ -81,7 +82,7 @@ public:
 
   /// end() - Pointer to one byte past the end of the string.
   ///
-  const char *end() const { return StrEnd; }
+  const char *end() const { return StrBegin + length(); }
 
   /// Methods for support type inquiry through isa, cast, and dyn_cast:
   static inline bool classof(const MDString *) { return true; }
index b09f23fbd1a1812a1113c23fbc56105f69a5673f..94224a6361c03a37a3bd46de80fc02e84d00c7ee 100644 (file)
@@ -373,7 +373,7 @@ bool LLParser::ParseNamedGlobal() {
 bool LLParser::ParseMDString(MetadataBase *&MDS) {
   std::string Str;
   if (ParseStringConstant(Str)) return true;
-  MDS = Context.getMDString(Str.data(), Str.data() + Str.size());
+  MDS = Context.getMDString(Str.data(), Str.size());
   return false;
 }
 
index 8393cd42163187738eca3523c9e06c3245932061..01b3eb3bced5a4c104b8cfef674b283f94c71bb6 100644 (file)
@@ -758,7 +758,7 @@ bool BitcodeReader::ParseMetadata() {
       for (unsigned i = 0; i != MDStringLength; ++i)
         String[i] = Record[i];
       Value *V = 
-        Context.getMDString(String.c_str(), String.c_str() + MDStringLength);
+        Context.getMDString(String.c_str(), MDStringLength);
       ValueList.AssignValue(V, NextValueNo++);
       break;
     }
index 7d745ffd50d2d437718a1a4c38af95eb94bedfac..b3124204903916c6f2f397f1335ef1c802df5e7c 100644 (file)
@@ -512,7 +512,7 @@ static uint64_t GetOptimizationFlags(const Value *V) {
 
        // Code: [strchar x N]
        const char *StrBegin = MDS->begin();
-       for (unsigned i = 0, e = MDS->size(); i != e; ++i)
+       for (unsigned i = 0, e = MDS->length(); i != e; ++i)
         Record.push_back(StrBegin[i]);
     
        // Emit the finished record.
index ae55d5ba515293603e6dad6cf9a8496fbcb1defe..73310a355456f432c895626948f181304b9b1392 100644 (file)
@@ -1139,7 +1139,7 @@ static void WriteAsOperandInternal(raw_ostream &Out, const Value *V,
 
   if (const MDString *MDS = dyn_cast<MDString>(V)) {
     Out << "!\"";
-    PrintEscapedString(MDS->begin(), MDS->size(), Out);
+    PrintEscapedString(MDS->begin(), MDS->length(), Out);
     Out << '"';
     return;
   }
@@ -1983,7 +1983,7 @@ void Value::print(raw_ostream &OS, AssemblyAnnotationWriter *AAW) const {
     TypePrinter.print(MDS->getType(), OS);
     OS << ' ';
     OS << "!\"";
-    PrintEscapedString(MDS->begin(), MDS->size(), OS);
+    PrintEscapedString(MDS->begin(), MDS->length(), OS);
     OS << '"';
   } else if (const MDNode *N = dyn_cast<MDNode>(this)) {
     SlotTracker SlotTable(N);
index c88ecba72bf0ebf19a6bfb0a5416f50f894951c9..d0abb2df62611195806095079e3ad4f3d995c7b0 100644 (file)
@@ -551,12 +551,12 @@ MDNode* LLVMContext::getMDNode(Value* const* Vals, unsigned NumVals) {
 }
 
 // MDString accessors
-MDString* LLVMContext::getMDString(const char *StrBegin, const char *StrEnd) {
-  return pImpl->getMDString(StrBegin, StrEnd);
+MDString* LLVMContext::getMDString(const char *StrBegin, unsigned StrLength) {
+  return pImpl->getMDString(StrBegin, StrLength);
 }
 
 MDString* LLVMContext::getMDString(const std::string &Str) {
-  return getMDString(Str.data(), Str.data()+Str.size());
+  return getMDString(Str.data(), Str.size());
 }
 
 // FunctionType accessors
index 8ad46a040c52baa8312c22ee78d757de8c2d7265..79b33c145812e21fdb23ab51d9509a2a24756545 100644 (file)
@@ -394,13 +394,13 @@ ConstantFP *LLVMContextImpl::getConstantFP(const APFloat &V) {
 }
 
 MDString *LLVMContextImpl::getMDString(const char *StrBegin,
-                                       const char *StrEnd) {
+                                       unsigned StrLength) {
   sys::SmartScopedWriter<true> Writer(ConstantsLock);
-  StringMapEntry<MDString *> &Entry = MDStringCache.GetOrCreateValue(
-                                        StrBegin, StrEnd);
+  StringMapEntry<MDString *> &Entry = 
+    MDStringCache.GetOrCreateValue(StrBegin, StrBegin + StrLength);
   MDString *&S = Entry.getValue();
   if (!S) S = new MDString(Entry.getKeyData(),
-                           Entry.getKeyData() + Entry.getKeyLength());
+                           Entry.getKeyLength());
 
   return S;
 }
@@ -460,7 +460,8 @@ Constant *LLVMContextImpl::getConstantArray(const ArrayType *Ty,
 
 void LLVMContextImpl::erase(MDString *M) {
   sys::SmartScopedWriter<true> Writer(ConstantsLock);
-  MDStringCache.erase(MDStringCache.find(M->StrBegin, M->StrEnd));
+  MDStringCache.erase(MDStringCache.find(M->StrBegin, 
+                                         M->StrBegin + M->length()));
 }
 
 void LLVMContextImpl::erase(MDNode *M) {
index 03f0e7b1414bfd667fab0796902f5d107a09c5dd..392e500f128be73ba8e349179c5f82949028faf0 100644 (file)
@@ -133,7 +133,7 @@ public:
   
   ConstantFP *getConstantFP(const APFloat &V);
   
-  MDString *getMDString(const char *StrBegin, const char *StrEnd);
+  MDString *getMDString(const char *StrBegin, unsigned StrLength);
   
   MDNode *getMDNode(Value*const* Vals, unsigned NumVals);
   
index 732719ec5c4c39928af664b51d856c711b2ebc2c..d612808b9f6f239f54a4474f9d044c988f3f49ef 100644 (file)
@@ -23,9 +23,9 @@ namespace {
 // MDString objects, even with the same string pointer and nulls in the string.
 TEST(MDStringTest, CreateDifferent) {
   char x[3] = { 'f', 0, 'A' };
-  MDString *s1 = getGlobalContext().getMDString(&x[0], &x[3]);
+  MDString *s1 = getGlobalContext().getMDString(&x[0], 3);
   x[2] = 'B';
-  MDString *s2 = getGlobalContext().getMDString(&x[0], &x[3]);
+  MDString *s2 = getGlobalContext().getMDString(&x[0], 3);
   EXPECT_NE(s1, s2);
 }
 
@@ -35,8 +35,8 @@ TEST(MDStringTest, CreateSame) {
   char x[4] = { 'a', 'b', 'c', 'X' };
   char y[4] = { 'a', 'b', 'c', 'Y' };
 
-  MDString *s1 = getGlobalContext().getMDString(&x[0], &x[3]);
-  MDString *s2 = getGlobalContext().getMDString(&y[0], &y[3]);
+  MDString *s1 = getGlobalContext().getMDString(&x[0], 3);
+  MDString *s2 = getGlobalContext().getMDString(&y[0], 3);
   EXPECT_EQ(s1, s2);
 }
 
@@ -44,7 +44,7 @@ TEST(MDStringTest, CreateSame) {
 TEST(MDStringTest, PrintingSimple) {
   char *str = new char[13];
   strncpy(str, "testing 1 2 3", 13);
-  MDString *s = getGlobalContext().getMDString(str, str+13);
+  MDString *s = getGlobalContext().getMDString(str, 13);
   strncpy(str, "aaaaaaaaaaaaa", 13);
   delete[] str;
 
@@ -56,7 +56,7 @@ TEST(MDStringTest, PrintingSimple) {
 // Test printing of MDString with non-printable characters.
 TEST(MDStringTest, PrintingComplex) {
   char str[5] = {0, '\n', '"', '\\', -1};
-  MDString *s = getGlobalContext().getMDString(str+0, str+5);
+  MDString *s = getGlobalContext().getMDString(str+0, 5);
   std::ostringstream oss;
   s->print(oss);
   EXPECT_STREQ("metadata !\"\\00\\0A\\22\\5C\\FF\"", oss.str().c_str());
@@ -67,8 +67,8 @@ TEST(MDNodeTest, Simple) {
   char x[3] = { 'a', 'b', 'c' };
   char y[3] = { '1', '2', '3' };
 
-  MDString *s1 = getGlobalContext().getMDString(&x[0], &x[3]);
-  MDString *s2 = getGlobalContext().getMDString(&y[0], &y[3]);
+  MDString *s1 = getGlobalContext().getMDString(&x[0], 3);
+  MDString *s2 = getGlobalContext().getMDString(&y[0], 3);
   ConstantInt *CI = getGlobalContext().getConstantInt(APInt(8, 0));
 
   std::vector<Value *> V;