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&: *Parser); |
38 | |
39 | addDirectiveHandler<&XCOFFAsmParser::ParseDirectiveCSect>(Directive: ".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(reason: "XCOFFAsmParser directive not yet supported!"); |
55 | return false; |
56 | } |
57 |