MCAsmParserExtension.h revision f21e4e9326aa3ebc78bc2770722fb5150fe7ede9
1//===-- llvm/MC/MCAsmParserExtension.h - Asm Parser Hooks -------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef LLVM_MC_MCASMPARSEREXTENSION_H
11#define LLVM_MC_MCASMPARSEREXTENSION_H
12
13#include "llvm/MC/MCParser/MCAsmParser.h"
14#include "llvm/Support/SMLoc.h"
15
16namespace llvm {
17class Twine;
18
19/// \brief Generic interface for extending the MCAsmParser,
20/// which is implemented by target and object file assembly parser
21/// implementations.
22class MCAsmParserExtension {
23  MCAsmParserExtension(const MCAsmParserExtension &);   // DO NOT IMPLEMENT
24  void operator=(const MCAsmParserExtension &);  // DO NOT IMPLEMENT
25
26  MCAsmParser *Parser;
27
28protected:
29  MCAsmParserExtension();
30
31public:
32  virtual ~MCAsmParserExtension();
33
34  /// \brief Initialize the extension for parsing using the given \arg
35  /// Parser. The extension should use the AsmParser interfaces to register its
36  /// parsing routines.
37  virtual void Initialize(MCAsmParser &Parser);
38
39  /// @name MCAsmParser Proxy Interfaces
40  /// @{
41
42  MCContext &getContext() { return getParser().getContext(); }
43  MCAsmLexer &getLexer() { return getParser().getLexer(); }
44  MCAsmParser &getParser() { return *Parser; }
45  SourceMgr &getSourceManager() { return getParser().getSourceManager(); }
46  MCStreamer &getStreamer() { return getParser().getStreamer(); }
47  void Warning(SMLoc L, const Twine &Msg) {
48    return getParser().Warning(L, Msg);
49  }
50  bool Error(SMLoc L, const Twine &Msg) {
51    return getParser().Error(L, Msg);
52  }
53  bool TokError(const Twine &Msg) {
54    return getParser().TokError(Msg);
55  }
56
57  const AsmToken &Lex() { return getParser().Lex(); }
58
59  const AsmToken &getTok() { return getParser().getTok(); }
60
61  /// @}
62};
63
64} // End llvm namespace
65
66#endif
67