LLVM 22.0.0git
MCAsmParserExtension.h
Go to the documentation of this file.
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//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_MC_MCPARSER_MCASMPARSEREXTENSION_H
10#define LLVM_MC_MCPARSER_MCASMPARSEREXTENSION_H
11
13#include "llvm/ADT/StringRef.h"
16#include "llvm/Support/SMLoc.h"
17
18namespace llvm {
19
20class Twine;
21
22/// Generic interface for extending the MCAsmParser,
23/// which is implemented by target and object file assembly parser
24/// implementations.
26 MCAsmParser *Parser = nullptr;
27
28protected:
30
31 // Helper template for implementing static dispatch functions.
32 template<typename T, bool (T::*Handler)(StringRef, SMLoc)>
35 SMLoc DirectiveLoc) {
36 T *Obj = static_cast<T*>(Target);
37 return (Obj->*Handler)(Directive, DirectiveLoc);
38 }
39
40 bool BracketExpressionsSupported = false;
41
42public:
46
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);
51
52 /// \name MCAsmParser Proxy Interfaces
53 /// @{
54
55 MCContext &getContext() { return getParser().getContext(); }
56
57 AsmLexer &getLexer() { return getParser().getLexer(); }
58 const AsmLexer &getLexer() const {
59 return const_cast<MCAsmParserExtension *>(this)->getLexer();
60 }
61
62 MCAsmParser &getParser() { return *Parser; }
63 const MCAsmParser &getParser() const {
64 return const_cast<MCAsmParserExtension*>(this)->getParser();
65 }
66
67 SourceMgr &getSourceManager() { return getParser().getSourceManager(); }
68 MCStreamer &getStreamer() { return getParser().getStreamer(); }
69
70 bool Warning(SMLoc L, const Twine &Msg) {
71 return getParser().Warning(L, Msg);
72 }
73
74 bool Error(SMLoc L, const Twine &Msg, SMRange Range = SMRange()) {
75 return getParser().Error(L, Msg, Range);
76 }
77
78 void Note(SMLoc L, const Twine &Msg) {
79 getParser().Note(L, Msg);
80 }
81
82 bool TokError(const Twine &Msg) {
83 return getParser().TokError(Msg);
84 }
85
86 const AsmToken &Lex() { return getParser().Lex(); }
87 const AsmToken &getTok() { return getParser().getTok(); }
89 const Twine &Msg = "unexpected token") {
90 return getParser().parseToken(T, Msg);
91 }
92 bool parseEOL() { return getParser().parseEOL(); }
93
94 bool parseMany(function_ref<bool()> parseOne, bool hasComma = true) {
95 return getParser().parseMany(parseOne, hasComma);
96 }
97
99 return getParser().parseOptionalToken(T);
100 }
101
102 bool parseDirectiveCGProfile(StringRef, SMLoc);
103
104 bool maybeParseUniqueID(int64_t &UniqueID);
105
106 bool check(bool P, const Twine &Msg) {
107 return getParser().check(P, Msg);
108 }
109
110 bool check(bool P, SMLoc Loc, const Twine &Msg) {
111 return getParser().check(P, Loc, Msg);
112 }
113
114 bool addErrorSuffix(const Twine &Suffix) {
115 return getParser().addErrorSuffix(Suffix);
116 }
117
118 bool HasBracketExpressions() const { return BracketExpressionsSupported; }
119
120 /// @}
121};
122
123} // end namespace llvm
124
125#endif // LLVM_MC_MCPARSER_MCASMPARSEREXTENSION_H
#define LLVM_ABI
Definition: Compiler.h:213
ConstantRange Range(APInt(BitWidth, Low), APInt(BitWidth, High))
#define P(N)
Target independent representation for an assembler token.
Definition: MCAsmMacro.h:22
Generic interface for extending the MCAsmParser, which is implemented by target and object file assem...
const MCAsmParser & getParser() const
bool parseOptionalToken(AsmToken::TokenKind T)
static bool HandleDirective(MCAsmParserExtension *Target, StringRef Directive, SMLoc DirectiveLoc)
bool addErrorSuffix(const Twine &Suffix)
MCAsmParserExtension & operator=(const MCAsmParserExtension &)=delete
bool parseMany(function_ref< bool()> parseOne, bool hasComma=true)
bool parseToken(AsmToken::TokenKind T, const Twine &Msg="unexpected token")
MCAsmParserExtension(const MCAsmParserExtension &)=delete
bool Warning(SMLoc L, const Twine &Msg)
bool TokError(const Twine &Msg)
bool check(bool P, const Twine &Msg)
void Note(SMLoc L, const Twine &Msg)
bool Error(SMLoc L, const Twine &Msg, SMRange Range=SMRange())
bool check(bool P, SMLoc Loc, const Twine &Msg)
const AsmLexer & getLexer() const
Generic assembler parser interface, for use by target specific assembly parsers.
Definition: MCAsmParser.h:124
Context object for machine code objects.
Definition: MCContext.h:83
Streaming machine code generation interface.
Definition: MCStreamer.h:220
Represents a location in source code.
Definition: SMLoc.h:23
Represents a range in source code.
Definition: SMLoc.h:48
This owns the files read by a parser, handles include stacks, and handles diagnostic wrangling.
Definition: SourceMgr.h:32
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:55
Target - Wrapper for Target specific information.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition: Twine.h:82
An efficient, type-erasing, non-owning reference to a callable.
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18