summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-01-20 02:42:29 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-01-20 02:42:29 +0000
commita7477285b92a5e5ffd26143a6678b2f45b2cddff (patch)
tree1b4b35ce4f13743839674528e869a9aedde91cf0
parent8839cb1dc811f5d27ffb36e9e0df1c3449918767 (diff)
downloadbcm5719-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.cpp25
-rw-r--r--llvm/lib/AsmParser/LLParser.h1
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>
OpenPOWER on IntegriCloud