remove dead variable, patch by Nathan Howell!
[oota-llvm.git] / include / llvm / MC / MCSection.h
index 06d7e6af1e0be34e7db0f33f4ec6e5e844ff3433..3d8815a7783fb16755e321303ae4c72d9ab73674 100644 (file)
 
 #include <string>
 #include "llvm/ADT/StringRef.h"
-
-// FIXME: HORRIBLE HACK: major layering violation to get an enum.
-#include "llvm/Target/TargetLoweringObjectFile.h"
+#include "llvm/MC/SectionKind.h"
 
 namespace llvm {
   class MCContext;
+  class MCAsmInfo;
+  class raw_ostream;
   
   /// MCSection - Instances of this class represent a uniqued identifier for a
   /// section in the current translation unit.  The MCContext class uniques and
   /// creates these.
   class MCSection {
-    std::string Name;
     MCSection(const MCSection&);      // DO NOT IMPLEMENT
     void operator=(const MCSection&); // DO NOT IMPLEMENT
   protected:
-    MCSection(const StringRef &Name, MCContext &Ctx);
-    // FIXME: HACK.
+    MCSection(SectionKind K) : Kind(K) {}
     SectionKind Kind;
   public:
     virtual ~MCSection();
 
-    static MCSection *Create(const StringRef &Name, MCContext &Ctx);
-    
-    const std::string &getName() const { return Name; }
     SectionKind getKind() const { return Kind; }
+    
+    virtual void PrintSwitchToSection(const MCAsmInfo &MAI,
+                                      raw_ostream &OS) const = 0;
   };
 
-  /// MCSectionWithKind - This is used by targets that use the SectionKind enum
-  /// to classify their sections.
-  class MCSectionWithKind : public MCSection {
-    MCSectionWithKind(const StringRef &Name, SectionKind K, MCContext &Ctx) 
-      : MCSection(Name, Ctx) {
-      Kind = K;
+  class MCSectionCOFF : public MCSection {
+    // FIXME: This memory is leaked because MCSectionCOFF is bump pointer
+    // allocated and this never gets freed.
+    std::string Name;
+    
+    /// IsDirective - This is true if the section name is a directive, not
+    /// something that should be printed with ".section".
+    ///
+    /// FIXME: This is a hack.  Switch to a semantic view of the section instead
+    /// of a syntactic one.
+    bool IsDirective;
+    
+    MCSectionCOFF(StringRef name, bool isDirective, SectionKind K)
+      : MCSection(K), Name(name), IsDirective(isDirective) {
     }
   public:
     
-    static MCSectionWithKind *Create(const StringRef &Name, SectionKind K,
-                                     MCContext &Ctx);
+    static MCSectionCOFF *Create(StringRef Name, bool IsDirective, 
+                                 SectionKind K, MCContext &Ctx);
 
+    const std::string &getName() const { return Name; }
+    bool isDirective() const { return IsDirective; }
+    
+    virtual void PrintSwitchToSection(const MCAsmInfo &MAI,
+                                      raw_ostream &OS) const;
   };
   
-  
-  
-  typedef MCSectionWithKind MCSectionELF;
-  
 } // end namespace llvm
 
 #endif