diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-07-18 22:22:07 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-07-18 22:22:07 +0000 |
commit | 1edf6ca2cbb4b01db44683d5e9479a240cfcf497 (patch) | |
tree | 25d232634f4b787fd9da793a340251cbaec0ef81 /lib/MC/MCParser/ELFAsmParser.cpp | |
parent | 030794bd87d731d736da59681afdb7694131c9f2 (diff) |
MC/AsmParser: Stop playing unsafe member function pointer calls, this isn't
portable enough.
- Downside is we now double dispatch through a stub function, but this isn't
performance critical.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108661 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCParser/ELFAsmParser.cpp')
-rw-r--r-- | lib/MC/MCParser/ELFAsmParser.cpp | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/lib/MC/MCParser/ELFAsmParser.cpp b/lib/MC/MCParser/ELFAsmParser.cpp index 6b9a6720d1..b8103d13c2 100644 --- a/lib/MC/MCParser/ELFAsmParser.cpp +++ b/lib/MC/MCParser/ELFAsmParser.cpp @@ -20,6 +20,12 @@ using namespace llvm; namespace { class ELFAsmParser : public MCAsmParserExtension { + template<bool (ELFAsmParser::*Handler)(StringRef, SMLoc)> + void AddDirectiveHandler(StringRef Directive) { + getParser().AddDirectiveHandler(this, Directive, + HandleDirective<ELFAsmParser, Handler>); + } + bool ParseSectionSwitch(StringRef Section, unsigned Type, unsigned Flags, SectionKind Kind); @@ -30,18 +36,12 @@ public: // Call the base implementation. this->MCAsmParserExtension::Initialize(Parser); - Parser.AddDirectiveHandler(this, ".data", MCAsmParser::DirectiveHandler( - &ELFAsmParser::ParseSectionDirectiveData)); - Parser.AddDirectiveHandler(this, ".text", MCAsmParser::DirectiveHandler( - &ELFAsmParser::ParseSectionDirectiveText)); - Parser.AddDirectiveHandler(this, ".section", MCAsmParser::DirectiveHandler( - &ELFAsmParser::ParseDirectiveSection)); - Parser.AddDirectiveHandler(this, ".size", MCAsmParser::DirectiveHandler( - &ELFAsmParser::ParseDirectiveSize)); - Parser.AddDirectiveHandler(this, ".sleb128", MCAsmParser::DirectiveHandler( - &ELFAsmParser::ParseDirectiveLEB128)); - Parser.AddDirectiveHandler(this, ".uleb128", MCAsmParser::DirectiveHandler( - &ELFAsmParser::ParseDirectiveLEB128)); + AddDirectiveHandler<&ELFAsmParser::ParseSectionDirectiveData>(".data"); + AddDirectiveHandler<&ELFAsmParser::ParseSectionDirectiveText>(".text"); + AddDirectiveHandler<&ELFAsmParser::ParseDirectiveSection>(".section"); + AddDirectiveHandler<&ELFAsmParser::ParseDirectiveSize>(".size"); + AddDirectiveHandler<&ELFAsmParser::ParseDirectiveLEB128>(".sleb128"); + AddDirectiveHandler<&ELFAsmParser::ParseDirectiveLEB128>(".uleb128"); } bool ParseSectionDirectiveData(StringRef, SMLoc) { |