MC/AsmParser: Lift Run() and TargetParser to base class.
authorDaniel Dunbar <daniel@zuster.org>
Sat, 17 Jul 2010 02:26:10 +0000 (02:26 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Sat, 17 Jul 2010 02:26:10 +0000 (02:26 +0000)
Also, add constructor function for creating AsmParser instances.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108604 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/MC/MCParser/AsmParser.h
include/llvm/MC/MCParser/MCAsmParser.h
lib/MC/MCParser/AsmParser.cpp
lib/MC/MCParser/MCAsmParser.cpp

index 0e8570aa908bf2be5bf28cd7d379afc0376a8a4b..24d8590fca9971da401c5120b89f94013a92aa7d 100644 (file)
@@ -46,7 +46,6 @@ private:
   SourceMgr &SrcMgr;
   MCAsmParserExtension *GenericParser;
   MCAsmParserExtension *PlatformParser;
-  TargetAsmParser *TargetParser;
   
   /// This is the current buffer index we're lexing from as managed by the
   /// SourceMgr object.
@@ -65,7 +64,7 @@ public:
             const MCAsmInfo &MAI);
   ~AsmParser();
 
-  bool Run(bool NoInitialTextSection, bool NoFinalize = false);
+  virtual bool Run(bool NoInitialTextSection, bool NoFinalize = false);
 
   void AddDirectiveHandler(MCAsmParserExtension *Object,
                            StringRef Directive,
@@ -74,9 +73,6 @@ public:
   }
 
 public:
-  TargetAsmParser &getTargetParser() const { return *TargetParser; }
-  void setTargetParser(TargetAsmParser &P);
-
   /// @name MCAsmParser Interface
   /// {
 
index d0ccd0f617484c518e40b8fe5a2253414c9b5775..c18bb39222c9ca5c097ff0237acfe662e85d4c75 100644 (file)
@@ -14,6 +14,7 @@
 
 namespace llvm {
 class AsmToken;
+class MCAsmInfo;
 class MCAsmLexer;
 class MCAsmParserExtension;
 class MCContext;
@@ -22,6 +23,8 @@ class MCStreamer;
 class SMLoc;
 class SourceMgr;
 class StringRef;
+class Target;
+class TargetAsmParser;
 class Twine;
 
 /// MCAsmParser - Generic assembler parser interface, for use by target specific
@@ -33,6 +36,9 @@ public:
 private:
   MCAsmParser(const MCAsmParser &);   // DO NOT IMPLEMENT
   void operator=(const MCAsmParser &);  // DO NOT IMPLEMENT
+
+  TargetAsmParser *TargetParser;
+
 protected: // Can only create subclasses.
   MCAsmParser();
 
@@ -52,6 +58,12 @@ public:
   /// getStreamer - Return the output streamer for the assembler.
   virtual MCStreamer &getStreamer() = 0;
 
+  TargetAsmParser &getTargetParser() const { return *TargetParser; }
+  void setTargetParser(TargetAsmParser &P);
+
+  /// Run - Run the parser on the input source buffer.
+  virtual bool Run(bool NoInitialTextSection, bool NoFinalize = false) = 0;
+
   /// Warning - Emit a warning at the location \arg L, with the message \arg
   /// Msg.
   virtual void Warning(SMLoc L, const Twine &Msg) = 0;
@@ -102,6 +114,10 @@ public:
   virtual bool ParseAbsoluteExpression(int64_t &Res) = 0;
 };
 
+/// \brief Create an MCAsmParser instance.
+MCAsmParser *createMCAsmParser(const Target &, SourceMgr &, MCContext &,
+                               MCStreamer &, const MCAsmInfo &);
+
 } // End llvm namespace
 
 #endif
index 8343c3cbfa71863033ed49f7829c2e9ac04726a2..37cabdb24afc2ef345b49e53044bd05979b302b9 100644 (file)
@@ -69,7 +69,7 @@ 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), PlatformParser(0),
-    TargetParser(0), CurBuffer(0) {
+    CurBuffer(0) {
   Lexer.setBuffer(SrcMgr.getMemoryBuffer(CurBuffer));
 
   // Initialize the generic parser.
@@ -93,12 +93,6 @@ AsmParser::~AsmParser() {
   delete GenericParser;
 }
 
-void AsmParser::setTargetParser(TargetAsmParser &P) {
-  assert(!TargetParser && "Target parser is already initialized!");
-  TargetParser = &P;
-  TargetParser->Initialize(*this);
-}
-
 void AsmParser::Warning(SMLoc L, const Twine &Msg) {
   PrintMessage(L, Msg.str(), "warning");
 }
@@ -1487,3 +1481,10 @@ bool GenericAsmParser::ParseDirectiveLoc(StringRef, SMLoc DirectiveLoc) {
   return false;
 }
 
+
+/// \brief Create an MCAsmParser instance.
+MCAsmParser *llvm::createMCAsmParser(const Target &T, SourceMgr &SM,
+                                     MCContext &C, MCStreamer &Out,
+                                     const MCAsmInfo &MAI) {
+  return new AsmParser(T, SM, C, Out, MAI);
+}
index bee30641c7fcd25efc7fe896bf6649163921c04f..39233aedde0590891119533f04773b8ff8442025 100644 (file)
 #include "llvm/MC/MCParser/MCAsmLexer.h"
 #include "llvm/MC/MCParser/MCParsedAsmOperand.h"
 #include "llvm/Support/SourceMgr.h"
+#include "llvm/Target/TargetAsmParser.h"
 using namespace llvm;
 
-MCAsmParser::MCAsmParser() {
+MCAsmParser::MCAsmParser() : TargetParser(0) {
 }
 
 MCAsmParser::~MCAsmParser() {
 }
 
+void MCAsmParser::setTargetParser(TargetAsmParser &P) {
+  assert(!TargetParser && "Target parser is already initialized!");
+  TargetParser = &P;
+  TargetParser->Initialize(*this);
+}
+
 const AsmToken &MCAsmParser::getTok() {
   return getLexer().getTok();
 }