forked from OSchip/llvm-project
A bit of refactoring; Introduce ASTWriter::GetOrCreateTypeIdx and move the emission of types there.
No functionality change. llvm-svn: 111632
This commit is contained in:
parent
a7fbbb0546
commit
e394f2ca8b
|
@ -364,6 +364,12 @@ public:
|
|||
/// \brief Emit a reference to a type.
|
||||
void AddTypeRef(QualType T, RecordData &Record);
|
||||
|
||||
/// \brief Force a type to be emitted and get its index.
|
||||
serialization::TypeIdx GetOrCreateTypeIdx(QualType T);
|
||||
|
||||
/// \brief Determine the type index of an already-emitted type.
|
||||
serialization::TypeIdx getTypeIdx(QualType T);
|
||||
|
||||
/// \brief Emits a reference to a declarator info.
|
||||
void AddTypeSourceInfo(TypeSourceInfo *TInfo, RecordData &Record);
|
||||
|
||||
|
|
|
@ -2588,14 +2588,7 @@ void ASTWriter::AddTypeRef(QualType T, RecordData &Record) {
|
|||
T.removeFastQualifiers();
|
||||
|
||||
if (T.hasLocalNonFastQualifiers()) {
|
||||
TypeIdx &Idx = TypeIdxs[T];
|
||||
if (Idx.getIndex() == 0) {
|
||||
// We haven't seen these qualifiers applied to this type before.
|
||||
// Assign it a new ID. This is the only time we enqueue a
|
||||
// qualified type, and it has no CV qualifiers.
|
||||
Idx = TypeIdx(NextTypeID++);
|
||||
DeclTypesToEmit.push(T);
|
||||
}
|
||||
TypeIdx Idx = GetOrCreateTypeIdx(T);
|
||||
|
||||
// Encode the type qualifiers in the type reference.
|
||||
Record.push_back(Idx.asTypeID(FastQuals));
|
||||
|
@ -2644,6 +2637,17 @@ void ASTWriter::AddTypeRef(QualType T, RecordData &Record) {
|
|||
return;
|
||||
}
|
||||
|
||||
TypeIdx Idx = GetOrCreateTypeIdx(T);
|
||||
|
||||
// Encode the type qualifiers in the type reference.
|
||||
Record.push_back(Idx.asTypeID(FastQuals));
|
||||
}
|
||||
|
||||
TypeIdx ASTWriter::GetOrCreateTypeIdx(QualType T) {
|
||||
if (T.isNull())
|
||||
return TypeIdx();
|
||||
assert(!T.getLocalFastQualifiers());
|
||||
|
||||
TypeIdx &Idx = TypeIdxs[T];
|
||||
if (Idx.getIndex() == 0) {
|
||||
// We haven't seen this type before. Assign it a new ID and put it
|
||||
|
@ -2651,9 +2655,16 @@ void ASTWriter::AddTypeRef(QualType T, RecordData &Record) {
|
|||
Idx = TypeIdx(NextTypeID++);
|
||||
DeclTypesToEmit.push(T);
|
||||
}
|
||||
return Idx;
|
||||
}
|
||||
|
||||
// Encode the type qualifiers in the type reference.
|
||||
Record.push_back(Idx.asTypeID(FastQuals));
|
||||
TypeIdx ASTWriter::getTypeIdx(QualType T) {
|
||||
if (T.isNull())
|
||||
return TypeIdx();
|
||||
assert(!T.getLocalFastQualifiers());
|
||||
|
||||
assert(TypeIdxs.find(T) != TypeIdxs.end() && "Type not emitted!");
|
||||
return TypeIdxs[T];
|
||||
}
|
||||
|
||||
void ASTWriter::AddDeclRef(const Decl *D, RecordData &Record) {
|
||||
|
|
Loading…
Reference in New Issue