diff --git a/include/llvm/MC/MCAsmParser.h b/include/llvm/MC/MCAsmParser.h index a6acf4e94df..e0a48f1e9c0 100644 --- a/include/llvm/MC/MCAsmParser.h +++ b/include/llvm/MC/MCAsmParser.h @@ -14,6 +14,7 @@ namespace llvm { class MCAsmLexer; +class MCContext; class MCValue; class SMLoc; class Twine; @@ -31,6 +32,8 @@ public: virtual MCAsmLexer &getLexer() = 0; + virtual MCContext &getContext() = 0; + /// Warning - Emit a warning at the location \arg L, with the message \arg /// Msg. virtual void Warning(SMLoc L, const Twine &Msg) = 0; diff --git a/tools/llvm-mc/AsmParser.cpp b/tools/llvm-mc/AsmParser.cpp index 6f002e1cb38..5d73a9fa540 100644 --- a/tools/llvm-mc/AsmParser.cpp +++ b/tools/llvm-mc/AsmParser.cpp @@ -205,7 +205,7 @@ bool AsmParser::ParsePrimaryExpr(const MCExpr *&Res) { Lexer.Lex(); // Eat the operator. if (ParsePrimaryExpr(Res)) return true; - Res = MCUnaryExpr::CreateLNot(Res, Ctx); + Res = MCUnaryExpr::CreateLNot(Res, getContext()); return false; case AsmToken::String: case AsmToken::Identifier: { @@ -213,12 +213,12 @@ bool AsmParser::ParsePrimaryExpr(const MCExpr *&Res) { // handle things like LFOO+4. MCSymbol *Sym = CreateSymbol(Lexer.getTok().getIdentifier()); - Res = MCSymbolRefExpr::Create(Sym, Ctx); + Res = MCSymbolRefExpr::Create(Sym, getContext()); Lexer.Lex(); // Eat identifier. return false; } case AsmToken::Integer: - Res = MCConstantExpr::Create(Lexer.getTok().getIntVal(), Ctx); + Res = MCConstantExpr::Create(Lexer.getTok().getIntVal(), getContext()); Lexer.Lex(); // Eat token. return false; case AsmToken::LParen: @@ -228,19 +228,19 @@ bool AsmParser::ParsePrimaryExpr(const MCExpr *&Res) { Lexer.Lex(); // Eat the operator. if (ParsePrimaryExpr(Res)) return true; - Res = MCUnaryExpr::CreateMinus(Res, Ctx); + Res = MCUnaryExpr::CreateMinus(Res, getContext()); return false; case AsmToken::Plus: Lexer.Lex(); // Eat the operator. if (ParsePrimaryExpr(Res)) return true; - Res = MCUnaryExpr::CreatePlus(Res, Ctx); + Res = MCUnaryExpr::CreatePlus(Res, getContext()); return false; case AsmToken::Tilde: Lexer.Lex(); // Eat the operator. if (ParsePrimaryExpr(Res)) return true; - Res = MCUnaryExpr::CreateNot(Res, Ctx); + Res = MCUnaryExpr::CreateNot(Res, getContext()); return false; } } @@ -300,7 +300,8 @@ bool AsmParser::ParseParenRelocatableExpression(MCValue &Res) { static unsigned getBinOpPrecedence(AsmToken::TokenKind K, MCBinaryExpr::Opcode &Kind) { switch (K) { - default: return 0; // not a binop. + default: + return 0; // not a binop. // Lowest Precedence: &&, || case AsmToken::AmpAmp: @@ -397,7 +398,7 @@ bool AsmParser::ParseBinOpRHS(unsigned Precedence, const MCExpr *&Res) { } // Merge LHS and RHS according to operator. - Res = MCBinaryExpr::Create(Kind, Res, RHS, Ctx); + Res = MCBinaryExpr::Create(Kind, Res, RHS, getContext()); } } diff --git a/tools/llvm-mc/AsmParser.h b/tools/llvm-mc/AsmParser.h index c7b7316d632..b7082b688d4 100644 --- a/tools/llvm-mc/AsmParser.h +++ b/tools/llvm-mc/AsmParser.h @@ -62,6 +62,8 @@ public: virtual MCAsmLexer &getLexer() { return Lexer; } + virtual MCContext &getContext() { return Ctx; } + virtual void Warning(SMLoc L, const Twine &Meg); virtual bool Error(SMLoc L, const Twine &Msg); @@ -72,6 +74,8 @@ public: virtual bool ParseRelocatableExpression(MCValue &Res); + virtual bool ParseParenRelocatableExpression(MCValue &Res); + /// } private: @@ -94,16 +98,6 @@ private: bool ParseAssignment(const StringRef &Name, bool IsDotSet); - /// ParseParenRelocatableExpression - Parse an expression which must be - /// relocatable, assuming that an initial '(' has already been consumed. - /// - /// @param Res - The relocatable expression value. The result is undefined on - /// error. - /// @result - False on success. - /// - /// @see ParseRelocatableExpression, ParseParenExpr. - bool ParseParenRelocatableExpression(MCValue &Res); - bool ParsePrimaryExpr(const MCExpr *&Res); bool ParseBinOpRHS(unsigned Precedence, const MCExpr *&Res); bool ParseParenExpr(const MCExpr *&Res);