split MCSection stuff out to its own .cpp file, add a new

MCSectionWithKind subclass of MCSection.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77684 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-07-31 17:02:00 +00:00
parent 23b6ecffe1
commit ed47a0409b
4 changed files with 57 additions and 16 deletions

View File

@ -17,24 +17,45 @@
#include <string>
#include "llvm/ADT/StringRef.h"
namespace llvm {
// FIXME: HORRIBLE HACK: major layering violation to get an enum.
#include "llvm/Target/TargetLoweringObjectFile.h"
namespace llvm {
class MCContext;
/// 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;
private:
MCSection(const MCSection&); // DO NOT IMPLEMENT
void operator=(const MCSection&); // DO NOT IMPLEMENT
MCSection(const StringRef &_Name, MCContext &Ctx);
protected:
MCSection(const StringRef &Name, MCContext &Ctx);
public:
virtual ~MCSection();
static MCSection *Create(const StringRef &_Name, MCContext &Ctx);
static MCSection *Create(const StringRef &Name, MCContext &Ctx);
const std::string &getName() const { return Name; }
};
/// MCSectionWithKind - This is used by targets that use the SectionKind enum
/// to classify their sections.
class MCSectionWithKind : public MCSection {
SectionKind Kind;
MCSectionWithKind(const StringRef &Name, SectionKind K, MCContext &Ctx)
: MCSection(Name, Ctx), Kind(K) {}
public:
static MCSectionWithKind *Create(const StringRef &Name, SectionKind K,
MCContext &Ctx);
SectionKind getKind() const { return Kind; }
};
} // end namespace llvm
#endif

View File

@ -3,6 +3,7 @@ add_llvm_library(LLVMMC
MCAsmParser.cpp
MCAsmStreamer.cpp
MCContext.cpp
MCSection.cpp
MCStreamer.cpp
TargetAsmParser.cpp
)

View File

@ -25,18 +25,6 @@ MCSection *MCContext::GetSection(const StringRef &Name) const {
return I != Sections.end() ? I->second : 0;
}
MCSection::MCSection(const StringRef &_Name, MCContext &Ctx) : Name(_Name) {
MCSection *&Entry = Ctx.Sections[Name];
assert(Entry == 0 && "Multiple sections with the same name created");
Entry = this;
}
MCSection *MCSection::Create(const StringRef &Name, MCContext &Ctx) {
return new (Ctx) MCSection(Name, Ctx);
}
MCSymbol *MCContext::CreateSymbol(const StringRef &Name) {
assert(Name[0] != '\0' && "Normal symbols cannot be unnamed!");

31
lib/MC/MCSection.cpp Normal file
View File

@ -0,0 +1,31 @@
//===- lib/MC/MCSection.cpp - Machine Code Section Representation ---------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "llvm/MC/MCSection.h"
#include "llvm/MC/MCContext.h"
using namespace llvm;
MCSection::~MCSection() {
}
MCSection::MCSection(const StringRef &N, MCContext &Ctx) : Name(N) {
MCSection *&Entry = Ctx.Sections[Name];
assert(Entry == 0 && "Multiple sections with the same name created");
Entry = this;
}
MCSection *MCSection::Create(const StringRef &Name, MCContext &Ctx) {
return new (Ctx) MCSection(Name, Ctx);
}
MCSectionWithKind *
MCSectionWithKind::Create(const StringRef &Name, SectionKind K, MCContext &Ctx){
return new (Ctx) MCSectionWithKind(Name, K, Ctx);
}