MCAsmParserExtension.h revision 93c65e6e661eda75711363bdd5ca15909920e1f0
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===-- llvm/MC/MCAsmParserExtension.h - Asm Parser Hooks -------*- C++ -*-===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details. 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//===----------------------------------------------------------------------===// 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#ifndef LLVM_MC_MCASMPARSEREXTENSION_H 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define LLVM_MC_MCASMPARSEREXTENSION_H 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "llvm/MC/MCParser/MCAsmParser.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "llvm/ADT/StringRef.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "llvm/Support/SMLoc.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace llvm { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Twine; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/// \brief Generic interface for extending the MCAsmParser, 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/// which is implemented by target and object file assembly parser 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/// implementations. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MCAsmParserExtension { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MCAsmParserExtension(const MCAsmParserExtension &); // DO NOT IMPLEMENT 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void operator=(const MCAsmParserExtension &); // DO NOT IMPLEMENT 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MCAsmParser *Parser; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)protected: 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MCAsmParserExtension(); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper template for implementing static dispatch functions. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template<typename T, bool (T::*Handler)(StringRef, SMLoc)> 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool HandleDirective(MCAsmParserExtension *Target, 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StringRef Directive, 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SMLoc DirectiveLoc) { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) T *Obj = static_cast<T*>(Target); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (Obj->*Handler)(Directive, DirectiveLoc); 3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool BracketExpressionsSupported; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public: 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MCAsmParserExtension(); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// \brief Initialize the extension for parsing using the given \arg 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// Parser. The extension should use the AsmParser interfaces to register its 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// parsing routines. 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Initialize(MCAsmParser &Parser); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// @name MCAsmParser Proxy Interfaces 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /// @{ 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MCContext &getContext() { return getParser().getContext(); } 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MCAsmLexer &getLexer() { return getParser().getLexer(); } 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MCAsmParser &getParser() { return *Parser; } 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SourceMgr &getSourceManager() { return getParser().getSourceManager(); } 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MCStreamer &getStreamer() { return getParser().getStreamer(); } 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void Warning(SMLoc L, const Twine &Msg) { 6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return getParser().Warning(L, Msg); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Error(SMLoc L, const Twine &Msg) { 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return getParser().Error(L, Msg); 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool TokError(const Twine &Msg) { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return getParser().TokError(Msg); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const AsmToken &Lex() { return getParser().Lex(); } 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const AsmToken &getTok() { return getParser().getTok(); } 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasBracketExpressions() const { return BracketExpressionsSupported; } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// @} 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // End llvm namespace 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)