From 89aee384c15d89adb84732a5fd32f206ad9f171c Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Wed, 4 Feb 2015 22:05:21 +0000 Subject: [PATCH] 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228211 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AsmParser/LLParser.cpp | 42 ++++++++++++++++++++++++++++++++++++++ lib/AsmParser/LLParser.h | 40 ++---------------------------------- 2 files changed, 44 insertions(+), 38 deletions(-) diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp index 31c9d65d1e2..427b38ee3b8 100644 --- a/lib/AsmParser/LLParser.cpp +++ b/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 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 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 { + MDField() : ImplTy(nullptr) {} +}; +struct MDStringField : public MDFieldImpl { + MDStringField() : ImplTy(std::string()) {} +}; +struct MDFieldList : public MDFieldImpl> { + MDFieldList() : ImplTy(SmallVector()) {} +}; + +} // 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(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 MDs; if (ParseMDNodeVector(MDs)) diff --git a/lib/AsmParser/LLParser.h b/lib/AsmParser/LLParser.h index c9aafd99740..12506e53684 100644 --- a/lib/AsmParser/LLParser.h +++ b/lib/AsmParser/LLParser.h @@ -80,39 +80,6 @@ namespace llvm { } }; - /// Structure to represent an optional metadata field. - template 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 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 { - MDField() : ImplTy(nullptr) {} - }; - struct MDStringField : public MDFieldImpl { - MDStringField() : ImplTy(std::string()) {} - }; - struct MDFieldList : public MDFieldImpl> { - MDFieldList() : ImplTy(SmallVector()) {} - }; - class LLParser { public: typedef LLLexer::LocTy LocTy; @@ -426,11 +393,8 @@ namespace llvm { bool ParseMDNodeVector(SmallVectorImpl &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 + bool ParseMDField(LocTy Loc, StringRef Name, FieldTy &Result); template bool ParseMDField(StringRef Name, FieldTy &Result); template bool ParseMDFieldsImplBody(ParserTy parseField); -- 2.34.1