From 3f5132a024960b7d2e226a210c5923c094f036ef Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 29 Dec 2009 22:40:21 +0000 Subject: [PATCH] factor code even more. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92280 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AsmParser/LLParser.cpp | 40 +++++++++++++------------------------- 1 file changed, 14 insertions(+), 26 deletions(-) diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp index a41c5960939..0ec7023d01c 100644 --- a/lib/AsmParser/LLParser.cpp +++ b/lib/AsmParser/LLParser.cpp @@ -539,31 +539,23 @@ bool LLParser::ParseStandaloneMetadata() { assert(Lex.getKind() == lltok::Metadata); Lex.Lex(); unsigned MetadataID = 0; - if (ParseUInt32(MetadataID)) - return true; - if (MetadataCache.count(MetadataID)) - return TokError("Metadata id is already used"); - if (ParseToken(lltok::equal, "expected '=' here")) - return true; LocTy TyLoc; PATypeHolder Ty(Type::getVoidTy(Context)); - if (ParseType(Ty, TyLoc)) - return true; - - if (Lex.getKind() != lltok::Metadata) - return TokError("Expected metadata here"); - - Lex.Lex(); - if (Lex.getKind() != lltok::lbrace) - return TokError("Expected '{' here"); - - // FIXME: This doesn't make sense here. SmallVector Elts; - if (ParseMDNodeVector(Elts) - || ParseToken(lltok::rbrace, "expected end of metadata node")) + // FIXME: This doesn't make sense here. Pull braced MD stuff parsing out! + if (ParseUInt32(MetadataID) || + ParseToken(lltok::equal, "expected '=' here") || + ParseType(Ty, TyLoc) || + ParseToken(lltok::Metadata, "Expected metadata here") || + ParseToken(lltok::lbrace, "Expected '{' here") || + ParseMDNodeVector(Elts) || + ParseToken(lltok::rbrace, "expected end of metadata node")) return true; + if (MetadataCache.count(MetadataID)) + return TokError("Metadata id is already used"); + MDNode *Init = MDNode::get(Context, Elts.data(), Elts.size()); MetadataCache[MetadataID] = Init; std::map, LocTy> >::iterator @@ -585,14 +577,12 @@ bool LLParser::ParseInlineMetadata(Value *&V, PerFunctionState &PFS) { V = 0; Lex.Lex(); - if (Lex.getKind() == lltok::lbrace) { - Lex.Lex(); + if (EatIfPresent(lltok::lbrace)) { if (ParseTypeAndValue(V, PFS) || ParseToken(lltok::rbrace, "expected end of metadata node")) return true; - Value *Vals[] = { V }; - V = MDNode::get(Context, Vals, 1); + V = MDNode::get(Context, &V, 1); return false; } @@ -1938,7 +1928,7 @@ bool LLParser::ParseValID(ValID &ID) { Lex.Lex(); // FIXME: This doesn't belong here. - if (Lex.getKind() == lltok::lbrace) { + if (EatIfPresent(lltok::lbrace)) { SmallVector Elts; if (ParseMDNodeVector(Elts) || ParseToken(lltok::rbrace, "expected end of metadata node")) @@ -3840,8 +3830,6 @@ bool LLParser::ParseInsertValue(Instruction *&Inst, PerFunctionState &PFS) { /// Element /// ::= 'null' | TypeAndValue bool LLParser::ParseMDNodeVector(SmallVectorImpl &Elts) { - assert(Lex.getKind() == lltok::lbrace); - Lex.Lex(); do { Value *V = 0; // FIXME: REWRITE.