MCAsmParserExtension.h revision 4e82bbb745160f19d76b9b5de5b93ebe224e1acf
153131982d6290e3a865f400174778deaac452ff3Daniel Dunbar//===-- llvm/MC/MCAsmParserExtension.h - Asm Parser Hooks -------*- C++ -*-===//
253131982d6290e3a865f400174778deaac452ff3Daniel Dunbar//
353131982d6290e3a865f400174778deaac452ff3Daniel Dunbar//                     The LLVM Compiler Infrastructure
453131982d6290e3a865f400174778deaac452ff3Daniel Dunbar//
553131982d6290e3a865f400174778deaac452ff3Daniel Dunbar// This file is distributed under the University of Illinois Open Source
653131982d6290e3a865f400174778deaac452ff3Daniel Dunbar// License. See LICENSE.TXT for details.
753131982d6290e3a865f400174778deaac452ff3Daniel Dunbar//
853131982d6290e3a865f400174778deaac452ff3Daniel Dunbar//===----------------------------------------------------------------------===//
953131982d6290e3a865f400174778deaac452ff3Daniel Dunbar
1053131982d6290e3a865f400174778deaac452ff3Daniel Dunbar#ifndef LLVM_MC_MCASMPARSEREXTENSION_H
1153131982d6290e3a865f400174778deaac452ff3Daniel Dunbar#define LLVM_MC_MCASMPARSEREXTENSION_H
1253131982d6290e3a865f400174778deaac452ff3Daniel Dunbar
1353131982d6290e3a865f400174778deaac452ff3Daniel Dunbar#include "llvm/MC/MCParser/MCAsmParser.h"
1453131982d6290e3a865f400174778deaac452ff3Daniel Dunbar#include "llvm/Support/SMLoc.h"
1553131982d6290e3a865f400174778deaac452ff3Daniel Dunbar
1653131982d6290e3a865f400174778deaac452ff3Daniel Dunbarnamespace llvm {
1753131982d6290e3a865f400174778deaac452ff3Daniel Dunbar
1853131982d6290e3a865f400174778deaac452ff3Daniel Dunbar/// \brief Generic interface for extending the MCAsmParser,
1953131982d6290e3a865f400174778deaac452ff3Daniel Dunbar/// which is implemented by target and object file assembly parser
2053131982d6290e3a865f400174778deaac452ff3Daniel Dunbar/// implementations.
2153131982d6290e3a865f400174778deaac452ff3Daniel Dunbarclass MCAsmParserExtension {
2253131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  MCAsmParserExtension(const MCAsmParserExtension &);   // DO NOT IMPLEMENT
2353131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  void operator=(const MCAsmParserExtension &);  // DO NOT IMPLEMENT
2453131982d6290e3a865f400174778deaac452ff3Daniel Dunbar
2553131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  MCAsmParser *Parser;
2653131982d6290e3a865f400174778deaac452ff3Daniel Dunbar
2753131982d6290e3a865f400174778deaac452ff3Daniel Dunbarprotected:
2853131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  MCAsmParserExtension();
2953131982d6290e3a865f400174778deaac452ff3Daniel Dunbar
3053131982d6290e3a865f400174778deaac452ff3Daniel Dunbarpublic:
3153131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  virtual ~MCAsmParserExtension();
3253131982d6290e3a865f400174778deaac452ff3Daniel Dunbar
3353131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  /// \brief Initialize the extension for parsing using the given \arg
3453131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  /// Parser. The extension should use the AsmParser interfaces to register its
3553131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  /// parsing routines.
3653131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  virtual void Initialize(MCAsmParser &Parser);
3753131982d6290e3a865f400174778deaac452ff3Daniel Dunbar
3853131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  /// @name MCAsmParser Proxy Interfaces
3953131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  /// @{
4053131982d6290e3a865f400174778deaac452ff3Daniel Dunbar
4153131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  MCContext &getContext() { return getParser().getContext(); }
4253131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  MCAsmLexer &getLexer() { return getParser().getLexer(); }
4353131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  MCAsmParser &getParser() { return *Parser; }
444e82bbb745160f19d76b9b5de5b93ebe224e1acfDaniel Dunbar  SourceMgr &getSourceManager() { return getParser().getSourceManager(); }
4553131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  MCStreamer &getStreamer() { return getParser().getStreamer(); }
4653131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  void Warning(SMLoc L, const Twine &Msg) {
4753131982d6290e3a865f400174778deaac452ff3Daniel Dunbar    return getParser().Warning(L, Msg);
4853131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  }
4953131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  bool Error(SMLoc L, const Twine &Msg) {
5053131982d6290e3a865f400174778deaac452ff3Daniel Dunbar    return getParser().Error(L, Msg);
5153131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  }
5253131982d6290e3a865f400174778deaac452ff3Daniel Dunbar
5353131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  const AsmToken &Lex() { return getParser().Lex(); }
5453131982d6290e3a865f400174778deaac452ff3Daniel Dunbar
5553131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  const AsmToken &getTok() { return getParser().getTok(); }
5653131982d6290e3a865f400174778deaac452ff3Daniel Dunbar
5753131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  bool TokError(const char *Msg) {
5853131982d6290e3a865f400174778deaac452ff3Daniel Dunbar    return getParser().TokError(Msg);
5953131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  }
6053131982d6290e3a865f400174778deaac452ff3Daniel Dunbar
6153131982d6290e3a865f400174778deaac452ff3Daniel Dunbar  /// @}
6253131982d6290e3a865f400174778deaac452ff3Daniel Dunbar};
6353131982d6290e3a865f400174778deaac452ff3Daniel Dunbar
6453131982d6290e3a865f400174778deaac452ff3Daniel Dunbar} // End llvm namespace
6553131982d6290e3a865f400174778deaac452ff3Daniel Dunbar
6653131982d6290e3a865f400174778deaac452ff3Daniel Dunbar#endif
67