зеркало из https://github.com/microsoft/clang-1.git
More work on type serialization: added support for serializing BuiltinTypes.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43414 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
4d733d3288
Коммит
a4cb4525cf
|
@ -27,6 +27,16 @@ void QualType::Read(llvm::Deserializer& D) {
|
||||||
ThePtr |= D.ReadInt();
|
ThePtr |= D.ReadInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QualType::EmitOwned(llvm::Serializer& S) const {
|
||||||
|
S.EmitInt(getQualifiers());
|
||||||
|
S.EmitOwnedPtr(cast<BuiltinType>(getTypePtr()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void QualType::ReadOwned(llvm::Deserializer& D) {
|
||||||
|
ThePtr = D.ReadInt();
|
||||||
|
ThePtr |= reinterpret_cast<uintptr_t>(D.ReadOwnedPtr<BuiltinType>());
|
||||||
|
}
|
||||||
|
|
||||||
/* FIXME: Either remove this method or complete it.
|
/* FIXME: Either remove this method or complete it.
|
||||||
|
|
||||||
void Type::Emit(llvm::Serializer& S) {
|
void Type::Emit(llvm::Serializer& S) {
|
||||||
|
@ -50,6 +60,18 @@ void Type::ReadTypeInternal(llvm::Deserializer& D) {
|
||||||
D.Read(CanonicalType);
|
D.Read(CanonicalType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BuiltinType::Emit(llvm::Serializer& S) const {
|
||||||
|
S.EmitInt(TypeKind);
|
||||||
|
}
|
||||||
|
|
||||||
|
BuiltinType* BuiltinType::Materialize(llvm::Deserializer& D) {
|
||||||
|
Kind k = static_cast<Kind>(D.ReadInt());
|
||||||
|
BuiltinType* T = new BuiltinType(k);
|
||||||
|
return T;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void ComplexType::Emit(llvm::Serializer& S) const {
|
void ComplexType::Emit(llvm::Serializer& S) const {
|
||||||
EmitTypeInternal(S);
|
EmitTypeInternal(S);
|
||||||
S.Emit(ElementType);
|
S.Emit(ElementType);
|
||||||
|
@ -106,7 +128,7 @@ void ConstantArrayType::Emit(llvm::Serializer& S) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
ConstantArrayType* ConstantArrayType::Materialize(llvm::Deserializer& D) {
|
ConstantArrayType* ConstantArrayType::Materialize(llvm::Deserializer& D) {
|
||||||
// "Default" construct the array.
|
// "Default" construct the array type.
|
||||||
ConstantArrayType* T =
|
ConstantArrayType* T =
|
||||||
new ConstantArrayType(QualType(), QualType(), llvm::APInt(),
|
new ConstantArrayType(QualType(), QualType(), llvm::APInt(),
|
||||||
ArrayType::Normal, 0);
|
ArrayType::Normal, 0);
|
||||||
|
|
|
@ -165,6 +165,12 @@ public:
|
||||||
/// exists, in place, within its containing object.
|
/// exists, in place, within its containing object.
|
||||||
void Read(llvm::Deserializer& D);
|
void Read(llvm::Deserializer& D);
|
||||||
|
|
||||||
|
/// EmitOwned - Serialize a QualType that owns the underlying Type*.
|
||||||
|
void EmitOwned(llvm::Serializer& S) const;
|
||||||
|
|
||||||
|
/// ReadOwned - Deserialize a QualType that owns the underlying Thpe*.
|
||||||
|
void ReadOwned(llvm::Deserializer& S);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -378,6 +384,7 @@ public:
|
||||||
static bool classof(const BuiltinType *) { return true; }
|
static bool classof(const BuiltinType *) { return true; }
|
||||||
|
|
||||||
void Emit(llvm::Serializer& S) const;
|
void Emit(llvm::Serializer& S) const;
|
||||||
|
static BuiltinType* Materialize(llvm::Deserializer& D);
|
||||||
};
|
};
|
||||||
|
|
||||||
/// ComplexType - C99 6.2.5p11 - Complex values. This supports the C99 complex
|
/// ComplexType - C99 6.2.5p11 - Complex values. This supports the C99 complex
|
||||||
|
@ -575,6 +582,9 @@ public:
|
||||||
return T->getTypeClass() == VariableArray;
|
return T->getTypeClass() == VariableArray;
|
||||||
}
|
}
|
||||||
static bool classof(const VariableArrayType *) { return true; }
|
static bool classof(const VariableArrayType *) { return true; }
|
||||||
|
|
||||||
|
// FIXME: Who owns VariableArrayType's? What are the semantics
|
||||||
|
// for serialization.
|
||||||
};
|
};
|
||||||
|
|
||||||
/// VectorType - GCC generic vector type. This type is created using
|
/// VectorType - GCC generic vector type. This type is created using
|
||||||
|
|
Загрузка…
Ссылка в новой задаче