From 806d9d7a953cb8d935656cd41c63e1cb75abcd2f Mon Sep 17 00:00:00 2001 From: Randy Heit Date: Sun, 3 Apr 2016 16:18:59 -0500 Subject: [PATCH] Add an AddField() override to PClass that extends the default instance --- src/dobjtype.cpp | 18 ++++++++++++++++++ src/dobjtype.h | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/dobjtype.cpp b/src/dobjtype.cpp index 552b8ee685..028b9e82b1 100644 --- a/src/dobjtype.cpp +++ b/src/dobjtype.cpp @@ -2501,6 +2501,24 @@ unsigned int PClass::Extend(unsigned int extension, unsigned int alignment) return padto; } +//========================================================================== +// +// PClass :: AddField +// +//========================================================================== + +PField *PClass::AddField(FName name, PType *type, DWORD flags) +{ + unsigned oldsize = Size; + PField *field = Super::AddField(name, type, flags); + if (field != NULL) + { + Defaults = (BYTE *)M_Realloc(Defaults, Size); + memset(Defaults + oldsize, 0, Size - oldsize); + } + return field; +} + //========================================================================== // // PClass :: FindClassTentative diff --git a/src/dobjtype.h b/src/dobjtype.h index e9ff982454..a1fcd13e55 100644 --- a/src/dobjtype.h +++ b/src/dobjtype.h @@ -585,7 +585,7 @@ public: TArray Fields; - PField *AddField(FName name, PType *type, DWORD flags=0); + virtual PField *AddField(FName name, PType *type, DWORD flags=0); size_t PropagateMark(); protected: @@ -672,6 +672,7 @@ public: PClass *CreateDerivedClass(FName name, unsigned int size); unsigned int Extend(unsigned int extension, unsigned int alignment); unsigned int Extend(const PType *type) { return Extend(type->Size, type->Align); } + PField *AddField(FName name, PType *type, DWORD flags=0) override; void InitializeActorInfo(); void BuildFlatPointers(); const PClass *NativeClass() const;