[Alignment][NFC] Use Align with TargetLowering::setMinFunctionAlignment
[llvm-core.git] / include / llvm / MC / MCParser / MCAsmParserExtension.h
blob5d2afe81a54ba7422137e4dcd7853fc3c10129fe
1 //===- llvm/MC/MCAsmParserExtension.h - Asm Parser Hooks --------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_MC_MCPARSER_MCASMPARSEREXTENSION_H
10 #define LLVM_MC_MCPARSER_MCASMPARSEREXTENSION_H
12 #include "llvm/ADT/STLExtras.h"
13 #include "llvm/ADT/StringRef.h"
14 #include "llvm/MC/MCParser/MCAsmLexer.h"
15 #include "llvm/MC/MCParser/MCAsmParser.h"
16 #include "llvm/Support/SMLoc.h"
18 namespace llvm {
20 class Twine;
22 /// Generic interface for extending the MCAsmParser,
23 /// which is implemented by target and object file assembly parser
24 /// implementations.
25 class MCAsmParserExtension {
26 MCAsmParser *Parser;
28 protected:
29 MCAsmParserExtension();
31 // Helper template for implementing static dispatch functions.
32 template<typename T, bool (T::*Handler)(StringRef, SMLoc)>
33 static bool HandleDirective(MCAsmParserExtension *Target,
34 StringRef Directive,
35 SMLoc DirectiveLoc) {
36 T *Obj = static_cast<T*>(Target);
37 return (Obj->*Handler)(Directive, DirectiveLoc);
40 bool BracketExpressionsSupported = false;
42 public:
43 MCAsmParserExtension(const MCAsmParserExtension &) = delete;
44 MCAsmParserExtension &operator=(const MCAsmParserExtension &) = delete;
45 virtual ~MCAsmParserExtension();
47 /// Initialize the extension for parsing using the given \p Parser.
48 /// The extension should use the AsmParser interfaces to register its
49 /// parsing routines.
50 virtual void Initialize(MCAsmParser &Parser);
52 /// \name MCAsmParser Proxy Interfaces
53 /// @{
55 MCContext &getContext() { return getParser().getContext(); }
57 MCAsmLexer &getLexer() { return getParser().getLexer(); }
58 const MCAsmLexer &getLexer() const {
59 return const_cast<MCAsmParserExtension *>(this)->getLexer();
62 MCAsmParser &getParser() { return *Parser; }
63 const MCAsmParser &getParser() const {
64 return const_cast<MCAsmParserExtension*>(this)->getParser();
67 SourceMgr &getSourceManager() { return getParser().getSourceManager(); }
68 MCStreamer &getStreamer() { return getParser().getStreamer(); }
70 bool Warning(SMLoc L, const Twine &Msg) {
71 return getParser().Warning(L, Msg);
74 bool Error(SMLoc L, const Twine &Msg, SMRange Range = SMRange()) {
75 return getParser().Error(L, Msg, Range);
78 void Note(SMLoc L, const Twine &Msg) {
79 getParser().Note(L, Msg);
82 bool TokError(const Twine &Msg) {
83 return getParser().TokError(Msg);
86 const AsmToken &Lex() { return getParser().Lex(); }
87 const AsmToken &getTok() { return getParser().getTok(); }
88 bool parseToken(AsmToken::TokenKind T,
89 const Twine &Msg = "unexpected token") {
90 return getParser().parseToken(T, Msg);
93 bool parseMany(function_ref<bool()> parseOne, bool hasComma = true) {
94 return getParser().parseMany(parseOne, hasComma);
97 bool parseOptionalToken(AsmToken::TokenKind T) {
98 return getParser().parseOptionalToken(T);
101 bool check(bool P, const Twine &Msg) {
102 return getParser().check(P, Msg);
105 bool check(bool P, SMLoc Loc, const Twine &Msg) {
106 return getParser().check(P, Loc, Msg);
109 bool addErrorSuffix(const Twine &Suffix) {
110 return getParser().addErrorSuffix(Suffix);
113 bool HasBracketExpressions() const { return BracketExpressionsSupported; }
115 /// @}
118 } // end namespace llvm
120 #endif // LLVM_MC_MCPARSER_MCASMPARSEREXTENSION_H