123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===- llvm/MC/MCAsmParserExtension.h - Asm Parser Hooks --------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_MC_MCPARSER_MCASMPARSEREXTENSION_H
- #define LLVM_MC_MCPARSER_MCASMPARSEREXTENSION_H
- #include "llvm/ADT/STLExtras.h"
- #include "llvm/ADT/StringRef.h"
- #include "llvm/MC/MCParser/MCAsmLexer.h"
- #include "llvm/MC/MCParser/MCAsmParser.h"
- #include "llvm/Support/SMLoc.h"
- namespace llvm {
- class Twine;
- /// Generic interface for extending the MCAsmParser,
- /// which is implemented by target and object file assembly parser
- /// implementations.
- class MCAsmParserExtension {
- MCAsmParser *Parser;
- protected:
- MCAsmParserExtension();
- // Helper template for implementing static dispatch functions.
- template<typename T, bool (T::*Handler)(StringRef, SMLoc)>
- static bool HandleDirective(MCAsmParserExtension *Target,
- StringRef Directive,
- SMLoc DirectiveLoc) {
- T *Obj = static_cast<T*>(Target);
- return (Obj->*Handler)(Directive, DirectiveLoc);
- }
- bool BracketExpressionsSupported = false;
- public:
- MCAsmParserExtension(const MCAsmParserExtension &) = delete;
- MCAsmParserExtension &operator=(const MCAsmParserExtension &) = delete;
- virtual ~MCAsmParserExtension();
- /// Initialize the extension for parsing using the given \p Parser.
- /// The extension should use the AsmParser interfaces to register its
- /// parsing routines.
- virtual void Initialize(MCAsmParser &Parser);
- /// \name MCAsmParser Proxy Interfaces
- /// @{
- MCContext &getContext() { return getParser().getContext(); }
- MCAsmLexer &getLexer() { return getParser().getLexer(); }
- const MCAsmLexer &getLexer() const {
- return const_cast<MCAsmParserExtension *>(this)->getLexer();
- }
- MCAsmParser &getParser() { return *Parser; }
- const MCAsmParser &getParser() const {
- return const_cast<MCAsmParserExtension*>(this)->getParser();
- }
- SourceMgr &getSourceManager() { return getParser().getSourceManager(); }
- MCStreamer &getStreamer() { return getParser().getStreamer(); }
- bool Warning(SMLoc L, const Twine &Msg) {
- return getParser().Warning(L, Msg);
- }
- bool Error(SMLoc L, const Twine &Msg, SMRange Range = SMRange()) {
- return getParser().Error(L, Msg, Range);
- }
- void Note(SMLoc L, const Twine &Msg) {
- getParser().Note(L, Msg);
- }
- bool TokError(const Twine &Msg) {
- return getParser().TokError(Msg);
- }
- const AsmToken &Lex() { return getParser().Lex(); }
- const AsmToken &getTok() { return getParser().getTok(); }
- bool parseToken(AsmToken::TokenKind T,
- const Twine &Msg = "unexpected token") {
- return getParser().parseToken(T, Msg);
- }
- bool parseEOL() { return getParser().parseEOL(); }
- bool parseMany(function_ref<bool()> parseOne, bool hasComma = true) {
- return getParser().parseMany(parseOne, hasComma);
- }
- bool parseOptionalToken(AsmToken::TokenKind T) {
- return getParser().parseOptionalToken(T);
- }
- bool ParseDirectiveCGProfile(StringRef, SMLoc);
- bool check(bool P, const Twine &Msg) {
- return getParser().check(P, Msg);
- }
- bool check(bool P, SMLoc Loc, const Twine &Msg) {
- return getParser().check(P, Loc, Msg);
- }
- bool addErrorSuffix(const Twine &Suffix) {
- return getParser().addErrorSuffix(Suffix);
- }
- bool HasBracketExpressions() const { return BracketExpressionsSupported; }
- /// @}
- };
- } // end namespace llvm
- #endif // LLVM_MC_MCPARSER_MCASMPARSEREXTENSION_H
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|