- fixed: Meta properties must not be serialized.

This commit is contained in:
Christoph Oelckers 2017-03-01 20:09:50 +01:00
parent 0583691670
commit b5d4a59465

View file

@ -2307,7 +2307,7 @@ void PStruct::WriteFields(FSerializer &ar, const void *addr, const TArray<PField
{ {
const PField *field = fields[i]; const PField *field = fields[i];
// Skip fields without or with native serialization // Skip fields without or with native serialization
if (!(field->Flags & VARF_Transient)) if (!(field->Flags & (VARF_Transient|VARF_Meta)))
{ {
field->Type->WriteValue(ar, field->SymbolName.GetChars(), (const BYTE *)addr + field->Offset); field->Type->WriteValue(ar, field->SymbolName.GetChars(), (const BYTE *)addr + field->Offset);
} }
@ -2340,6 +2340,11 @@ bool PStruct::ReadFields(FSerializer &ar, void *addr) const
DPrintf(DMSG_ERROR, "Symbol %s in %s is not a field\n", DPrintf(DMSG_ERROR, "Symbol %s in %s is not a field\n",
label, TypeName.GetChars()); label, TypeName.GetChars());
} }
else if ((static_cast<const PField *>(sym)->Flags & (VARF_Transient | VARF_Meta)))
{
DPrintf(DMSG_ERROR, "Symbol %s in %s is not a serializable field\n",
label, TypeName.GetChars());
}
else else
{ {
readsomething |= static_cast<const PField *>(sym)->Type->ReadValue(ar, nullptr, readsomething |= static_cast<const PField *>(sym)->Type->ReadValue(ar, nullptr,
@ -2638,7 +2643,7 @@ static void RecurseWriteFields(const PClass *type, FSerializer &ar, const void *
// Don't write this part if it has no non-transient variables // Don't write this part if it has no non-transient variables
for (unsigned i = 0; i < type->Fields.Size(); ++i) for (unsigned i = 0; i < type->Fields.Size(); ++i)
{ {
if (!(type->Fields[i]->Flags & VARF_Transient)) if (!(type->Fields[i]->Flags & (VARF_Transient|VARF_Meta)))
{ {
// Tag this section with the class it came from in case // Tag this section with the class it came from in case
// a more-derived class has variables that shadow a less- // a more-derived class has variables that shadow a less-