Index: include/llvm/MC/MCParser/MCAsmLexer.h =================================================================== --- include/llvm/MC/MCParser/MCAsmLexer.h +++ include/llvm/MC/MCParser/MCAsmLexer.h @@ -52,7 +52,6 @@ bool IsAtStartOfStatement = true; AsmCommentConsumer *CommentConsumer = nullptr; - bool AltMacroMode; MCAsmLexer(); virtual AsmToken LexToken() = 0; @@ -67,14 +66,6 @@ MCAsmLexer &operator=(const MCAsmLexer &) = delete; virtual ~MCAsmLexer(); - bool IsaAltMacroMode() { - return AltMacroMode; - } - - void SetAltMacroMode(bool AltMacroSet) { - AltMacroMode = AltMacroSet; - } - /// Consume the next token from the input stream and return it. /// /// The lexer will continuously return the end-of-file token once the end of Index: lib/MC/MCParser/AsmParser.cpp =================================================================== --- lib/MC/MCParser/AsmParser.cpp +++ lib/MC/MCParser/AsmParser.cpp @@ -180,6 +180,9 @@ /// Did we already inform the user about inconsistent MD5 usage? bool ReportedInconsistentMD5 = false; + // Is alt macro mode enabled. + bool AltMacroMode = false; + public: AsmParser(SourceMgr &SM, MCContext &Ctx, MCStreamer &Out, const MCAsmInfo &MAI, unsigned CB); @@ -2443,14 +2446,13 @@ // Here, we identify the integer token which is the result of the // absolute expression evaluation and replace it with its string // representation. - if (Lexer.IsaAltMacroMode() && Token.getString().front() == '%' && + if (AltMacroMode && Token.getString().front() == '%' && Token.is(AsmToken::Integer)) // Emit an integer value to the buffer. OS << Token.getIntVal(); // Only Token that was validated as a string and begins with '<' // is considered altMacroString!!! - else if (Lexer.IsaAltMacroMode() && - Token.getString().front() == '<' && + else if (AltMacroMode && Token.getString().front() == '<' && Token.is(AsmToken::String)) { std::string Res; altMacroString(Token.getStringContents(), Res); @@ -2636,7 +2638,7 @@ SMLoc StrLoc = Lexer.getLoc(); SMLoc EndLoc; - if (Lexer.IsaAltMacroMode() && Lexer.is(AsmToken::Percent)) { + if (AltMacroMode && Lexer.is(AsmToken::Percent)) { const MCExpr *AbsoluteExp; int64_t Value; /// Eat '%' @@ -2651,7 +2653,7 @@ AsmToken newToken(AsmToken::Integer, StringRef(StrChar, EndChar - StrChar), Value); FA.Value.push_back(newToken); - } else if (Lexer.IsaAltMacroMode() && Lexer.is(AsmToken::Less) && + } else if (AltMacroMode && Lexer.is(AsmToken::Less) && isAltmacroString(StrLoc, EndLoc)) { const char *StrChar = StrLoc.getPointer(); const char *EndChar = EndLoc.getPointer(); @@ -4188,10 +4190,7 @@ bool AsmParser::parseDirectiveAltmacro(StringRef Directive) { if (getLexer().isNot(AsmToken::EndOfStatement)) return TokError("unexpected token in '" + Directive + "' directive"); - if (Directive == ".altmacro") - getLexer().SetAltMacroMode(true); - else - getLexer().SetAltMacroMode(false); + AltMacroMode = (Directive == ".altmacro"); return false; } Index: lib/MC/MCParser/MCAsmLexer.cpp =================================================================== --- lib/MC/MCParser/MCAsmLexer.cpp +++ lib/MC/MCParser/MCAsmLexer.cpp @@ -15,7 +15,7 @@ using namespace llvm; -MCAsmLexer::MCAsmLexer() : AltMacroMode(false) { +MCAsmLexer::MCAsmLexer() { CurTok.emplace_back(AsmToken::Space, StringRef()); }