From ff3baac8a78dd8545c2c21877c33a4da2b3ba802 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 21 Nov 2016 19:36:14 +0100 Subject: [PATCH] - made PStatePointer a real pointer pointing to a native struct named 'state', because that's what it really is and what it needs to be if we want to use a state as more than an opaque identifier in the VM --- src/dobjtype.cpp | 86 +++++++++++++++++++++++------------------------- src/dobjtype.h | 21 ++++++------ 2 files changed, 53 insertions(+), 54 deletions(-) diff --git a/src/dobjtype.cpp b/src/dobjtype.cpp index 09a3b1c940..2f536c3007 100644 --- a/src/dobjtype.cpp +++ b/src/dobjtype.cpp @@ -1547,50 +1547,6 @@ PStateLabel::PStateLabel() mDescriptiveName = "StateLabel"; } -/* PStatePointer **********************************************************/ - -IMPLEMENT_CLASS(PStatePointer, false, false, false, false) - -//========================================================================== -// -// PStatePointer Default Constructor -// -//========================================================================== - -PStatePointer::PStatePointer() -: PBasicType(sizeof(FState *), alignof(FState *)) -{ - mDescriptiveName = "State"; - storeOp = OP_SP; - loadOp = OP_LP; - moveOp = OP_MOVEA; - RegType = REGT_POINTER; -} - -//========================================================================== -// -// PStatePointer :: WriteValue -// -//========================================================================== - -void PStatePointer::WriteValue(FSerializer &ar, const char *key,const void *addr) const -{ - ar(key, *(FState **)addr); -} - -//========================================================================== -// -// PStatePointer :: ReadValue -// -//========================================================================== - -bool PStatePointer::ReadValue(FSerializer &ar, const char *key, void *addr) const -{ - bool res = false; - ::Serialize(ar, key, *(FState **)addr, nullptr, &res); - return res; -} - /* PPointer ***************************************************************/ IMPLEMENT_CLASS(PPointer, false, true, false, false) @@ -1736,6 +1692,48 @@ PPointer *NewPointer(PType *type, bool isconst) return static_cast(ptype); } +/* PStatePointer **********************************************************/ + +IMPLEMENT_CLASS(PStatePointer, false, false, false, false) + +//========================================================================== +// +// PStatePointer Default Constructor +// +//========================================================================== + +PStatePointer::PStatePointer() +{ + mDescriptiveName = "Pointer"; + PointedType = NewNativeStruct(NAME_State, nullptr); + IsConst = true; +} + +//========================================================================== +// +// PStatePointer :: WriteValue +// +//========================================================================== + +void PStatePointer::WriteValue(FSerializer &ar, const char *key, const void *addr) const +{ + ar(key, *(FState **)addr); +} + +//========================================================================== +// +// PStatePointer :: ReadValue +// +//========================================================================== + +bool PStatePointer::ReadValue(FSerializer &ar, const char *key, void *addr) const +{ + bool res = false; + ::Serialize(ar, key, *(FState **)addr, nullptr, &res); + return res; +} + + /* PClassPointer **********************************************************/ diff --git a/src/dobjtype.h b/src/dobjtype.h index 6134bbf903..f464e36f87 100644 --- a/src/dobjtype.h +++ b/src/dobjtype.h @@ -551,16 +551,6 @@ public: // Pointers ----------------------------------------------------------------- -class PStatePointer : public PBasicType -{ - DECLARE_CLASS(PStatePointer, PBasicType); -public: - PStatePointer(); - - void WriteValue(FSerializer &ar, const char *key,const void *addr) const override; - bool ReadValue(FSerializer &ar, const char *key,void *addr) const override; -}; - class PPointer : public PBasicType { DECLARE_CLASS(PPointer, PBasicType); @@ -583,6 +573,17 @@ protected: void SetOps(); }; +class PStatePointer : public PPointer +{ + DECLARE_CLASS(PStatePointer, PPointer); +public: + PStatePointer(); + + void WriteValue(FSerializer &ar, const char *key, const void *addr) const override; + bool ReadValue(FSerializer &ar, const char *key, void *addr) const override; +}; + + class PClassPointer : public PPointer { DECLARE_CLASS(PClassPointer, PPointer);