Implemented serialization of FunctionTypeProto.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43419 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Ted Kremenek 2007-10-28 00:59:26 +00:00
Родитель e81e24c84b
Коммит 4340bfa9f4
2 изменённых файлов: 39 добавлений и 0 удалений

Просмотреть файл

@ -172,3 +172,34 @@ FunctionTypeNoProto* FunctionTypeNoProto::Materialize(llvm::Deserializer& D) {
T->ReadFunctionTypeInternal(D);
return T;
}
void FunctionTypeProto::Emit(llvm::Serializer& S) const {
S.EmitInt(NumArgs);
EmitFunctionTypeInternal(S);
for (arg_type_iterator i = arg_type_begin(), e = arg_type_end(); i!=e; ++i)
S.Emit(*i);
}
FunctionTypeProto* FunctionTypeProto::Materialize(llvm::Deserializer& D) {
unsigned NumArgs = D.ReadInt();
FunctionTypeProto *FTP =
(FunctionTypeProto*)malloc(sizeof(FunctionTypeProto) +
NumArgs*sizeof(QualType));
// Default construct. Internal fields will be populated using
// deserialization.
new (FTP) FunctionTypeProto();
FTP->NumArgs = NumArgs;
FTP->ReadFunctionTypeInternal(D);
// Fill in the trailing argument array.
QualType *ArgInfo = reinterpret_cast<QualType *>(FTP+1);;
for (unsigned i = 0; i != NumArgs; ++i)
D.Read(ArgInfo[i]);
return FTP;
}

Просмотреть файл

@ -790,6 +790,14 @@ public:
static void Profile(llvm::FoldingSetNodeID &ID, QualType Result,
arg_type_iterator ArgTys, unsigned NumArgs,
bool isVariadic);
void Emit(llvm::Serializer& S) const;
static FunctionTypeProto* Materialize(llvm::Deserializer& D);
protected:
// Used by deserialization.
FunctionTypeProto()
: FunctionType(FunctionProto, QualType(), false, QualType()) {}
};