diff options
| author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-01-20 02:42:29 +0000 |
|---|---|---|
| committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-01-20 02:42:29 +0000 |
| commit | a7477285b92a5e5ffd26143a6678b2f45b2cddff (patch) | |
| tree | 1b4b35ce4f13743839674528e869a9aedde91cf0 | |
| parent | 8839cb1dc811f5d27ffb36e9e0df1c3449918767 (diff) | |
| download | bcm5719-llvm-a7477285b92a5e5ffd26143a6678b2f45b2cddff.tar.gz bcm5719-llvm-a7477285b92a5e5ffd26143a6678b2f45b2cddff.zip | |
AsmParser: PARSE_MD_FIELD() => ParseMDField(), NFC
Extract most of `PARSE_MD_FIELD()` into a function.
llvm-svn: 226539
| -rw-r--r-- | llvm/lib/AsmParser/LLParser.cpp | 25 | ||||
| -rw-r--r-- | llvm/lib/AsmParser/LLParser.h | 1 |
2 files changed, 13 insertions, 13 deletions
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp index 442a49c43ac..0ad921ae4be 100644 --- a/llvm/lib/AsmParser/LLParser.cpp +++ b/llvm/lib/AsmParser/LLParser.cpp @@ -2972,6 +2972,16 @@ bool LLParser::ParseMDFieldsImpl(ParserTy parseField, LocTy &ClosingLoc) { return ParseToken(lltok::rparen, "expected ')' here"); } +template <class FieldTy> +bool LLParser::ParseMDField(StringRef Name, FieldTy &Result) { + if (Result.Seen) + return TokError("field '" + Name + "' cannot be specified more than once"); + + LocTy Loc = Lex.getLoc(); + Lex.Lex(); + return ParseMDField(Loc, Name, Result); +} + bool LLParser::ParseSpecializedMDNode(MDNode *&N, bool IsDistinct) { assert(Lex.getKind() == lltok::MetadataVar && "Expected metadata type name"); #define DISPATCH_TO_PARSER(CLASS) \ @@ -2990,19 +3000,8 @@ bool LLParser::ParseSpecializedMDNode(MDNode *&N, bool IsDistinct) { if (!NAME.Seen) \ return Error(ClosingLoc, "missing required field '" #NAME "'"); #define PARSE_MD_FIELD(NAME, TYPE, DEFAULT) \ - do { \ - if (Lex.getStrVal() == #NAME) { \ - if (NAME.Seen) \ - return TokError("field '" #NAME \ - "' cannot be specified more than once"); \ - \ - LocTy Loc = Lex.getLoc(); \ - Lex.Lex(); \ - if (ParseMDField(Loc, #NAME, NAME)) \ - return true; \ - return false; \ - } \ - } while (0) + if (Lex.getStrVal() == #NAME) \ + return ParseMDField(#NAME, NAME); #define PARSE_MD_FIELDS() \ VISIT_MD_FIELDS(DECLARE_FIELD, DECLARE_FIELD) \ do { \ diff --git a/llvm/lib/AsmParser/LLParser.h b/llvm/lib/AsmParser/LLParser.h index ad311910a6f..235e2642ef2 100644 --- a/llvm/lib/AsmParser/LLParser.h +++ b/llvm/lib/AsmParser/LLParser.h @@ -421,6 +421,7 @@ namespace llvm { bool ParseMDField(LocTy Loc, StringRef Name, MDUnsignedField<uint32_t> &Result); bool ParseMDField(LocTy Loc, StringRef Name, MDField &Result); + template <class FieldTy> bool ParseMDField(StringRef Name, FieldTy &Result); template <class ParserTy> bool ParseMDFieldsImplBody(ParserTy parseField); template <class ParserTy> |

