Move the metadata constructors back to 2.5 syntax.
authorOwen Anderson <resistor@mac.com>
Fri, 31 Jul 2009 21:35:40 +0000 (21:35 +0000)
committerOwen Anderson <resistor@mac.com>
Fri, 31 Jul 2009 21:35:40 +0000 (21:35 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77733 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/LLVMContext.h
include/llvm/Metadata.h
lib/AsmParser/LLParser.cpp
lib/Bitcode/Reader/BitcodeReader.cpp
lib/VMCore/LLVMContext.cpp
lib/VMCore/LLVMContextImpl.cpp
lib/VMCore/LLVMContextImpl.h
lib/VMCore/Metadata.cpp

index 9150e6160ec4857d0f9a80b832f978c1d79fbfb6..038ee35aee034e05448180cfb2f424aa6505a515 100644 (file)
@@ -61,20 +61,11 @@ class LLVMContext {
   friend class ConstantArray;
   friend class ConstantVector;
   friend class ConstantAggregateZero;
+  friend class MDNode;
+  friend class MDString;
 public:
   LLVMContext();
   ~LLVMContext();
-  
-  // MDNode accessors
-  MDNode* getMDNode(Value* const* Vals, unsigned NumVals);
-  
-  // MDString accessors
-  MDString* getMDString(const StringRef &Str);
-  
-  
-  // Methods for erasing constants
-  void erase(MDString *M);
-  void erase(MDNode *M);
 };
 
 /// FOR BACKWARDS COMPATIBILITY - Returns a global context.
index 75269191563d1c493af865464e4f41d558a84149..95100c27496aff6c42a621f4c8c5f52cd5d302a1 100644 (file)
@@ -27,6 +27,7 @@
 
 namespace llvm {
 class Constant;
+class LLVMContext;
 
 //===----------------------------------------------------------------------===//
 // MetadataBase  - A base class for MDNode, MDString and NamedMDNode.
@@ -64,13 +65,14 @@ public:
 class MDString : public MetadataBase {
   MDString(const MDString &);            // DO NOT IMPLEMENT
   StringRef Str;
-  friend class LLVMContextImpl;
 
 protected:
   explicit MDString(const char *begin, unsigned l)
     : MetadataBase(Type::MetadataTy, Value::MDStringVal), Str(begin, l) {}
 
 public:
+  static MDString *get(LLVMContext &Context, const StringRef &Str);
+  
   StringRef getString() const { return Str; }
 
   unsigned length() const { return Str.size(); }
@@ -97,14 +99,15 @@ public:
 class MDNode : public MetadataBase, public FoldingSetNode {
   MDNode(const MDNode &);      // DO NOT IMPLEMENT
 
-  friend class LLVMContextImpl;
-
   SmallVector<WeakVH, 4> Node;
   typedef SmallVectorImpl<WeakVH>::iterator elem_iterator;
 
 protected:
   explicit MDNode(Value*const* Vals, unsigned NumVals);
 public:
+  static MDNode *get(LLVMContext &Context, 
+                     Value* const* Vals, unsigned NumVals);
+  
   typedef SmallVectorImpl<WeakVH>::const_iterator const_elem_iterator;
 
   Value *getElement(unsigned i) const {
index ac3570216d563defce8910fccf8ed1fda5572fd7..0ba93b131a3828a2cab654e41cad2c10b0988fec 100644 (file)
@@ -374,7 +374,7 @@ bool LLParser::ParseNamedGlobal() {
 bool LLParser::ParseMDString(MetadataBase *&MDS) {
   std::string Str;
   if (ParseStringConstant(Str)) return true;
-  MDS = Context.getMDString(Str);
+  MDS = MDString::get(Context, Str);
   return false;
 }
 
@@ -403,8 +403,8 @@ bool LLParser::ParseMDNode(MetadataBase *&Node) {
   // Create MDNode forward reference
   SmallVector<Value *, 1> Elts;
   std::string FwdRefName = "llvm.mdnode.fwdref." + utostr(MID);
-  Elts.push_back(Context.getMDString(FwdRefName));
-  MDNode *FwdNode = Context.getMDNode(Elts.data(), Elts.size());
+  Elts.push_back(MDString::get(Context, FwdRefName));
+  MDNode *FwdNode = MDNode::get(Context, Elts.data(), Elts.size());
   ForwardRefMDNodes[MID] = std::make_pair(FwdNode, Lex.getLoc());
   Node = FwdNode;
   return false;
@@ -474,7 +474,7 @@ bool LLParser::ParseStandaloneMetadata() {
       || ParseToken(lltok::rbrace, "expected end of metadata node"))
     return true;
 
-  MDNode *Init = Context.getMDNode(Elts.data(), Elts.size());
+  MDNode *Init = MDNode::get(Context, Elts.data(), Elts.size());
   MetadataCache[MetadataID] = Init;
   std::map<unsigned, std::pair<MetadataBase *, LocTy> >::iterator
     FI = ForwardRefMDNodes.find(MetadataID);
@@ -1729,7 +1729,7 @@ bool LLParser::ParseValID(ValID &ID) {
           ParseToken(lltok::rbrace, "expected end of metadata node"))
         return true;
 
-      ID.MetadataVal = Context.getMDNode(Elts.data(), Elts.size());
+      ID.MetadataVal = MDNode::get(Context, Elts.data(), Elts.size());
       return false;
     }
 
index 40920d87e9aa7948b9a3b28a598f35de7deb07a9..81fdbd29afb95ed9efc046dc137b32a9488e6339 100644 (file)
@@ -774,7 +774,7 @@ bool BitcodeReader::ParseMetadata() {
         else
           Elts.push_back(NULL);
       }
-      Value *V = Context.getMDNode(&Elts[0], Elts.size());
+      Value *V = MDNode::get(Context, &Elts[0], Elts.size());
       ValueList.AssignValue(V, NextValueNo++);
       break;
     }
@@ -784,7 +784,8 @@ bool BitcodeReader::ParseMetadata() {
       String.resize(MDStringLength);
       for (unsigned i = 0; i != MDStringLength; ++i)
         String[i] = Record[i];
-      Value *V = Context.getMDString(StringRef(String.data(), String.size()));
+      Value *V = MDString::get(Context, 
+                               StringRef(String.data(), String.size()));
       ValueList.AssignValue(V, NextValueNo++);
       break;
     }
index 107905f40aa6dd3c17b7fbb3f8d2bb9fdf26946b..3cd715866e5092bc04724853ff3ebd00bacde0ad 100644 (file)
@@ -31,21 +31,3 @@ LLVMContext& llvm::getGlobalContext() {
 
 LLVMContext::LLVMContext() : pImpl(new LLVMContextImpl(*this)) { }
 LLVMContext::~LLVMContext() { delete pImpl; }
-
-// MDNode accessors
-MDNode* LLVMContext::getMDNode(Value* const* Vals, unsigned NumVals) {
-  return pImpl->getMDNode(Vals, NumVals);
-}
-
-// MDString accessors
-MDString* LLVMContext::getMDString(const StringRef &Str) {
-  return pImpl->getMDString(Str.data(), Str.size());
-}
-
-void LLVMContext::erase(MDString *M) {
-  pImpl->erase(M);
-}
-
-void LLVMContext::erase(MDNode *M) {
-  pImpl->erase(M);
-}
index bba5861cc0f7c0d8790b138f50b4c4b5ce04349f..b29868ae480d182c35c8a0b70a9b7332bba5be87 100644 (file)
 using namespace llvm;
 
 LLVMContextImpl::LLVMContextImpl(LLVMContext &C) :
-    Context(C), TheTrueVal(0), TheFalseVal(0) { }
-
-MDString *LLVMContextImpl::getMDString(const char *StrBegin,
-                                       unsigned StrLength) {
-  sys::SmartScopedWriter<true> Writer(ConstantsLock);
-  StringMapEntry<MDString *> &Entry = 
-    MDStringCache.GetOrCreateValue(StringRef(StrBegin, StrLength));
-  MDString *&S = Entry.getValue();
-  if (!S) S = new MDString(Entry.getKeyData(),
-                           Entry.getKeyLength());
-
-  return S;
-}
-
-MDNode *LLVMContextImpl::getMDNode(Value*const* Vals, unsigned NumVals) {
-  FoldingSetNodeID ID;
-  for (unsigned i = 0; i != NumVals; ++i)
-    ID.AddPointer(Vals[i]);
-
-  ConstantsLock.reader_acquire();
-  void *InsertPoint;
-  MDNode *N = MDNodeSet.FindNodeOrInsertPos(ID, InsertPoint);
-  ConstantsLock.reader_release();
-  
-  if (!N) {
-    sys::SmartScopedWriter<true> Writer(ConstantsLock);
-    N = MDNodeSet.FindNodeOrInsertPos(ID, InsertPoint);
-    if (!N) {
-      // InsertPoint will have been set by the FindNodeOrInsertPos call.
-      N = new MDNode(Vals, NumVals);
-      MDNodeSet.InsertNode(N, InsertPoint);
-    }
-  }
-
-  return N;
-}
-
-// *** erase methods ***
-
-void LLVMContextImpl::erase(MDString *M) {
-  sys::SmartScopedWriter<true> Writer(ConstantsLock);
-  MDStringCache.erase(MDStringCache.find(M->getString()));
-}
-
-void LLVMContextImpl::erase(MDNode *M) {
-  sys::SmartScopedWriter<true> Writer(ConstantsLock);
-  MDNodeSet.RemoveNode(M);
-}
+    Context(C), TheTrueVal(0), TheFalseVal(0) { }
\ No newline at end of file
index b20b65d7f2161f9be7ba1614269db537528e1b74..7a29a8421f4eb5886cbfe8dbf0eb440c3285a34f 100644 (file)
@@ -462,15 +462,10 @@ class LLVMContextImpl {
   friend class ConstantArray;
   friend class ConstantVector;
   friend class ConstantAggregateZero;
+  friend class MDNode;
+  friend class MDString;
 public:
   LLVMContextImpl(LLVMContext &C);
-  
-  MDString *getMDString(const char *StrBegin, unsigned StrLength);
-  
-  MDNode *getMDNode(Value*const* Vals, unsigned NumVals);
-  
-  void erase(MDString *M);
-  void erase(MDNode *M);
 };
 
 }
index 48db0b4f0b3a33e517a400860727d2c79458ee2a..bf0611f9e468c67c3165710daa5bcce12393a7a8 100644 (file)
 //
 //===----------------------------------------------------------------------===//
 
+#include "LLVMContextImpl.h"
 #include "llvm/Metadata.h"
+#include "llvm/LLVMContext.h"
 #include "llvm/Module.h"
 #include "SymbolTableListTraitsImpl.h"
 using namespace llvm;
 
+//===----------------------------------------------------------------------===//
+//MDString implementation
+//
+MDString *MDString::get(LLVMContext &Context, const StringRef &Str) {
+  LLVMContextImpl *pImpl = Context.pImpl;
+  sys::SmartScopedWriter<true> Writer(pImpl->ConstantsLock);
+  StringMapEntry<MDString *> &Entry = 
+    pImpl->MDStringCache.GetOrCreateValue(Str);
+  MDString *&S = Entry.getValue();
+  if (!S) S = new MDString(Entry.getKeyData(),
+                           Entry.getKeyLength());
+
+  return S;
+}
+
 //===----------------------------------------------------------------------===//
 //MDNode implementation
 //
@@ -30,6 +47,30 @@ void MDNode::Profile(FoldingSetNodeID &ID) const {
     ID.AddPointer(*I);
 }
 
+MDNode *MDNode::get(LLVMContext &Context, Value*const* Vals, unsigned NumVals) {
+  LLVMContextImpl *pImpl = Context.pImpl;
+  FoldingSetNodeID ID;
+  for (unsigned i = 0; i != NumVals; ++i)
+    ID.AddPointer(Vals[i]);
+
+  pImpl->ConstantsLock.reader_acquire();
+  void *InsertPoint;
+  MDNode *N = pImpl->MDNodeSet.FindNodeOrInsertPos(ID, InsertPoint);
+  pImpl->ConstantsLock.reader_release();
+  
+  if (!N) {
+    sys::SmartScopedWriter<true> Writer(pImpl->ConstantsLock);
+    N = pImpl->MDNodeSet.FindNodeOrInsertPos(ID, InsertPoint);
+    if (!N) {
+      // InsertPoint will have been set by the FindNodeOrInsertPos call.
+      N = new MDNode(Vals, NumVals);
+      pImpl->MDNodeSet.InsertNode(N, InsertPoint);
+    }
+  }
+
+  return N;
+}
+
 //===----------------------------------------------------------------------===//
 //NamedMDNode implementation
 //