[llvm-commits] [llvm] r108649 - in /llvm/trunk: lib/MC/MCParser/AsmParser.cpp test/MC/AsmParser/macros-parsing.s
Daniel Dunbar
daniel at zuster.org
Sun Jul 18 11:38:02 PDT 2010
Author: ddunbar
Date: Sun Jul 18 13:38:02 2010
New Revision: 108649
URL: http://llvm.org/viewvc/llvm-project?rev=108649&view=rev
Log:
MC/AsmParser: Add .macros_{off,on} support, not that makes sense since we don't
support macros.
Added:
llvm/trunk/test/MC/AsmParser/macros-parsing.s
Modified:
llvm/trunk/lib/MC/MCParser/AsmParser.cpp
Modified: llvm/trunk/lib/MC/MCParser/AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=108649&r1=108648&r2=108649&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCParser/AsmParser.cpp (original)
+++ llvm/trunk/lib/MC/MCParser/AsmParser.cpp Sun Jul 18 13:38:02 2010
@@ -38,6 +38,8 @@
/// \brief The concrete assembly parser instance.
class AsmParser : public MCAsmParser {
+ friend class GenericAsmParser;
+
AsmParser(const AsmParser &); // DO NOT IMPLEMENT
void operator=(const AsmParser &); // DO NOT IMPLEMENT
private:
@@ -47,7 +49,7 @@
SourceMgr &SrcMgr;
MCAsmParserExtension *GenericParser;
MCAsmParserExtension *PlatformParser;
-
+
/// This is the current buffer index we're lexing from as managed by the
/// SourceMgr object.
int CurBuffer;
@@ -60,6 +62,10 @@
/// parsing and validating the rest of the directive. The handler is passed
/// in the directive name and the location of the directive keyword.
StringMap<std::pair<MCAsmParserExtension*, DirectiveHandler> > DirectiveMap;
+
+ /// Boolean tracking whether macro substitution is enabled.
+ unsigned MacrosEnabled : 1;
+
public:
AsmParser(const Target &T, SourceMgr &SM, MCContext &Ctx, MCStreamer &Out,
const MCAsmInfo &MAI);
@@ -150,6 +156,10 @@
public:
GenericAsmParser() {}
+ AsmParser &getParser() {
+ return (AsmParser&) this->MCAsmParserExtension::getParser();
+ }
+
virtual void Initialize(MCAsmParser &Parser) {
// Call the base implementation.
this->MCAsmParserExtension::Initialize(Parser);
@@ -161,11 +171,20 @@
&GenericAsmParser::ParseDirectiveLine));
Parser.AddDirectiveHandler(this, ".loc", MCAsmParser::DirectiveHandler(
&GenericAsmParser::ParseDirectiveLoc));
+
+ // Macro directives.
+ Parser.AddDirectiveHandler(this, ".macros_on",
+ MCAsmParser::DirectiveHandler(
+ &GenericAsmParser::ParseDirectiveMacrosOnOff));
+ Parser.AddDirectiveHandler(this, ".macros_off",
+ MCAsmParser::DirectiveHandler(
+ &GenericAsmParser::ParseDirectiveMacrosOnOff));
}
- bool ParseDirectiveFile(StringRef, SMLoc DirectiveLoc); // ".file"
- bool ParseDirectiveLine(StringRef, SMLoc DirectiveLoc); // ".line"
- bool ParseDirectiveLoc(StringRef, SMLoc DirectiveLoc); // ".loc"
+ bool ParseDirectiveFile(StringRef, SMLoc DirectiveLoc);
+ bool ParseDirectiveLine(StringRef, SMLoc DirectiveLoc);
+ bool ParseDirectiveLoc(StringRef, SMLoc DirectiveLoc);
+ bool ParseDirectiveMacrosOnOff(StringRef, SMLoc DirectiveLoc);
};
}
@@ -183,7 +202,7 @@
MCStreamer &_Out, const MCAsmInfo &_MAI)
: Lexer(_MAI), Ctx(_Ctx), Out(_Out), SrcMgr(_SM),
GenericParser(new GenericAsmParser), PlatformParser(0),
- CurBuffer(0) {
+ CurBuffer(0), MacrosEnabled(true) {
Lexer.setBuffer(SrcMgr.getMemoryBuffer(CurBuffer));
// Initialize the generic parser.
@@ -1593,6 +1612,19 @@
return false;
}
+/// ParseDirectiveMacrosOnOff
+/// ::= .macros_on
+/// ::= .macros_off
+bool GenericAsmParser::ParseDirectiveMacrosOnOff(StringRef Directive,
+ SMLoc DirectiveLoc) {
+ if (getLexer().isNot(AsmToken::EndOfStatement))
+ return Error(getLexer().getLoc(),
+ "unexpected token in '" + Directive + "' directive");
+
+ getParser().MacrosEnabled = Directive == ".macros_on";
+
+ return false;
+}
/// \brief Create an MCAsmParser instance.
MCAsmParser *llvm::createMCAsmParser(const Target &T, SourceMgr &SM,
Added: llvm/trunk/test/MC/AsmParser/macros-parsing.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AsmParser/macros-parsing.s?rev=108649&view=auto
==============================================================================
--- llvm/trunk/test/MC/AsmParser/macros-parsing.s (added)
+++ llvm/trunk/test/MC/AsmParser/macros-parsing.s Sun Jul 18 13:38:02 2010
@@ -0,0 +1,8 @@
+// RUN: llvm-mc %s 2> %t.err
+// RUN: FileCheck --check-prefix=CHECK-ERRORS %s < %t.err
+
+.macros_on
+.macros_off
+
+// CHECK-ERRORS: .abort '"end"' detected
+.abort "end"
More information about the llvm-commits
mailing list