xref: /freebsd-src/contrib/llvm-project/llvm/lib/MC/MCParser/GOFFAsmParser.cpp (revision 81ad626541db97eb356e2c1d4a20eb2a26a766ab)
1349cc55cSDimitry Andric //===- GOFFAsmParser.cpp - GOFF Assembly Parser ---------------------------===//
2349cc55cSDimitry Andric //
3349cc55cSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4349cc55cSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5349cc55cSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6349cc55cSDimitry Andric //
7349cc55cSDimitry Andric //===----------------------------------------------------------------------===//
8349cc55cSDimitry Andric 
9349cc55cSDimitry Andric #include "llvm/MC/MCParser/MCAsmParserExtension.h"
10349cc55cSDimitry Andric 
11349cc55cSDimitry Andric using namespace llvm;
12349cc55cSDimitry Andric 
13349cc55cSDimitry Andric namespace {
14349cc55cSDimitry Andric 
15349cc55cSDimitry Andric class GOFFAsmParser : public MCAsmParserExtension {
16349cc55cSDimitry Andric   template <bool (GOFFAsmParser::*HandlerMethod)(StringRef, SMLoc)>
addDirectiveHandler(StringRef Directive)17349cc55cSDimitry Andric   void addDirectiveHandler(StringRef Directive) {
18349cc55cSDimitry Andric     MCAsmParser::ExtensionDirectiveHandler Handler =
19349cc55cSDimitry Andric         std::make_pair(this, HandleDirective<GOFFAsmParser, HandlerMethod>);
20349cc55cSDimitry Andric 
21349cc55cSDimitry Andric     getParser().addDirectiveHandler(Directive, Handler);
22349cc55cSDimitry Andric   }
23349cc55cSDimitry Andric 
24349cc55cSDimitry Andric public:
25*81ad6265SDimitry Andric   GOFFAsmParser() = default;
26349cc55cSDimitry Andric 
Initialize(MCAsmParser & Parser)27349cc55cSDimitry Andric   void Initialize(MCAsmParser &Parser) override {
28349cc55cSDimitry Andric     // Call the base implementation.
29349cc55cSDimitry Andric     this->MCAsmParserExtension::Initialize(Parser);
30349cc55cSDimitry Andric   }
31349cc55cSDimitry Andric };
32349cc55cSDimitry Andric 
33349cc55cSDimitry Andric } // namespace
34349cc55cSDimitry Andric 
35349cc55cSDimitry Andric namespace llvm {
36349cc55cSDimitry Andric 
createGOFFAsmParser()37349cc55cSDimitry Andric MCAsmParserExtension *createGOFFAsmParser() { return new GOFFAsmParser; }
38349cc55cSDimitry Andric 
39349cc55cSDimitry Andric } // namespace llvm
40