diff --git a/llvm/include/llvm/MC/MCAsmParser.h b/llvm/include/llvm/MC/MCAsmParser.h index e0a48f1e9c0f..23c97f58affd 100644 --- a/llvm/include/llvm/MC/MCAsmParser.h +++ b/llvm/include/llvm/MC/MCAsmParser.h @@ -15,6 +15,7 @@ namespace llvm { class MCAsmLexer; class MCContext; +class MCExpr; class MCValue; class SMLoc; class Twine; @@ -45,6 +46,21 @@ public: /// clients. virtual bool Error(SMLoc L, const Twine &Msg) = 0; + /// ParseExpression - Parse an arbitrary expression. + /// + /// @param Res - The value of the expression. The result is undefined + /// on error. + /// @result - False on success. + virtual bool ParseExpression(const MCExpr *&Res) = 0; + + /// ParseParenExpression - Parse an arbitrary expression, assuming that an + /// initial '(' has already been consumed. + /// + /// @param Res - The value of the expression. The result is undefined + /// on error. + /// @result - False on success. + virtual bool ParseParenExpression(const MCExpr *&Res) = 0; + /// ParseAbsoluteExpression - Parse an expression which must evaluate to an /// absolute value. /// diff --git a/llvm/tools/llvm-mc/AsmParser.cpp b/llvm/tools/llvm-mc/AsmParser.cpp index 5d73a9fa5401..78cab38b4ffc 100644 --- a/llvm/tools/llvm-mc/AsmParser.cpp +++ b/llvm/tools/llvm-mc/AsmParser.cpp @@ -21,6 +21,7 @@ #include "llvm/MC/MCSectionMachO.h" #include "llvm/MC/MCStreamer.h" #include "llvm/MC/MCSymbol.h" +#include "llvm/MC/MCValue.h" #include "llvm/Support/SourceMgr.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Target/TargetAsmParser.h" @@ -258,6 +259,13 @@ bool AsmParser::ParseExpression(const MCExpr *&Res) { ParseBinOpRHS(1, Res); } +bool AsmParser::ParseParenExpression(const MCExpr *&Res) { + if (ParseParenExpr(Res)) + return true; + + return false; +} + bool AsmParser::ParseAbsoluteExpression(int64_t &Res) { const MCExpr *Expr; diff --git a/llvm/tools/llvm-mc/AsmParser.h b/llvm/tools/llvm-mc/AsmParser.h index b7082b688d45..2e328d9f6fd3 100644 --- a/llvm/tools/llvm-mc/AsmParser.h +++ b/llvm/tools/llvm-mc/AsmParser.h @@ -70,6 +70,8 @@ public: virtual bool ParseExpression(const MCExpr *&Res); + virtual bool ParseParenExpression(const MCExpr *&Res); + virtual bool ParseAbsoluteExpression(int64_t &Res); virtual bool ParseRelocatableExpression(MCValue &Res);