[llvm-commits] [llvm] r92273 - in /llvm/trunk/lib/AsmParser: LLParser.cpp LLParser.h

Chris Lattner sabre at nondot.org
Tue Dec 29 13:53:56 PST 2009


Author: lattner
Date: Tue Dec 29 15:53:55 2009
New Revision: 92273

URL: http://llvm.org/viewvc/llvm-project?rev=92273&view=rev
Log:
change ParseMDString and ParseMDNode to take arguments of the right type.
This exposed a raft of other problems, which I'll deal with in subsequent
patches.

Modified:
    llvm/trunk/lib/AsmParser/LLParser.cpp
    llvm/trunk/lib/AsmParser/LLParser.h

Modified: llvm/trunk/lib/AsmParser/LLParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=92273&r1=92272&r2=92273&view=diff

==============================================================================
--- llvm/trunk/lib/AsmParser/LLParser.cpp (original)
+++ llvm/trunk/lib/AsmParser/LLParser.cpp Tue Dec 29 15:53:55 2009
@@ -463,17 +463,16 @@
 
 // MDString:
 //   ::= '!' STRINGCONSTANT
-bool LLParser::ParseMDString(MetadataBase *&MDS) {
+bool LLParser::ParseMDString(MDString *&Result) {
   std::string Str;
   if (ParseStringConstant(Str)) return true;
-  MDS = MDString::get(Context, Str);
+  Result = MDString::get(Context, Str);
   return false;
 }
 
 // MDNode:
 //   ::= '!' MDNodeNumber
-// FIXME: Take an MDNode*&.
-bool LLParser::ParseMDNode(MetadataBase *&Node) {
+bool LLParser::ParseMDNode(MDNode *&Result) {
   // !{ ..., !42, ... }
   unsigned MID = 0;
   if (ParseUInt32(MID)) return true;
@@ -481,7 +480,7 @@
   // Check existing MDNode.
   std::map<unsigned, TrackingVH<MDNode> >::iterator I = MetadataCache.find(MID);
   if (I != MetadataCache.end()) {
-    Node = I->second;
+    Result = I->second;
     return false;
   }
 
@@ -489,7 +488,7 @@
   std::map<unsigned, std::pair<TrackingVH<MDNode>, LocTy> >::iterator
     FI = ForwardRefMDNodes.find(MID);
   if (FI != ForwardRefMDNodes.end()) {
-    Node = FI->second.first;
+    Result = FI->second.first;
     return false;
   }
 
@@ -499,7 +498,7 @@
   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;
+  Result = FwdNode;
   return false;
 }
 
@@ -522,10 +521,13 @@
   Lex.Lex();
   SmallVector<MetadataBase *, 8> Elts;
   do {
+    // FIXME: Eat if present.
     if (Lex.getKind() != lltok::Metadata)
       return TokError("Expected '!' here");
     Lex.Lex();
-    MetadataBase *N = 0;
+    
+    // FIXME: Will crash on mdstrings etc.
+    MDNode *N = 0;
     if (ParseMDNode(N)) return true;
     Elts.push_back(N);
   } while (EatIfPresent(lltok::comma));
@@ -562,6 +564,7 @@
   if (Lex.getKind() != lltok::lbrace)
     return TokError("Expected '{' here");
 
+  // FIXME: This doesn't make sense here.
   SmallVector<Value *, 16> Elts;
   if (ParseMDNodeVector(Elts)
       || ParseToken(lltok::rbrace, "expected end of metadata node"))
@@ -599,14 +602,16 @@
     return false;
   }
 
+  // FIXME: This can't possibly work at all.  r90497
+  
   // Standalone metadata reference
   // !{ ..., !42, ... }
-  if (!ParseMDNode((MetadataBase *&)V))
+  if (!ParseMDNode((MDNode *&)V))
     return false;
 
   // MDString:
   // '!' STRINGCONSTANT
-  if (ParseMDString((MetadataBase *&)V)) return true;
+  if (ParseMDString((MDString *&)V)) return true;
   return false;
 }
 
@@ -1118,11 +1123,11 @@
       return TokError("expected '!' here");
     Lex.Lex();
 
-    MetadataBase *Node;
+    MDNode *Node;
     if (ParseMDNode(Node)) return true;
 
     unsigned MDK = M->getMDKindID(Name.c_str());
-    MDsOnInst.push_back(std::make_pair(MDK, cast<MDNode>(Node)));
+    MDsOnInst.push_back(std::make_pair(MDK, Node));
 
     // If this is the end of the list, we're done.
     if (!EatIfPresent(lltok::comma))
@@ -1937,6 +1942,8 @@
   case lltok::Metadata: {  // !{...} MDNode, !"foo" MDString
     ID.Kind = ValID::t_Metadata;
     Lex.Lex();
+    
+    // FIXME: This doesn't belong here.
     if (Lex.getKind() == lltok::lbrace) {
       SmallVector<Value*, 16> Elts;
       if (ParseMDNodeVector(Elts) ||
@@ -1949,12 +1956,13 @@
 
     // Standalone metadata reference
     // !{ ..., !42, ... }
-    if (!ParseMDNode(ID.MetadataVal))
+    // FIXME: Split MetadataVal into one for MDNode and one for MDString.
+    if (!ParseMDNode((MDNode*&)ID.MetadataVal))
       return false;
 
     // MDString:
     //   ::= '!' STRINGCONSTANT
-    if (ParseMDString(ID.MetadataVal)) return true;
+    if (ParseMDString((MDString*&)ID.MetadataVal)) return true;
     ID.Kind = ValID::t_Metadata;
     return false;
   }
@@ -3842,6 +3850,7 @@
   Lex.Lex();
   do {
     Value *V = 0;
+    // FIXME: REWRITE.
     if (Lex.getKind() == lltok::kw_null) {
       Lex.Lex();
       V = 0;
@@ -3850,11 +3859,11 @@
       if (ParseType(Ty)) return true;
       if (Lex.getKind() == lltok::Metadata) {
         Lex.Lex();
-        MetadataBase *Node = 0;
+        MDNode *Node = 0;
         if (!ParseMDNode(Node))
           V = Node;
         else {
-          MetadataBase *MDS = 0;
+          MDString *MDS = 0;
           if (ParseMDString(MDS)) return true;
           V = MDS;
         }

Modified: llvm/trunk/lib/AsmParser/LLParser.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.h?rev=92273&r1=92272&r2=92273&view=diff

==============================================================================
--- llvm/trunk/lib/AsmParser/LLParser.h (original)
+++ llvm/trunk/lib/AsmParser/LLParser.h Tue Dec 29 15:53:55 2009
@@ -193,8 +193,8 @@
     bool ParseAlias(const std::string &Name, LocTy Loc, unsigned Visibility);
     bool ParseStandaloneMetadata();
     bool ParseNamedMetadata();
-    bool ParseMDString(MetadataBase *&S);
-    bool ParseMDNode(MetadataBase *&N);
+    bool ParseMDString(MDString *&Result);
+    bool ParseMDNode(MDNode *&Result);
 
     // Type Parsing.
     bool ParseType(PATypeHolder &Result, bool AllowVoid = false);





More information about the llvm-commits mailing list