|
@@ -46,7 +46,6 @@
|
|
#include "llvm/ADT/Hashing.h"
|
|
#include "llvm/ADT/Hashing.h"
|
|
#include "llvm/ADT/StringExtras.h"
|
|
#include "llvm/ADT/StringExtras.h"
|
|
#include "llvm/Bitcode/BitstreamWriter.h"
|
|
#include "llvm/Bitcode/BitstreamWriter.h"
|
|
-#include "llvm/Support/EndianStream.h"
|
|
|
|
#include "llvm/Support/FileSystem.h"
|
|
#include "llvm/Support/FileSystem.h"
|
|
#include "llvm/Support/MemoryBuffer.h"
|
|
#include "llvm/Support/MemoryBuffer.h"
|
|
#include "llvm/Support/Path.h"
|
|
#include "llvm/Support/Path.h"
|
|
@@ -1466,31 +1465,26 @@ namespace {
|
|
|
|
|
|
std::pair<unsigned,unsigned>
|
|
std::pair<unsigned,unsigned>
|
|
EmitKeyDataLength(raw_ostream& Out, key_type_ref key, data_type_ref Data) {
|
|
EmitKeyDataLength(raw_ostream& Out, key_type_ref key, data_type_ref Data) {
|
|
- using namespace llvm::support;
|
|
|
|
- endian::Writer<little> Writer(Out);
|
|
|
|
unsigned KeyLen = strlen(key.Filename) + 1 + 8 + 8;
|
|
unsigned KeyLen = strlen(key.Filename) + 1 + 8 + 8;
|
|
- Writer.write<uint16_t>(KeyLen);
|
|
|
|
|
|
+ clang::io::Emit16(Out, KeyLen);
|
|
unsigned DataLen = 1 + 2 + 4 + 4;
|
|
unsigned DataLen = 1 + 2 + 4 + 4;
|
|
if (Data.isModuleHeader)
|
|
if (Data.isModuleHeader)
|
|
DataLen += 4;
|
|
DataLen += 4;
|
|
- Writer.write<uint16_t>(DataLen);
|
|
|
|
|
|
+ clang::io::Emit8(Out, DataLen);
|
|
return std::make_pair(KeyLen, DataLen);
|
|
return std::make_pair(KeyLen, DataLen);
|
|
}
|
|
}
|
|
|
|
|
|
void EmitKey(raw_ostream& Out, key_type_ref key, unsigned KeyLen) {
|
|
void EmitKey(raw_ostream& Out, key_type_ref key, unsigned KeyLen) {
|
|
- using namespace llvm::support;
|
|
|
|
- endian::Writer<little> LE(Out);
|
|
|
|
- LE.write<uint64_t>(key.FE->getSize());
|
|
|
|
|
|
+ clang::io::Emit64(Out, key.FE->getSize());
|
|
KeyLen -= 8;
|
|
KeyLen -= 8;
|
|
- LE.write<uint64_t>(key.FE->getModificationTime());
|
|
|
|
|
|
+ clang::io::Emit64(Out, key.FE->getModificationTime());
|
|
KeyLen -= 8;
|
|
KeyLen -= 8;
|
|
Out.write(key.Filename, KeyLen);
|
|
Out.write(key.Filename, KeyLen);
|
|
}
|
|
}
|
|
|
|
|
|
void EmitData(raw_ostream &Out, key_type_ref key,
|
|
void EmitData(raw_ostream &Out, key_type_ref key,
|
|
data_type_ref Data, unsigned DataLen) {
|
|
data_type_ref Data, unsigned DataLen) {
|
|
- using namespace llvm::support;
|
|
|
|
- endian::Writer<little> LE(Out);
|
|
|
|
|
|
+ using namespace clang::io;
|
|
uint64_t Start = Out.tell(); (void)Start;
|
|
uint64_t Start = Out.tell(); (void)Start;
|
|
|
|
|
|
unsigned char Flags = (Data.HeaderRole << 6)
|
|
unsigned char Flags = (Data.HeaderRole << 6)
|
|
@@ -1499,13 +1493,13 @@ namespace {
|
|
| (Data.DirInfo << 2)
|
|
| (Data.DirInfo << 2)
|
|
| (Data.Resolved << 1)
|
|
| (Data.Resolved << 1)
|
|
| Data.IndexHeaderMapHeader;
|
|
| Data.IndexHeaderMapHeader;
|
|
- LE.write<uint8_t>(Flags);
|
|
|
|
- LE.write<uint16_t>(Data.NumIncludes);
|
|
|
|
|
|
+ Emit8(Out, (uint8_t)Flags);
|
|
|
|
+ Emit16(Out, (uint16_t) Data.NumIncludes);
|
|
|
|
|
|
if (!Data.ControllingMacro)
|
|
if (!Data.ControllingMacro)
|
|
- LE.write<uint32_t>(Data.ControllingMacroID);
|
|
|
|
|
|
+ Emit32(Out, (uint32_t)Data.ControllingMacroID);
|
|
else
|
|
else
|
|
- LE.write<uint32_t>(Writer.getIdentifierRef(Data.ControllingMacro));
|
|
|
|
|
|
+ Emit32(Out, (uint32_t)Writer.getIdentifierRef(Data.ControllingMacro));
|
|
|
|
|
|
unsigned Offset = 0;
|
|
unsigned Offset = 0;
|
|
if (!Data.Framework.empty()) {
|
|
if (!Data.Framework.empty()) {
|
|
@@ -1522,11 +1516,11 @@ namespace {
|
|
} else
|
|
} else
|
|
Offset = Pos->second;
|
|
Offset = Pos->second;
|
|
}
|
|
}
|
|
- LE.write<uint32_t>(Offset);
|
|
|
|
|
|
+ Emit32(Out, Offset);
|
|
|
|
|
|
if (Data.isModuleHeader) {
|
|
if (Data.isModuleHeader) {
|
|
Module *Mod = HS.findModuleForHeader(key.FE).getModule();
|
|
Module *Mod = HS.findModuleForHeader(key.FE).getModule();
|
|
- LE.write<uint32_t>(Writer.getExistingSubmoduleID(Mod));
|
|
|
|
|
|
+ Emit32(Out, Writer.getExistingSubmoduleID(Mod));
|
|
}
|
|
}
|
|
|
|
|
|
assert(Out.tell() - Start == DataLen && "Wrong data length");
|
|
assert(Out.tell() - Start == DataLen && "Wrong data length");
|
|
@@ -1584,10 +1578,9 @@ void ASTWriter::WriteHeaderSearch(const HeaderSearch &HS, StringRef isysroot) {
|
|
SmallString<4096> TableData;
|
|
SmallString<4096> TableData;
|
|
uint32_t BucketOffset;
|
|
uint32_t BucketOffset;
|
|
{
|
|
{
|
|
- using namespace llvm::support;
|
|
|
|
llvm::raw_svector_ostream Out(TableData);
|
|
llvm::raw_svector_ostream Out(TableData);
|
|
// Make sure that no bucket is at offset 0
|
|
// Make sure that no bucket is at offset 0
|
|
- endian::Writer<little>(Out).write(0);
|
|
|
|
|
|
+ clang::io::Emit32(Out, 0);
|
|
BucketOffset = Generator.Emit(Out, GeneratorTrait);
|
|
BucketOffset = Generator.Emit(Out, GeneratorTrait);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1842,14 +1835,12 @@ public:
|
|
}
|
|
}
|
|
|
|
|
|
static void EmitKey(raw_ostream& Out, key_type_ref Key, unsigned KeyLen) {
|
|
static void EmitKey(raw_ostream& Out, key_type_ref Key, unsigned KeyLen) {
|
|
- using namespace llvm::support;
|
|
|
|
- endian::Writer<little>(Out).write<uint32_t>(Key);
|
|
|
|
|
|
+ clang::io::Emit32(Out, Key);
|
|
}
|
|
}
|
|
|
|
|
|
static void EmitData(raw_ostream& Out, key_type_ref Key, data_type_ref Data,
|
|
static void EmitData(raw_ostream& Out, key_type_ref Key, data_type_ref Data,
|
|
unsigned) {
|
|
unsigned) {
|
|
- using namespace llvm::support;
|
|
|
|
- endian::Writer<little>(Out).write<uint32_t>(Data.MacroDirectivesOffset);
|
|
|
|
|
|
+ clang::io::Emit32(Out, Data.MacroDirectivesOffset);
|
|
}
|
|
}
|
|
};
|
|
};
|
|
} // end anonymous namespace
|
|
} // end anonymous namespace
|
|
@@ -2045,10 +2036,9 @@ void ASTWriter::WritePreprocessor(const Preprocessor &PP, bool IsModule) {
|
|
SmallString<4096> MacroTable;
|
|
SmallString<4096> MacroTable;
|
|
uint32_t BucketOffset;
|
|
uint32_t BucketOffset;
|
|
{
|
|
{
|
|
- using namespace llvm::support;
|
|
|
|
llvm::raw_svector_ostream Out(MacroTable);
|
|
llvm::raw_svector_ostream Out(MacroTable);
|
|
// Make sure that no bucket is at offset 0
|
|
// Make sure that no bucket is at offset 0
|
|
- endian::Writer<little>(Out).write(0);
|
|
|
|
|
|
+ clang::io::Emit32(Out, 0);
|
|
BucketOffset = Generator.Emit(Out);
|
|
BucketOffset = Generator.Emit(Out);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2719,10 +2709,8 @@ public:
|
|
std::pair<unsigned,unsigned>
|
|
std::pair<unsigned,unsigned>
|
|
EmitKeyDataLength(raw_ostream& Out, Selector Sel,
|
|
EmitKeyDataLength(raw_ostream& Out, Selector Sel,
|
|
data_type_ref Methods) {
|
|
data_type_ref Methods) {
|
|
- using namespace llvm::support;
|
|
|
|
- endian::Writer<little> LE(Out);
|
|
|
|
unsigned KeyLen = 2 + (Sel.getNumArgs()? Sel.getNumArgs() * 4 : 4);
|
|
unsigned KeyLen = 2 + (Sel.getNumArgs()? Sel.getNumArgs() * 4 : 4);
|
|
- LE.write<uint16_t>(KeyLen);
|
|
|
|
|
|
+ clang::io::Emit16(Out, KeyLen);
|
|
unsigned DataLen = 4 + 2 + 2; // 2 bytes for each of the method counts
|
|
unsigned DataLen = 4 + 2 + 2; // 2 bytes for each of the method counts
|
|
for (const ObjCMethodList *Method = &Methods.Instance; Method;
|
|
for (const ObjCMethodList *Method = &Methods.Instance; Method;
|
|
Method = Method->getNext())
|
|
Method = Method->getNext())
|
|
@@ -2732,31 +2720,27 @@ public:
|
|
Method = Method->getNext())
|
|
Method = Method->getNext())
|
|
if (Method->Method)
|
|
if (Method->Method)
|
|
DataLen += 4;
|
|
DataLen += 4;
|
|
- LE.write<uint16_t>(DataLen);
|
|
|
|
|
|
+ clang::io::Emit16(Out, DataLen);
|
|
return std::make_pair(KeyLen, DataLen);
|
|
return std::make_pair(KeyLen, DataLen);
|
|
}
|
|
}
|
|
|
|
|
|
void EmitKey(raw_ostream& Out, Selector Sel, unsigned) {
|
|
void EmitKey(raw_ostream& Out, Selector Sel, unsigned) {
|
|
- using namespace llvm::support;
|
|
|
|
- endian::Writer<little> LE(Out);
|
|
|
|
uint64_t Start = Out.tell();
|
|
uint64_t Start = Out.tell();
|
|
assert((Start >> 32) == 0 && "Selector key offset too large");
|
|
assert((Start >> 32) == 0 && "Selector key offset too large");
|
|
Writer.SetSelectorOffset(Sel, Start);
|
|
Writer.SetSelectorOffset(Sel, Start);
|
|
unsigned N = Sel.getNumArgs();
|
|
unsigned N = Sel.getNumArgs();
|
|
- LE.write<uint16_t>(N);
|
|
|
|
|
|
+ clang::io::Emit16(Out, N);
|
|
if (N == 0)
|
|
if (N == 0)
|
|
N = 1;
|
|
N = 1;
|
|
for (unsigned I = 0; I != N; ++I)
|
|
for (unsigned I = 0; I != N; ++I)
|
|
- LE.write<uint32_t>(
|
|
|
|
- Writer.getIdentifierRef(Sel.getIdentifierInfoForSlot(I)));
|
|
|
|
|
|
+ clang::io::Emit32(Out,
|
|
|
|
+ Writer.getIdentifierRef(Sel.getIdentifierInfoForSlot(I)));
|
|
}
|
|
}
|
|
|
|
|
|
void EmitData(raw_ostream& Out, key_type_ref,
|
|
void EmitData(raw_ostream& Out, key_type_ref,
|
|
data_type_ref Methods, unsigned DataLen) {
|
|
data_type_ref Methods, unsigned DataLen) {
|
|
- using namespace llvm::support;
|
|
|
|
- endian::Writer<little> LE(Out);
|
|
|
|
uint64_t Start = Out.tell(); (void)Start;
|
|
uint64_t Start = Out.tell(); (void)Start;
|
|
- LE.write<uint32_t>(Methods.ID);
|
|
|
|
|
|
+ clang::io::Emit32(Out, Methods.ID);
|
|
unsigned NumInstanceMethods = 0;
|
|
unsigned NumInstanceMethods = 0;
|
|
for (const ObjCMethodList *Method = &Methods.Instance; Method;
|
|
for (const ObjCMethodList *Method = &Methods.Instance; Method;
|
|
Method = Method->getNext())
|
|
Method = Method->getNext())
|
|
@@ -2776,16 +2760,16 @@ public:
|
|
unsigned FactoryBits = Methods.Factory.getBits();
|
|
unsigned FactoryBits = Methods.Factory.getBits();
|
|
assert(FactoryBits < 4);
|
|
assert(FactoryBits < 4);
|
|
unsigned NumFactoryMethodsAndBits = (NumFactoryMethods << 2) | FactoryBits;
|
|
unsigned NumFactoryMethodsAndBits = (NumFactoryMethods << 2) | FactoryBits;
|
|
- LE.write<uint16_t>(NumInstanceMethodsAndBits);
|
|
|
|
- LE.write<uint16_t>(NumFactoryMethodsAndBits);
|
|
|
|
|
|
+ clang::io::Emit16(Out, NumInstanceMethodsAndBits);
|
|
|
|
+ clang::io::Emit16(Out, NumFactoryMethodsAndBits);
|
|
for (const ObjCMethodList *Method = &Methods.Instance; Method;
|
|
for (const ObjCMethodList *Method = &Methods.Instance; Method;
|
|
Method = Method->getNext())
|
|
Method = Method->getNext())
|
|
if (Method->Method)
|
|
if (Method->Method)
|
|
- LE.write<uint32_t>(Writer.getDeclID(Method->Method));
|
|
|
|
|
|
+ clang::io::Emit32(Out, Writer.getDeclID(Method->Method));
|
|
for (const ObjCMethodList *Method = &Methods.Factory; Method;
|
|
for (const ObjCMethodList *Method = &Methods.Factory; Method;
|
|
Method = Method->getNext())
|
|
Method = Method->getNext())
|
|
if (Method->Method)
|
|
if (Method->Method)
|
|
- LE.write<uint32_t>(Writer.getDeclID(Method->Method));
|
|
|
|
|
|
+ clang::io::Emit32(Out, Writer.getDeclID(Method->Method));
|
|
|
|
|
|
assert(Out.tell() - Start == DataLen && "Data length is wrong");
|
|
assert(Out.tell() - Start == DataLen && "Data length is wrong");
|
|
}
|
|
}
|
|
@@ -2854,11 +2838,10 @@ void ASTWriter::WriteSelectors(Sema &SemaRef) {
|
|
SmallString<4096> MethodPool;
|
|
SmallString<4096> MethodPool;
|
|
uint32_t BucketOffset;
|
|
uint32_t BucketOffset;
|
|
{
|
|
{
|
|
- using namespace llvm::support;
|
|
|
|
ASTMethodPoolTrait Trait(*this);
|
|
ASTMethodPoolTrait Trait(*this);
|
|
llvm::raw_svector_ostream Out(MethodPool);
|
|
llvm::raw_svector_ostream Out(MethodPool);
|
|
// Make sure that no bucket is at offset 0
|
|
// Make sure that no bucket is at offset 0
|
|
- endian::Writer<little>(Out).write<uint32_t>(0);
|
|
|
|
|
|
+ clang::io::Emit32(Out, 0);
|
|
BucketOffset = Generator.Emit(Out, Trait);
|
|
BucketOffset = Generator.Emit(Out, Trait);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -3103,14 +3086,11 @@ public:
|
|
D != DEnd; ++D)
|
|
D != DEnd; ++D)
|
|
DataLen += sizeof(DeclID);
|
|
DataLen += sizeof(DeclID);
|
|
}
|
|
}
|
|
- using namespace llvm::support;
|
|
|
|
- endian::Writer<little> LE(Out);
|
|
|
|
-
|
|
|
|
- LE.write<uint16_t>(DataLen);
|
|
|
|
|
|
+ clang::io::Emit16(Out, DataLen);
|
|
// We emit the key length after the data length so that every
|
|
// We emit the key length after the data length so that every
|
|
// string is preceded by a 16-bit length. This matches the PTH
|
|
// string is preceded by a 16-bit length. This matches the PTH
|
|
// format for storing identifiers.
|
|
// format for storing identifiers.
|
|
- LE.write<uint16_t>(KeyLen);
|
|
|
|
|
|
+ clang::io::Emit16(Out, KeyLen);
|
|
return std::make_pair(KeyLen, DataLen);
|
|
return std::make_pair(KeyLen, DataLen);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -3125,28 +3105,24 @@ public:
|
|
static void emitMacroOverrides(raw_ostream &Out,
|
|
static void emitMacroOverrides(raw_ostream &Out,
|
|
llvm::ArrayRef<SubmoduleID> Overridden) {
|
|
llvm::ArrayRef<SubmoduleID> Overridden) {
|
|
if (!Overridden.empty()) {
|
|
if (!Overridden.empty()) {
|
|
- using namespace llvm::support;
|
|
|
|
- endian::Writer<little> LE(Out);
|
|
|
|
- LE.write<uint32_t>(Overridden.size() | 0x80000000U);
|
|
|
|
|
|
+ clang::io::Emit32(Out, Overridden.size() | 0x80000000U);
|
|
for (unsigned I = 0, N = Overridden.size(); I != N; ++I)
|
|
for (unsigned I = 0, N = Overridden.size(); I != N; ++I)
|
|
- LE.write<uint32_t>(Overridden[I]);
|
|
|
|
|
|
+ clang::io::Emit32(Out, Overridden[I]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void EmitData(raw_ostream& Out, IdentifierInfo* II,
|
|
void EmitData(raw_ostream& Out, IdentifierInfo* II,
|
|
IdentID ID, unsigned) {
|
|
IdentID ID, unsigned) {
|
|
- using namespace llvm::support;
|
|
|
|
- endian::Writer<little> LE(Out);
|
|
|
|
MacroDirective *Macro = 0;
|
|
MacroDirective *Macro = 0;
|
|
if (!isInterestingIdentifier(II, Macro)) {
|
|
if (!isInterestingIdentifier(II, Macro)) {
|
|
- LE.write<uint32_t>(ID << 1);
|
|
|
|
|
|
+ clang::io::Emit32(Out, ID << 1);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- LE.write<uint32_t>((ID << 1) | 0x01);
|
|
|
|
|
|
+ clang::io::Emit32(Out, (ID << 1) | 0x01);
|
|
uint32_t Bits = (uint32_t)II->getObjCOrBuiltinID();
|
|
uint32_t Bits = (uint32_t)II->getObjCOrBuiltinID();
|
|
assert((Bits & 0xffff) == Bits && "ObjCOrBuiltinID too big for ASTReader.");
|
|
assert((Bits & 0xffff) == Bits && "ObjCOrBuiltinID too big for ASTReader.");
|
|
- LE.write<uint16_t>(Bits);
|
|
|
|
|
|
+ clang::io::Emit16(Out, Bits);
|
|
Bits = 0;
|
|
Bits = 0;
|
|
bool HadMacroDefinition = hadMacroDefinition(II, Macro);
|
|
bool HadMacroDefinition = hadMacroDefinition(II, Macro);
|
|
Bits = (Bits << 1) | unsigned(HadMacroDefinition);
|
|
Bits = (Bits << 1) | unsigned(HadMacroDefinition);
|
|
@@ -3155,10 +3131,10 @@ public:
|
|
Bits = (Bits << 1) | unsigned(II->isPoisoned());
|
|
Bits = (Bits << 1) | unsigned(II->isPoisoned());
|
|
Bits = (Bits << 1) | unsigned(II->hasRevertedTokenIDToIdentifier());
|
|
Bits = (Bits << 1) | unsigned(II->hasRevertedTokenIDToIdentifier());
|
|
Bits = (Bits << 1) | unsigned(II->isCPlusPlusOperatorKeyword());
|
|
Bits = (Bits << 1) | unsigned(II->isCPlusPlusOperatorKeyword());
|
|
- LE.write<uint16_t>(Bits);
|
|
|
|
|
|
+ clang::io::Emit16(Out, Bits);
|
|
|
|
|
|
if (HadMacroDefinition) {
|
|
if (HadMacroDefinition) {
|
|
- LE.write<uint32_t>(Writer.getMacroDirectivesOffset(II));
|
|
|
|
|
|
+ clang::io::Emit32(Out, Writer.getMacroDirectivesOffset(II));
|
|
if (IsModule) {
|
|
if (IsModule) {
|
|
// Write the IDs of macros coming from different submodules.
|
|
// Write the IDs of macros coming from different submodules.
|
|
SubmoduleID ModID;
|
|
SubmoduleID ModID;
|
|
@@ -3171,14 +3147,14 @@ public:
|
|
if (DefMacroDirective *DefMD = dyn_cast<DefMacroDirective>(MD)) {
|
|
if (DefMacroDirective *DefMD = dyn_cast<DefMacroDirective>(MD)) {
|
|
InfoID = Writer.getMacroID(DefMD->getInfo());
|
|
InfoID = Writer.getMacroID(DefMD->getInfo());
|
|
assert(InfoID);
|
|
assert(InfoID);
|
|
- LE.write<uint32_t>(InfoID << 1);
|
|
|
|
|
|
+ clang::io::Emit32(Out, InfoID << 1);
|
|
} else {
|
|
} else {
|
|
assert(isa<UndefMacroDirective>(MD));
|
|
assert(isa<UndefMacroDirective>(MD));
|
|
- LE.write<uint32_t>((ModID << 1) | 1);
|
|
|
|
|
|
+ clang::io::Emit32(Out, (ModID << 1) | 1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
emitMacroOverrides(Out, Overridden);
|
|
emitMacroOverrides(Out, Overridden);
|
|
- LE.write<uint32_t>(0);
|
|
|
|
|
|
+ clang::io::Emit32(Out, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -3193,7 +3169,7 @@ public:
|
|
for (SmallVectorImpl<Decl *>::reverse_iterator D = Decls.rbegin(),
|
|
for (SmallVectorImpl<Decl *>::reverse_iterator D = Decls.rbegin(),
|
|
DEnd = Decls.rend();
|
|
DEnd = Decls.rend();
|
|
D != DEnd; ++D)
|
|
D != DEnd; ++D)
|
|
- LE.write<uint32_t>(Writer.getDeclID(getMostRecentLocalDecl(*D)));
|
|
|
|
|
|
+ clang::io::Emit32(Out, Writer.getDeclID(getMostRecentLocalDecl(*D)));
|
|
}
|
|
}
|
|
|
|
|
|
/// \brief Returns the most recent local decl or the given decl if there are
|
|
/// \brief Returns the most recent local decl or the given decl if there are
|
|
@@ -3262,11 +3238,10 @@ void ASTWriter::WriteIdentifierTable(Preprocessor &PP,
|
|
SmallString<4096> IdentifierTable;
|
|
SmallString<4096> IdentifierTable;
|
|
uint32_t BucketOffset;
|
|
uint32_t BucketOffset;
|
|
{
|
|
{
|
|
- using namespace llvm::support;
|
|
|
|
ASTIdentifierTableTrait Trait(*this, PP, IdResolver, IsModule);
|
|
ASTIdentifierTableTrait Trait(*this, PP, IdResolver, IsModule);
|
|
llvm::raw_svector_ostream Out(IdentifierTable);
|
|
llvm::raw_svector_ostream Out(IdentifierTable);
|
|
// Make sure that no bucket is at offset 0
|
|
// Make sure that no bucket is at offset 0
|
|
- endian::Writer<little>(Out).write<uint32_t>(0);
|
|
|
|
|
|
+ clang::io::Emit32(Out, 0);
|
|
BucketOffset = Generator.Emit(Out, Trait);
|
|
BucketOffset = Generator.Emit(Out, Trait);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -3355,8 +3330,6 @@ public:
|
|
std::pair<unsigned,unsigned>
|
|
std::pair<unsigned,unsigned>
|
|
EmitKeyDataLength(raw_ostream& Out, DeclarationName Name,
|
|
EmitKeyDataLength(raw_ostream& Out, DeclarationName Name,
|
|
data_type_ref Lookup) {
|
|
data_type_ref Lookup) {
|
|
- using namespace llvm::support;
|
|
|
|
- endian::Writer<little> LE(Out);
|
|
|
|
unsigned KeyLen = 1;
|
|
unsigned KeyLen = 1;
|
|
switch (Name.getNameKind()) {
|
|
switch (Name.getNameKind()) {
|
|
case DeclarationName::Identifier:
|
|
case DeclarationName::Identifier:
|
|
@@ -3375,35 +3348,35 @@ public:
|
|
case DeclarationName::CXXUsingDirective:
|
|
case DeclarationName::CXXUsingDirective:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- LE.write<uint16_t>(KeyLen);
|
|
|
|
|
|
+ clang::io::Emit16(Out, KeyLen);
|
|
|
|
|
|
// 2 bytes for num of decls and 4 for each DeclID.
|
|
// 2 bytes for num of decls and 4 for each DeclID.
|
|
unsigned DataLen = 2 + 4 * Lookup.size();
|
|
unsigned DataLen = 2 + 4 * Lookup.size();
|
|
- LE.write<uint16_t>(DataLen);
|
|
|
|
|
|
+ clang::io::Emit16(Out, DataLen);
|
|
|
|
|
|
return std::make_pair(KeyLen, DataLen);
|
|
return std::make_pair(KeyLen, DataLen);
|
|
}
|
|
}
|
|
|
|
|
|
void EmitKey(raw_ostream& Out, DeclarationName Name, unsigned) {
|
|
void EmitKey(raw_ostream& Out, DeclarationName Name, unsigned) {
|
|
- using namespace llvm::support;
|
|
|
|
- endian::Writer<little> LE(Out);
|
|
|
|
- LE.write<uint8_t>(Name.getNameKind());
|
|
|
|
|
|
+ using namespace clang::io;
|
|
|
|
+
|
|
|
|
+ Emit8(Out, Name.getNameKind());
|
|
switch (Name.getNameKind()) {
|
|
switch (Name.getNameKind()) {
|
|
case DeclarationName::Identifier:
|
|
case DeclarationName::Identifier:
|
|
- LE.write<uint32_t>(Writer.getIdentifierRef(Name.getAsIdentifierInfo()));
|
|
|
|
|
|
+ Emit32(Out, Writer.getIdentifierRef(Name.getAsIdentifierInfo()));
|
|
return;
|
|
return;
|
|
case DeclarationName::ObjCZeroArgSelector:
|
|
case DeclarationName::ObjCZeroArgSelector:
|
|
case DeclarationName::ObjCOneArgSelector:
|
|
case DeclarationName::ObjCOneArgSelector:
|
|
case DeclarationName::ObjCMultiArgSelector:
|
|
case DeclarationName::ObjCMultiArgSelector:
|
|
- LE.write<uint32_t>(Writer.getSelectorRef(Name.getObjCSelector()));
|
|
|
|
|
|
+ Emit32(Out, Writer.getSelectorRef(Name.getObjCSelector()));
|
|
return;
|
|
return;
|
|
case DeclarationName::CXXOperatorName:
|
|
case DeclarationName::CXXOperatorName:
|
|
assert(Name.getCXXOverloadedOperator() < NUM_OVERLOADED_OPERATORS &&
|
|
assert(Name.getCXXOverloadedOperator() < NUM_OVERLOADED_OPERATORS &&
|
|
"Invalid operator?");
|
|
"Invalid operator?");
|
|
- LE.write<uint8_t>(Name.getCXXOverloadedOperator());
|
|
|
|
|
|
+ Emit8(Out, Name.getCXXOverloadedOperator());
|
|
return;
|
|
return;
|
|
case DeclarationName::CXXLiteralOperatorName:
|
|
case DeclarationName::CXXLiteralOperatorName:
|
|
- LE.write<uint32_t>(Writer.getIdentifierRef(Name.getCXXLiteralIdentifier()));
|
|
|
|
|
|
+ Emit32(Out, Writer.getIdentifierRef(Name.getCXXLiteralIdentifier()));
|
|
return;
|
|
return;
|
|
case DeclarationName::CXXConstructorName:
|
|
case DeclarationName::CXXConstructorName:
|
|
case DeclarationName::CXXDestructorName:
|
|
case DeclarationName::CXXDestructorName:
|
|
@@ -3417,13 +3390,11 @@ public:
|
|
|
|
|
|
void EmitData(raw_ostream& Out, key_type_ref,
|
|
void EmitData(raw_ostream& Out, key_type_ref,
|
|
data_type Lookup, unsigned DataLen) {
|
|
data_type Lookup, unsigned DataLen) {
|
|
- using namespace llvm::support;
|
|
|
|
- endian::Writer<little> LE(Out);
|
|
|
|
uint64_t Start = Out.tell(); (void)Start;
|
|
uint64_t Start = Out.tell(); (void)Start;
|
|
- LE.write<uint16_t>(Lookup.size());
|
|
|
|
|
|
+ clang::io::Emit16(Out, Lookup.size());
|
|
for (DeclContext::lookup_iterator I = Lookup.begin(), E = Lookup.end();
|
|
for (DeclContext::lookup_iterator I = Lookup.begin(), E = Lookup.end();
|
|
I != E; ++I)
|
|
I != E; ++I)
|
|
- LE.write<uint32_t>(Writer.GetDeclRef(*I));
|
|
|
|
|
|
+ clang::io::Emit32(Out, Writer.GetDeclRef(*I));
|
|
|
|
|
|
assert(Out.tell() - Start == DataLen && "Data length is wrong");
|
|
assert(Out.tell() - Start == DataLen && "Data length is wrong");
|
|
}
|
|
}
|
|
@@ -3516,8 +3487,7 @@ ASTWriter::GenerateNameLookupTable(const DeclContext *DC,
|
|
// Create the on-disk hash table in a buffer.
|
|
// Create the on-disk hash table in a buffer.
|
|
llvm::raw_svector_ostream Out(LookupTable);
|
|
llvm::raw_svector_ostream Out(LookupTable);
|
|
// Make sure that no bucket is at offset 0
|
|
// Make sure that no bucket is at offset 0
|
|
- using namespace llvm::support;
|
|
|
|
- endian::Writer<little>(Out).write<uint32_t>(0);
|
|
|
|
|
|
+ clang::io::Emit32(Out, 0);
|
|
return Generator.Emit(Out, Trait);
|
|
return Generator.Emit(Out, Trait);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -4217,19 +4187,17 @@ void ASTWriter::WriteASTCore(Sema &SemaRef,
|
|
for (ModuleManager::ModuleConstIterator M = Chain->ModuleMgr.begin(),
|
|
for (ModuleManager::ModuleConstIterator M = Chain->ModuleMgr.begin(),
|
|
MEnd = Chain->ModuleMgr.end();
|
|
MEnd = Chain->ModuleMgr.end();
|
|
M != MEnd; ++M) {
|
|
M != MEnd; ++M) {
|
|
- using namespace llvm::support;
|
|
|
|
- endian::Writer<little> LE(Out);
|
|
|
|
StringRef FileName = (*M)->FileName;
|
|
StringRef FileName = (*M)->FileName;
|
|
- LE.write<uint16_t>(FileName.size());
|
|
|
|
|
|
+ io::Emit16(Out, FileName.size());
|
|
Out.write(FileName.data(), FileName.size());
|
|
Out.write(FileName.data(), FileName.size());
|
|
- LE.write<uint32_t>((*M)->SLocEntryBaseOffset);
|
|
|
|
- LE.write<uint32_t>((*M)->BaseIdentifierID);
|
|
|
|
- LE.write<uint32_t>((*M)->BaseMacroID);
|
|
|
|
- LE.write<uint32_t>((*M)->BasePreprocessedEntityID);
|
|
|
|
- LE.write<uint32_t>((*M)->BaseSubmoduleID);
|
|
|
|
- LE.write<uint32_t>((*M)->BaseSelectorID);
|
|
|
|
- LE.write<uint32_t>((*M)->BaseDeclID);
|
|
|
|
- LE.write<uint32_t>((*M)->BaseTypeIndex);
|
|
|
|
|
|
+ io::Emit32(Out, (*M)->SLocEntryBaseOffset);
|
|
|
|
+ io::Emit32(Out, (*M)->BaseIdentifierID);
|
|
|
|
+ io::Emit32(Out, (*M)->BaseMacroID);
|
|
|
|
+ io::Emit32(Out, (*M)->BasePreprocessedEntityID);
|
|
|
|
+ io::Emit32(Out, (*M)->BaseSubmoduleID);
|
|
|
|
+ io::Emit32(Out, (*M)->BaseSelectorID);
|
|
|
|
+ io::Emit32(Out, (*M)->BaseDeclID);
|
|
|
|
+ io::Emit32(Out, (*M)->BaseTypeIndex);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Record.clear();
|
|
Record.clear();
|