diff options
Diffstat (limited to 'llvm/lib/AsmParser')
-rw-r--r-- | llvm/lib/AsmParser/LLParser.cpp | 25 | ||||
-rw-r--r-- | llvm/lib/AsmParser/LLParser.h | 2 |
2 files changed, 17 insertions, 10 deletions
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp index ff313ce2d74..467ed484f92 100644 --- a/llvm/lib/AsmParser/LLParser.cpp +++ b/llvm/lib/AsmParser/LLParser.cpp @@ -2953,16 +2953,7 @@ bool LLParser::ParseMDField(LocTy Loc, StringRef Name, MDField &Result) { } template <class ParserTy> -bool LLParser::ParseMDFieldsImpl(ParserTy parseField, LocTy &ClosingLoc) { - assert(Lex.getKind() == lltok::MetadataVar && "Expected metadata type name"); - Lex.Lex(); - - if (ParseToken(lltok::lparen, "expected '(' here")) - return true; - ClosingLoc = Lex.getLoc(); - if (EatIfPresent(lltok::rparen)) - return false; - +bool LLParser::ParseMDFieldsImplBody(ParserTy parseField) { do { if (Lex.getKind() != lltok::LabelStr) return TokError("expected field label here"); @@ -2971,6 +2962,20 @@ bool LLParser::ParseMDFieldsImpl(ParserTy parseField, LocTy &ClosingLoc) { return true; } while (EatIfPresent(lltok::comma)); + return false; +} + +template <class ParserTy> +bool LLParser::ParseMDFieldsImpl(ParserTy parseField, LocTy &ClosingLoc) { + assert(Lex.getKind() == lltok::MetadataVar && "Expected metadata type name"); + Lex.Lex(); + + if (ParseToken(lltok::lparen, "expected '(' here")) + return true; + if (Lex.getKind() != lltok::rparen) + if (ParseMDFieldsImplBody(parseField)) + return true; + ClosingLoc = Lex.getLoc(); return ParseToken(lltok::rparen, "expected ')' here"); } diff --git a/llvm/lib/AsmParser/LLParser.h b/llvm/lib/AsmParser/LLParser.h index 8175fbd9352..ad311910a6f 100644 --- a/llvm/lib/AsmParser/LLParser.h +++ b/llvm/lib/AsmParser/LLParser.h @@ -422,6 +422,8 @@ namespace llvm { MDUnsignedField<uint32_t> &Result); bool ParseMDField(LocTy Loc, StringRef Name, MDField &Result); template <class ParserTy> + bool ParseMDFieldsImplBody(ParserTy parseField); + template <class ParserTy> bool ParseMDFieldsImpl(ParserTy parseField, LocTy &ClosingLoc); bool ParseSpecializedMDNode(MDNode *&N, bool IsDistinct = false); bool ParseMDLocation(MDNode *&Result, bool IsDistinct); |