mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-12 16:25:18 +00:00
Use IntrusiveRefCntPtr to manage the lifetime of BitCodeAbbrevs.
This doesn't change the interface or gives additional safety but removes a ton of retain/release boilerplate. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217778 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -37,7 +37,7 @@ public:
|
||||
/// These describe abbreviations that all blocks of the specified ID inherit.
|
||||
struct BlockInfo {
|
||||
unsigned BlockID;
|
||||
std::vector<BitCodeAbbrev*> Abbrevs;
|
||||
std::vector<IntrusiveRefCntPtr<BitCodeAbbrev>> Abbrevs;
|
||||
std::string Name;
|
||||
|
||||
std::vector<std::pair<unsigned, std::string> > RecordNames;
|
||||
@@ -86,18 +86,6 @@ public:
|
||||
|
||||
StreamableMemoryObject &getBitcodeBytes() { return *BitcodeBytes; }
|
||||
|
||||
~BitstreamReader() {
|
||||
// Free the BlockInfoRecords.
|
||||
while (!BlockInfoRecords.empty()) {
|
||||
BlockInfo &Info = BlockInfoRecords.back();
|
||||
// Free blockinfo abbrev info.
|
||||
for (unsigned i = 0, e = static_cast<unsigned>(Info.Abbrevs.size());
|
||||
i != e; ++i)
|
||||
Info.Abbrevs[i]->dropRef();
|
||||
BlockInfoRecords.pop_back();
|
||||
}
|
||||
}
|
||||
|
||||
/// CollectBlockInfoNames - This is called by clients that want block/record
|
||||
/// name information.
|
||||
void CollectBlockInfoNames() { IgnoreBlockInfoNames = false; }
|
||||
@@ -208,11 +196,11 @@ class BitstreamCursor {
|
||||
unsigned CurCodeSize;
|
||||
|
||||
/// CurAbbrevs - Abbrevs installed at in this block.
|
||||
std::vector<BitCodeAbbrev*> CurAbbrevs;
|
||||
std::vector<IntrusiveRefCntPtr<BitCodeAbbrev>> CurAbbrevs;
|
||||
|
||||
struct Block {
|
||||
unsigned PrevCodeSize;
|
||||
std::vector<BitCodeAbbrev*> PrevAbbrevs;
|
||||
std::vector<IntrusiveRefCntPtr<BitCodeAbbrev>> PrevAbbrevs;
|
||||
explicit Block(unsigned PCS) : PrevCodeSize(PCS) {}
|
||||
};
|
||||
|
||||
@@ -222,10 +210,6 @@ class BitstreamCursor {
|
||||
|
||||
public:
|
||||
BitstreamCursor() : BitStream(nullptr), NextChar(0) {}
|
||||
BitstreamCursor(const BitstreamCursor &RHS)
|
||||
: BitStream(nullptr), NextChar(0) {
|
||||
operator=(RHS);
|
||||
}
|
||||
|
||||
explicit BitstreamCursor(BitstreamReader &R) : BitStream(&R) {
|
||||
NextChar = 0;
|
||||
@@ -244,12 +228,6 @@ public:
|
||||
CurCodeSize = 2;
|
||||
}
|
||||
|
||||
~BitstreamCursor() {
|
||||
freeState();
|
||||
}
|
||||
|
||||
void operator=(const BitstreamCursor &RHS);
|
||||
|
||||
void freeState();
|
||||
|
||||
bool isEndPos(size_t pos) {
|
||||
@@ -529,12 +507,7 @@ private:
|
||||
void popBlockScope() {
|
||||
CurCodeSize = BlockScope.back().PrevCodeSize;
|
||||
|
||||
// Delete abbrevs from popped scope.
|
||||
for (unsigned i = 0, e = static_cast<unsigned>(CurAbbrevs.size());
|
||||
i != e; ++i)
|
||||
CurAbbrevs[i]->dropRef();
|
||||
|
||||
BlockScope.back().PrevAbbrevs.swap(CurAbbrevs);
|
||||
CurAbbrevs = std::move(BlockScope.back().PrevAbbrevs);
|
||||
BlockScope.pop_back();
|
||||
}
|
||||
|
||||
@@ -555,7 +528,7 @@ public:
|
||||
const BitCodeAbbrev *getAbbrev(unsigned AbbrevID) {
|
||||
unsigned AbbrevNo = AbbrevID-bitc::FIRST_APPLICATION_ABBREV;
|
||||
assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!");
|
||||
return CurAbbrevs[AbbrevNo];
|
||||
return CurAbbrevs[AbbrevNo].get();
|
||||
}
|
||||
|
||||
/// skipRecord - Read the current record and discard it.
|
||||
|
Reference in New Issue
Block a user