add a virtual dtor to MCTargetExpr, hopefully silencing some warnings.
[oota-llvm.git] / include / llvm / MC / MCSection.h
index 341f7f01514441b0c51f2fb9cd729ca113635b15..ceb6d278c9c0bf4a3905450269f93c219be9670e 100644 (file)
@@ -6,23 +6,66 @@
 // License. See LICENSE.TXT for details.
 //
 //===----------------------------------------------------------------------===//
+//
+// This file declares the MCSection class.
+//
+//===----------------------------------------------------------------------===//
 
 #ifndef LLVM_MC_MCSECTION_H
 #define LLVM_MC_MCSECTION_H
 
 #include <string>
+#include "llvm/ADT/StringRef.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(SectionKind K) : Kind(K) {}
+    SectionKind Kind;
+  public:
+    virtual ~MCSection();
+
+    SectionKind getKind() const { return Kind; }
+    
+    virtual void PrintSwitchToSection(const MCAsmInfo &MAI,
+                                      raw_ostream &OS) const = 0;
+  };
 
+  class MCSectionCOFF : public MCSection {
+    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:
-    MCSection(const char *_Name) : Name(_Name) {}
+    
+    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;
   };
-
+  
 } // end namespace llvm
 
 #endif