MCAsmParser.h revision ec13022c392747ef166e6be738fc6f00bd7c52d3
121830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com//===-- llvm/MC/MCAsmParser.h - Abstract Asm Parser Interface ---*- C++ -*-===// 221830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com// 321830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com// The LLVM Compiler Infrastructure 421830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com// 521830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com// This file is distributed under the University of Illinois Open Source 621830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com// License. See LICENSE.TXT for details. 721830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com// 821830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com//===----------------------------------------------------------------------===// 921830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com 1021830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com#ifndef LLVM_MC_MCASMPARSER_H 1121830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com#define LLVM_MC_MCASMPARSER_H 128b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org 138b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org#include "llvm/Support/DataTypes.h" 1421830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com#include "llvm/ADT/ArrayRef.h" 1521830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com 1621830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comnamespace llvm { 1721830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comclass AsmToken; 1821830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comclass MCAsmInfo; 193e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.comclass MCAsmLexer; 2021830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comclass MCAsmParserExtension; 2121830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comclass MCContext; 2221830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comclass MCExpr; 2321830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comclass MCInstPrinter; 2421830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comclass MCInstrInfo; 2521830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comclass MCParsedAsmOperand; 2621830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comclass MCStreamer; 2721830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comclass MCTargetAsmParser; 2821830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comclass SMLoc; 2921830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comclass SMRange; 3021830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comclass SourceMgr; 3121830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comclass StringRef; 3221830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comclass Twine; 3321830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com 3421830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com/// MCAsmParserSemaCallback - Generic Sema callback for assembly parser. 3521830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comclass MCAsmParserSemaCallback { 3621830d90096d2dccc4168d99a427e78035ce942adjsollen@google.compublic: 3721830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com virtual ~MCAsmParserSemaCallback(); 3821830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com virtual void *LookupInlineAsmIdentifier(StringRef Name, void *Loc, 39672588b684d484dce6ae251e9e163e4a46924322reed@google.com unsigned &Size) = 0; 40672588b684d484dce6ae251e9e163e4a46924322reed@google.com virtual bool LookupInlineAsmField(StringRef Base, StringRef Member, 41672588b684d484dce6ae251e9e163e4a46924322reed@google.com unsigned &Offset) = 0; 42672588b684d484dce6ae251e9e163e4a46924322reed@google.com}; 43672588b684d484dce6ae251e9e163e4a46924322reed@google.com 44672588b684d484dce6ae251e9e163e4a46924322reed@google.com/// MCAsmParser - Generic assembler parser interface, for use by target specific 45672588b684d484dce6ae251e9e163e4a46924322reed@google.com/// assembly parsers. 46672588b684d484dce6ae251e9e163e4a46924322reed@google.comclass MCAsmParser { 4720f7f173e05b60f541910d0c1da9850ac73e2958bsalomon@google.compublic: 4820f7f173e05b60f541910d0c1da9850ac73e2958bsalomon@google.com typedef bool (*DirectiveHandler)(MCAsmParserExtension*, StringRef, SMLoc); 4920f7f173e05b60f541910d0c1da9850ac73e2958bsalomon@google.com 5020f7f173e05b60f541910d0c1da9850ac73e2958bsalomon@google.comprivate: 5120f7f173e05b60f541910d0c1da9850ac73e2958bsalomon@google.com MCAsmParser(const MCAsmParser &) LLVM_DELETED_FUNCTION; 5220f7f173e05b60f541910d0c1da9850ac73e2958bsalomon@google.com void operator=(const MCAsmParser &) LLVM_DELETED_FUNCTION; 53672588b684d484dce6ae251e9e163e4a46924322reed@google.com 5420f7f173e05b60f541910d0c1da9850ac73e2958bsalomon@google.com MCTargetAsmParser *TargetParser; 55672588b684d484dce6ae251e9e163e4a46924322reed@google.com 5620f7f173e05b60f541910d0c1da9850ac73e2958bsalomon@google.com unsigned ShowParsedOperands : 1; 5720f7f173e05b60f541910d0c1da9850ac73e2958bsalomon@google.com 5820f7f173e05b60f541910d0c1da9850ac73e2958bsalomon@google.comprotected: // Can only create subclasses. 5920f7f173e05b60f541910d0c1da9850ac73e2958bsalomon@google.com MCAsmParser(); 6020f7f173e05b60f541910d0c1da9850ac73e2958bsalomon@google.com 6120f7f173e05b60f541910d0c1da9850ac73e2958bsalomon@google.compublic: 6220f7f173e05b60f541910d0c1da9850ac73e2958bsalomon@google.com virtual ~MCAsmParser(); 633e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com 6420f7f173e05b60f541910d0c1da9850ac73e2958bsalomon@google.com virtual void AddDirectiveHandler(MCAsmParserExtension *Object, 653e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com StringRef Directive, 663e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com DirectiveHandler Handler) = 0; 673e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com 683e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com virtual SourceMgr &getSourceManager() = 0; 6921830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com 7021830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com virtual MCAsmLexer &getLexer() = 0; 7121830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com 7221830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com virtual MCContext &getContext() = 0; 7321830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com 7421830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com /// getStreamer - Return the output streamer for the assembler. 7521830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com virtual MCStreamer &getStreamer() = 0; 767ca24437c71af06fc06ab5f6f261b185882fa440scroggo@google.com 777ca24437c71af06fc06ab5f6f261b185882fa440scroggo@google.com MCTargetAsmParser &getTargetParser() const { return *TargetParser; } 7821830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com void setTargetParser(MCTargetAsmParser &P); 7921830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com 8021830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com virtual unsigned getAssemblerDialect() { return 0;} 8121830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com virtual void setAssemblerDialect(unsigned i) { } 8221830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com 8321830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com bool getShowParsedOperands() const { return ShowParsedOperands; } 8421830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com void setShowParsedOperands(bool Value) { ShowParsedOperands = Value; } 8521830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com 8621830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com /// Run - Run the parser on the input source buffer. 877ca24437c71af06fc06ab5f6f261b185882fa440scroggo@google.com virtual bool Run(bool NoInitialTextSection, bool NoFinalize = false) = 0; 887ca24437c71af06fc06ab5f6f261b185882fa440scroggo@google.com 8910dccde54a769b8d472bccf8c1993034b93ef58dscroggo@google.com virtual void setParsingInlineAsm(bool V) = 0; 9021830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com virtual bool isParsingInlineAsm() = 0; 9121830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com 9221830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com /// ParseMSInlineAsm - Parse ms-style inline assembly. 9310dccde54a769b8d472bccf8c1993034b93ef58dscroggo@google.com virtual bool ParseMSInlineAsm(void *AsmLoc, std::string &AsmString, 9410dccde54a769b8d472bccf8c1993034b93ef58dscroggo@google.com unsigned &NumOutputs, unsigned &NumInputs, 9510dccde54a769b8d472bccf8c1993034b93ef58dscroggo@google.com SmallVectorImpl<std::pair<void *, bool> > &OpDecls, 9610dccde54a769b8d472bccf8c1993034b93ef58dscroggo@google.com SmallVectorImpl<std::string> &Constraints, 9710dccde54a769b8d472bccf8c1993034b93ef58dscroggo@google.com SmallVectorImpl<std::string> &Clobbers, 9810dccde54a769b8d472bccf8c1993034b93ef58dscroggo@google.com const MCInstrInfo *MII, 9910dccde54a769b8d472bccf8c1993034b93ef58dscroggo@google.com const MCInstPrinter *IP, 10010dccde54a769b8d472bccf8c1993034b93ef58dscroggo@google.com MCAsmParserSemaCallback &SI) = 0; 10110dccde54a769b8d472bccf8c1993034b93ef58dscroggo@google.com 10210dccde54a769b8d472bccf8c1993034b93ef58dscroggo@google.com /// Warning - Emit a warning at the location \p L, with the message \p Msg. 10310dccde54a769b8d472bccf8c1993034b93ef58dscroggo@google.com /// 10410dccde54a769b8d472bccf8c1993034b93ef58dscroggo@google.com /// \return The return value is true, if warnings are fatal. 10510dccde54a769b8d472bccf8c1993034b93ef58dscroggo@google.com virtual bool Warning(SMLoc L, const Twine &Msg, 10610dccde54a769b8d472bccf8c1993034b93ef58dscroggo@google.com ArrayRef<SMRange> Ranges = ArrayRef<SMRange>()) = 0; 10710dccde54a769b8d472bccf8c1993034b93ef58dscroggo@google.com 10810dccde54a769b8d472bccf8c1993034b93ef58dscroggo@google.com /// Error - Emit an error at the location \p L, with the message \p Msg. 10921830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com /// 11021830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com /// \return The return value is always true, as an idiomatic convenience to 111c51db02181982fbcb8888e2a89132363a7d9371cscroggo /// clients. 11221830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com virtual bool Error(SMLoc L, const Twine &Msg, 11321830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com ArrayRef<SMRange> Ranges = ArrayRef<SMRange>()) = 0; 11421830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com 11521830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com /// Lex - Get the next AsmToken in the stream, possibly handling file 11621830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com /// inclusion first. 11721830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com virtual const AsmToken &Lex() = 0; 11821830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com 11921830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com /// getTok - Get the current AsmToken from the stream. 12021830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com const AsmToken &getTok(); 12121830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com 12221830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com /// \brief Report an error at the current lexer location. 12321830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com bool TokError(const Twine &Msg, 12421830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com ArrayRef<SMRange> Ranges = ArrayRef<SMRange>()); 12521830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com 12621830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com /// ParseIdentifier - Parse an identifier or string (as a quoted identifier) 1273e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com /// and set \p Res to the identifier contents. 1283e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com virtual bool ParseIdentifier(StringRef &Res) = 0; 1293e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com 1303e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com /// \brief Parse up to the end of statement and return the contents from the 1313e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com /// current token until the end of the statement; the current token on exit 1323e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com /// will be either the EndOfStatement or EOF. 1333e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com virtual StringRef ParseStringToEndOfStatement() = 0; 1343e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com 1353e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com /// EatToEndOfStatement - Skip to the end of the current statement, for error 1363e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com /// recovery. 1373e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com virtual void EatToEndOfStatement() = 0; 1383e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com 1393e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com /// ParseExpression - Parse an arbitrary expression. 1403e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com /// 1413e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com /// @param Res - The value of the expression. The result is undefined 1423e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com /// on error. 1433e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com /// @result - False on success. 14421830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com virtual bool ParseExpression(const MCExpr *&Res, SMLoc &EndLoc) = 0; 14521830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com bool ParseExpression(const MCExpr *&Res); 1463e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com 1473e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com /// ParseParenExpression - Parse an arbitrary expression, assuming that an 1483e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com /// initial '(' has already been consumed. 1493e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com /// 1503e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com /// @param Res - The value of the expression. The result is undefined 15121830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com /// on error. 15221830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com /// @result - False on success. 1533e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com virtual bool ParseParenExpression(const MCExpr *&Res, SMLoc &EndLoc) = 0; 1543e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com 1553e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com /// ParseAbsoluteExpression - Parse an expression which must evaluate to an 15621830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com /// absolute value. 15721830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com /// 15821830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com /// @param Res - The value of the absolute expression. The result is undefined 15921830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com /// on error. 16021830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com /// @result - False on success. 16121830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com virtual bool ParseAbsoluteExpression(int64_t &Res) = 0; 16221830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com}; 16321830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com 16421830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com/// \brief Create an MCAsmParser instance. 16521830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comMCAsmParser *createMCAsmParser(SourceMgr &, MCContext &, 16621830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com MCStreamer &, const MCAsmInfo &); 16721830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com 1683e26bd0c357d849ff40b092decd7a5c46ec2ada4scroggo@google.com} // End llvm namespace 16921830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com 17021830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com#endif 17121830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com