diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-02-04 22:05:21 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-02-04 22:05:21 +0000 |
commit | 077c0318dcf2e996df82924b232c55c525242949 (patch) | |
tree | 2c3a4e0930b006fdbb5459c9deac728d345182dd /llvm/lib | |
parent | 79ede571947ff1232f1d63d6249299003b78b777 (diff) | |
download | bcm5719-llvm-077c0318dcf2e996df82924b232c55c525242949.tar.gz bcm5719-llvm-077c0318dcf2e996df82924b232c55c525242949.zip |
AsmParser: Move MDField details to source file, NFC
Move all the types of `MDField` to an anonymous namespace in the source
file. This also eliminates the duplication of `ParseMDField()`
declarations in the header for each new field type.
llvm-svn: 228211
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/AsmParser/LLParser.cpp | 42 | ||||
-rw-r--r-- | llvm/lib/AsmParser/LLParser.h | 40 |
2 files changed, 44 insertions, 38 deletions
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp index 31c9d65d1e2..427b38ee3b8 100644 --- a/llvm/lib/AsmParser/LLParser.cpp +++ b/llvm/lib/AsmParser/LLParser.cpp @@ -2923,6 +2923,44 @@ bool LLParser::ParseMDNodeTail(MDNode *&N) { return ParseMDNodeID(N); } +namespace { + +/// Structure to represent an optional metadata field. +template <class FieldTy> struct MDFieldImpl { + typedef MDFieldImpl ImplTy; + FieldTy Val; + bool Seen; + + void assign(FieldTy Val) { + Seen = true; + this->Val = std::move(Val); + } + + explicit MDFieldImpl(FieldTy Default) + : Val(std::move(Default)), Seen(false) {} +}; +struct MDUnsignedField : public MDFieldImpl<uint64_t> { + uint64_t Max; + + MDUnsignedField(uint64_t Default = 0, uint64_t Max = UINT64_MAX) + : ImplTy(Default), Max(Max) {} +}; +struct DwarfTagField : public MDUnsignedField { + DwarfTagField() : MDUnsignedField(0, ~0u >> 16) {} +}; +struct MDField : public MDFieldImpl<Metadata *> { + MDField() : ImplTy(nullptr) {} +}; +struct MDStringField : public MDFieldImpl<std::string> { + MDStringField() : ImplTy(std::string()) {} +}; +struct MDFieldList : public MDFieldImpl<SmallVector<Metadata *, 4>> { + MDFieldList() : ImplTy(SmallVector<Metadata *, 4>()) {} +}; + +} // end namespace + +template <> bool LLParser::ParseMDField(LocTy Loc, StringRef Name, MDUnsignedField &Result) { if (Lex.getKind() != lltok::APSInt || Lex.getAPSIntVal().isSigned()) @@ -2938,6 +2976,7 @@ bool LLParser::ParseMDField(LocTy Loc, StringRef Name, return false; } +template <> bool LLParser::ParseMDField(LocTy Loc, StringRef Name, DwarfTagField &Result) { if (Lex.getKind() == lltok::APSInt) return ParseMDField(Loc, Name, static_cast<MDUnsignedField &>(Result)); @@ -2955,6 +2994,7 @@ bool LLParser::ParseMDField(LocTy Loc, StringRef Name, DwarfTagField &Result) { return false; } +template <> bool LLParser::ParseMDField(LocTy Loc, StringRef Name, MDField &Result) { Metadata *MD; if (ParseMetadata(MD, nullptr)) @@ -2964,6 +3004,7 @@ bool LLParser::ParseMDField(LocTy Loc, StringRef Name, MDField &Result) { return false; } +template <> bool LLParser::ParseMDField(LocTy Loc, StringRef Name, MDStringField &Result) { std::string S; if (ParseStringConstant(S)) @@ -2973,6 +3014,7 @@ bool LLParser::ParseMDField(LocTy Loc, StringRef Name, MDStringField &Result) { return false; } +template <> bool LLParser::ParseMDField(LocTy Loc, StringRef Name, MDFieldList &Result) { SmallVector<Metadata *, 4> MDs; if (ParseMDNodeVector(MDs)) diff --git a/llvm/lib/AsmParser/LLParser.h b/llvm/lib/AsmParser/LLParser.h index c9aafd99740..12506e53684 100644 --- a/llvm/lib/AsmParser/LLParser.h +++ b/llvm/lib/AsmParser/LLParser.h @@ -80,39 +80,6 @@ namespace llvm { } }; - /// Structure to represent an optional metadata field. - template <class FieldTy> struct MDFieldImpl { - typedef MDFieldImpl ImplTy; - FieldTy Val; - bool Seen; - - void assign(FieldTy Val) { - Seen = true; - this->Val = std::move(Val); - } - - explicit MDFieldImpl(FieldTy Default) - : Val(std::move(Default)), Seen(false) {} - }; - struct MDUnsignedField : public MDFieldImpl<uint64_t> { - uint64_t Max; - - MDUnsignedField(uint64_t Default = 0, uint64_t Max = UINT64_MAX) - : ImplTy(Default), Max(Max) {} - }; - struct DwarfTagField : public MDUnsignedField { - DwarfTagField() : MDUnsignedField(0, ~0u >> 16) {} - }; - struct MDField : public MDFieldImpl<Metadata *> { - MDField() : ImplTy(nullptr) {} - }; - struct MDStringField : public MDFieldImpl<std::string> { - MDStringField() : ImplTy(std::string()) {} - }; - struct MDFieldList : public MDFieldImpl<SmallVector<Metadata *, 4>> { - MDFieldList() : ImplTy(SmallVector<Metadata *, 4>()) {} - }; - class LLParser { public: typedef LLLexer::LocTy LocTy; @@ -426,11 +393,8 @@ namespace llvm { bool ParseMDNodeVector(SmallVectorImpl<Metadata *> &MDs); bool ParseInstructionMetadata(Instruction *Inst, PerFunctionState *PFS); - bool ParseMDField(LocTy Loc, StringRef Name, MDUnsignedField &Result); - bool ParseMDField(LocTy Loc, StringRef Name, DwarfTagField &Result); - bool ParseMDField(LocTy Loc, StringRef Name, MDField &Result); - bool ParseMDField(LocTy Loc, StringRef Name, MDStringField &Result); - bool ParseMDField(LocTy Loc, StringRef Name, MDFieldList &Result); + template <class FieldTy> + bool ParseMDField(LocTy Loc, StringRef Name, FieldTy &Result); template <class FieldTy> bool ParseMDField(StringRef Name, FieldTy &Result); template <class ParserTy> bool ParseMDFieldsImplBody(ParserTy parseField); |