MCAsmParserExtension.h revision 1edf6ca2cbb4b01db44683d5e9479a240cfcf497
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/ADT/StringRef.h" 15#include "llvm/Support/SMLoc.h" 16 17namespace llvm { 18class Twine; 19 20/// \brief Generic interface for extending the MCAsmParser, 21/// which is implemented by target and object file assembly parser 22/// implementations. 23class MCAsmParserExtension { 24 MCAsmParserExtension(const MCAsmParserExtension &); // DO NOT IMPLEMENT 25 void operator=(const MCAsmParserExtension &); // DO NOT IMPLEMENT 26 27 MCAsmParser *Parser; 28 29protected: 30 MCAsmParserExtension(); 31 32 // Helper template for implementing static dispatch functions. 33 template<typename T, bool (T::*Handler)(StringRef, SMLoc)> 34 static bool HandleDirective(MCAsmParserExtension *Target, 35 StringRef Directive, 36 SMLoc DirectiveLoc) { 37 T *Obj = static_cast<T*>(Target); 38 return (Obj->*Handler)(Directive, DirectiveLoc); 39 } 40 41public: 42 virtual ~MCAsmParserExtension(); 43 44 /// \brief Initialize the extension for parsing using the given \arg 45 /// Parser. The extension should use the AsmParser interfaces to register its 46 /// parsing routines. 47 virtual void Initialize(MCAsmParser &Parser); 48 49 /// @name MCAsmParser Proxy Interfaces 50 /// @{ 51 52 MCContext &getContext() { return getParser().getContext(); } 53 MCAsmLexer &getLexer() { return getParser().getLexer(); } 54 MCAsmParser &getParser() { return *Parser; } 55 SourceMgr &getSourceManager() { return getParser().getSourceManager(); } 56 MCStreamer &getStreamer() { return getParser().getStreamer(); } 57 void Warning(SMLoc L, const Twine &Msg) { 58 return getParser().Warning(L, Msg); 59 } 60 bool Error(SMLoc L, const Twine &Msg) { 61 return getParser().Error(L, Msg); 62 } 63 bool TokError(const Twine &Msg) { 64 return getParser().TokError(Msg); 65 } 66 67 const AsmToken &Lex() { return getParser().Lex(); } 68 69 const AsmToken &getTok() { return getParser().getTok(); } 70 71 /// @} 72}; 73 74} // End llvm namespace 75 76#endif 77