xref: /freebsd/contrib/llvm-project/llvm/lib/MC/MCParser/XCOFFAsmParser.cpp (revision a18b956b73cee784e5c422d20fd0e4dabebd7eee)
1 //===- XCOFFAsmParser.cpp - XCOFF Assembly Parser
2 //-----------------------------===//
3 //
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #include "llvm/BinaryFormat/XCOFF.h"
11 #include "llvm/MC/MCParser/MCAsmParser.h"
12 #include "llvm/MC/MCParser/MCAsmParserExtension.h"
13 
14 using namespace llvm;
15 
16 namespace {
17 
18 class XCOFFAsmParser : public MCAsmParserExtension {
19   MCAsmParser *Parser = nullptr;
20   MCAsmLexer *Lexer = nullptr;
21 
22   template <bool (XCOFFAsmParser::*HandlerMethod)(StringRef, SMLoc)>
23   void addDirectiveHandler(StringRef Directive) {
24     MCAsmParser::ExtensionDirectiveHandler Handler =
25         std::make_pair(this, HandleDirective<XCOFFAsmParser, HandlerMethod>);
26 
27     getParser().addDirectiveHandler(Directive, Handler);
28   }
29 
30 public:
31   XCOFFAsmParser() = default;
32 
33   void Initialize(MCAsmParser &P) override {
34     Parser = &P;
35     Lexer = &Parser->getLexer();
36     // Call the base implementation.
37     MCAsmParserExtension::Initialize(*Parser);
38 
39     addDirectiveHandler<&XCOFFAsmParser::ParseDirectiveCSect>(".csect");
40   }
41   bool ParseDirectiveCSect(StringRef, SMLoc);
42 };
43 
44 } // end anonymous namespace
45 
46 namespace llvm {
47 
48 MCAsmParserExtension *createXCOFFAsmParser() { return new XCOFFAsmParser; }
49 
50 } // end namespace llvm
51 
52 // .csect QualName [, Number ]
53 bool XCOFFAsmParser::ParseDirectiveCSect(StringRef, SMLoc) {
54   report_fatal_error("XCOFFAsmParser directive not yet supported!");
55   return false;
56 }
57