MC/AsmParser: Add a DarwinAsmParser extension.

- Currently initialization is a bit of a hack, but harmless. We need to rework
   various parts of target initialization to clean this up.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108165 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Daniel Dunbar 2010-07-12 18:12:02 +00:00
parent 9d544d0416
commit e47497087b
2 changed files with 25 additions and 1 deletions

View File

@ -45,6 +45,7 @@ private:
MCStreamer &Out;
SourceMgr &SrcMgr;
MCAsmParserExtension *GenericParser;
MCAsmParserExtension *PlatformParser;
TargetAsmParser *TargetParser;
/// This is the current buffer index we're lexing from as managed by the

View File

@ -56,6 +56,18 @@ public:
bool ParseDirectiveLoc(StringRef, SMLoc DirectiveLoc); // ".loc"
};
/// \brief Implementation of directive handling which is shared across all
/// Darwin targets.
class DarwinAsmParser : public MCAsmParserExtension {
public:
DarwinAsmParser() {}
virtual void Initialize(MCAsmParser &Parser) {
// Call the base implementation.
this->MCAsmParserExtension::Initialize(Parser);
}
};
}
enum { DEFAULT_ADDRSPACE = 0 };
@ -63,14 +75,25 @@ enum { DEFAULT_ADDRSPACE = 0 };
AsmParser::AsmParser(const Target &T, SourceMgr &_SM, MCContext &_Ctx,
MCStreamer &_Out, const MCAsmInfo &_MAI)
: Lexer(_MAI), Ctx(_Ctx), Out(_Out), SrcMgr(_SM),
GenericParser(new GenericAsmParser), TargetParser(0), CurBuffer(0) {
GenericParser(new GenericAsmParser), PlatformParser(0),
TargetParser(0), CurBuffer(0) {
Lexer.setBuffer(SrcMgr.getMemoryBuffer(CurBuffer));
// Initialize the generic parser.
GenericParser->Initialize(*this);
// Initialize the platform / file format parser.
//
// FIXME: This is a hack, we need to (majorly) cleanup how these objects are
// created.
if (_MAI.hasSubsectionsViaSymbols()) {
PlatformParser = new DarwinAsmParser;
PlatformParser->Initialize(*this);
}
}
AsmParser::~AsmParser() {
delete PlatformParser;
delete GenericParser;
}