Store type together with pointers to allow safe substitution
This commit is contained in:
parent
6b7065899d
commit
e85ec240bf
5 changed files with 208 additions and 166 deletions
|
|
@ -196,15 +196,15 @@ void PType::SetDefaultValue(void *base, unsigned offset, TArray<FTypeAndOffset>
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void PType::SetPointer(void *base, unsigned offset, TArray<size_t> *stroffs)
|
||||
void PType::SetPointer(void *base, unsigned offset, TArray<std::pair<size_t, PObjectPointer *>> *stroffs)
|
||||
{
|
||||
}
|
||||
|
||||
void PType::SetPointerArray(void *base, unsigned offset, TArray<size_t> *stroffs)
|
||||
void PType::SetPointerArray(void *base, unsigned offset, TArray<std::pair<size_t, PDynArray *>> *stroffs)
|
||||
{
|
||||
}
|
||||
|
||||
void PType::SetPointerMap(void *base, unsigned offset, TArray<std::pair<size_t,PType *>> *ptrofs)
|
||||
void PType::SetPointerMap(void *base, unsigned offset, TArray<std::pair<size_t, PMap *>> *ptrofs)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -1575,10 +1575,10 @@ PObjectPointer::PObjectPointer(PClass *cls, bool isconst)
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void PObjectPointer::SetPointer(void *base, unsigned offset, TArray<size_t> *special)
|
||||
void PObjectPointer::SetPointer(void *base, unsigned offset, TArray<std::pair<size_t, PObjectPointer *>> *special)
|
||||
{
|
||||
// Add to the list of pointers for this class.
|
||||
special->Push(offset);
|
||||
special->Push({offset, this});
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
|
@ -1706,7 +1706,7 @@ bool PClassPointer::isCompatible(PType *type)
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void PClassPointer::SetPointer(void *base, unsigned offset, TArray<size_t> *special)
|
||||
void PClassPointer::SetPointer(void *base, unsigned offset, TArray<std::pair<size_t, PObjectPointer *>> *special)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -1908,7 +1908,7 @@ void PArray::SetDefaultValue(void *base, unsigned offset, TArray<FTypeAndOffset>
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void PArray::SetPointer(void *base, unsigned offset, TArray<size_t> *special)
|
||||
void PArray::SetPointer(void *base, unsigned offset, TArray<std::pair<size_t, PObjectPointer *>> *special)
|
||||
{
|
||||
for (unsigned i = 0; i < ElementCount; ++i)
|
||||
{
|
||||
|
|
@ -1922,7 +1922,7 @@ void PArray::SetPointer(void *base, unsigned offset, TArray<size_t> *special)
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void PArray::SetPointerArray(void *base, unsigned offset, TArray<size_t> *special)
|
||||
void PArray::SetPointerArray(void *base, unsigned offset, TArray<std::pair<size_t, PDynArray *>> *special)
|
||||
{
|
||||
if (ElementType->isStruct() || ElementType->isDynArray())
|
||||
{
|
||||
|
|
@ -1939,7 +1939,7 @@ void PArray::SetPointerArray(void *base, unsigned offset, TArray<size_t> *specia
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void PArray::SetPointerMap(void *base, unsigned offset, TArray<std::pair<size_t,PType *>> *special)
|
||||
void PArray::SetPointerMap(void *base, unsigned offset, TArray<std::pair<size_t, PMap *>> *special)
|
||||
{
|
||||
if(ElementType->isStruct() || ElementType->isMap())
|
||||
{
|
||||
|
|
@ -2254,12 +2254,12 @@ void PDynArray::SetDefaultValue(void *base, unsigned offset, TArray<FTypeAndOffs
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void PDynArray::SetPointerArray(void *base, unsigned offset, TArray<size_t> *special)
|
||||
void PDynArray::SetPointerArray(void *base, unsigned offset, TArray<std::pair<size_t, PDynArray *>> *special)
|
||||
{
|
||||
if (ElementType->isObjectPointer())
|
||||
{
|
||||
// Add to the list of pointer arrays for this class.
|
||||
special->Push(offset);
|
||||
special->Push({offset, this});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2524,12 +2524,12 @@ void PMap::SetDefaultValue(void *base, unsigned offset, TArray<FTypeAndOffset> *
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void PMap::SetPointerMap(void *base, unsigned offset, TArray<std::pair<size_t,PType *>> *special)
|
||||
void PMap::SetPointerMap(void *base, unsigned offset, TArray<std::pair<size_t, PMap *>> *special)
|
||||
{
|
||||
if (ValueType->isObjectPointer())
|
||||
{
|
||||
// Add to the list of pointer arrays for this class.
|
||||
special->Push(std::make_pair(offset,KeyType));
|
||||
special->Push(std::make_pair(offset, this));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3264,7 +3264,7 @@ void PStruct::SetDefaultValue(void *base, unsigned offset, TArray<FTypeAndOffset
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void PStruct::SetPointer(void *base, unsigned offset, TArray<size_t> *special)
|
||||
void PStruct::SetPointer(void *base, unsigned offset, TArray<std::pair<size_t, PObjectPointer *>> *special)
|
||||
{
|
||||
auto it = Symbols.GetIterator();
|
||||
PSymbolTable::MapType::Pair *pair;
|
||||
|
|
@ -3284,7 +3284,7 @@ void PStruct::SetPointer(void *base, unsigned offset, TArray<size_t> *special)
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void PStruct::SetPointerArray(void *base, unsigned offset, TArray<size_t> *special)
|
||||
void PStruct::SetPointerArray(void *base, unsigned offset, TArray<std::pair<size_t, PDynArray *>> *special)
|
||||
{
|
||||
auto it = Symbols.GetIterator();
|
||||
PSymbolTable::MapType::Pair *pair;
|
||||
|
|
@ -3304,7 +3304,7 @@ void PStruct::SetPointerArray(void *base, unsigned offset, TArray<size_t> *speci
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void PStruct::SetPointerMap(void *base, unsigned offset, TArray<std::pair<size_t,PType *>> *special)
|
||||
void PStruct::SetPointerMap(void *base, unsigned offset, TArray<std::pair<size_t, PMap *>> *special)
|
||||
{
|
||||
auto it = Symbols.GetIterator();
|
||||
PSymbolTable::MapType::Pair *pair;
|
||||
|
|
|
|||
|
|
@ -68,8 +68,11 @@ class PPointer;
|
|||
class PClassPointer;
|
||||
class PFunctionPointer;
|
||||
class PArray;
|
||||
class PDynArray;
|
||||
class PMap;
|
||||
class PStruct;
|
||||
class PClassType;
|
||||
class PObjectPointer;
|
||||
|
||||
struct ZCC_ExprConstant;
|
||||
class PType : public PTypeBase
|
||||
|
|
@ -129,9 +132,9 @@ public:
|
|||
// initialization when the object is created and destruction when the
|
||||
// object is destroyed.
|
||||
virtual void SetDefaultValue(void *base, unsigned offset, TArray<FTypeAndOffset> *special=NULL);
|
||||
virtual void SetPointer(void *base, unsigned offset, TArray<size_t> *ptrofs = NULL);
|
||||
virtual void SetPointerArray(void *base, unsigned offset, TArray<size_t> *ptrofs = NULL);
|
||||
virtual void SetPointerMap(void *base, unsigned offset, TArray<std::pair<size_t,PType *>> *ptrofs = NULL);
|
||||
virtual void SetPointer(void *base, unsigned offset, TArray<std::pair<size_t, PObjectPointer *>> *ptrofs = NULL);
|
||||
virtual void SetPointerArray(void *base, unsigned offset, TArray<std::pair<size_t, PDynArray *>> *ptrofs = NULL);
|
||||
virtual void SetPointerMap(void *base, unsigned offset, TArray<std::pair<size_t, PMap *>> *ptrofs = NULL);
|
||||
|
||||
// Initialize the value, if needed (e.g. strings)
|
||||
virtual void InitializeValue(void *addr, const void *def) const;
|
||||
|
|
@ -455,7 +458,7 @@ public:
|
|||
|
||||
void WriteValue(FSerializer &ar, const char *key, const void *addr) const override;
|
||||
bool ReadValue(FSerializer &ar, const char *key, void *addr) const override;
|
||||
void SetPointer(void *base, unsigned offset, TArray<size_t> *special = NULL) override;
|
||||
void SetPointer(void *base, unsigned offset, TArray<std::pair<size_t, PObjectPointer *>> *special = NULL) override;
|
||||
PClass *PointedClass() const;
|
||||
};
|
||||
|
||||
|
|
@ -471,7 +474,7 @@ public:
|
|||
void WriteValue(FSerializer &ar, const char *key, const void *addr) const override;
|
||||
bool ReadValue(FSerializer &ar, const char *key, void *addr) const override;
|
||||
|
||||
void SetPointer(void *base, unsigned offset, TArray<size_t> *special = NULL) override;
|
||||
void SetPointer(void *base, unsigned offset, TArray<std::pair<size_t, PObjectPointer *>> *special = NULL) override;
|
||||
bool IsMatch(intptr_t id1, intptr_t id2) const override;
|
||||
void GetTypeIDs(intptr_t &id1, intptr_t &id2) const override;
|
||||
};
|
||||
|
|
@ -503,9 +506,9 @@ public:
|
|||
bool ReadValue(FSerializer &ar, const char *key,void *addr) const override;
|
||||
|
||||
void SetDefaultValue(void *base, unsigned offset, TArray<FTypeAndOffset> *special) override;
|
||||
void SetPointer(void *base, unsigned offset, TArray<size_t> *special) override;
|
||||
void SetPointerArray(void *base, unsigned offset, TArray<size_t> *ptrofs = NULL) override;
|
||||
void SetPointerMap(void *base, unsigned offset, TArray<std::pair<size_t,PType *>> *ptrofs = NULL) override;
|
||||
void SetPointer(void *base, unsigned offset, TArray<std::pair<size_t, PObjectPointer *>> *special) override;
|
||||
void SetPointerArray(void *base, unsigned offset, TArray<std::pair<size_t, PDynArray *>> *ptrofs = NULL) override;
|
||||
void SetPointerMap(void *base, unsigned offset, TArray<std::pair<size_t, PMap *>> *ptrofs = NULL) override;
|
||||
};
|
||||
|
||||
class PStaticArray : public PArray
|
||||
|
|
@ -535,7 +538,7 @@ public:
|
|||
void SetDefaultValue(void *base, unsigned offset, TArray<FTypeAndOffset> *specials) override;
|
||||
void InitializeValue(void *addr, const void *def) const override;
|
||||
void DestroyValue(void *addr) const override;
|
||||
void SetPointerArray(void *base, unsigned offset, TArray<size_t> *ptrofs = NULL) override;
|
||||
void SetPointerArray(void *base, unsigned offset, TArray<std::pair<size_t, PDynArray *>> *ptrofs = NULL) override;
|
||||
};
|
||||
|
||||
class PMap : public PCompoundType
|
||||
|
|
@ -579,7 +582,7 @@ public:
|
|||
void SetDefaultValue(void *base, unsigned offset, TArray<FTypeAndOffset> *specials) override;
|
||||
void InitializeValue(void *addr, const void *def) const override;
|
||||
void DestroyValue(void *addr) const override;
|
||||
void SetPointerMap(void *base, unsigned offset, TArray<std::pair<size_t,PType *>> *ptrofs) override;
|
||||
void SetPointerMap(void *base, unsigned offset, TArray<std::pair<size_t, PMap *>> *ptrofs) override;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -653,9 +656,9 @@ public:
|
|||
void WriteValue(FSerializer &ar, const char *key,const void *addr) const override;
|
||||
bool ReadValue(FSerializer &ar, const char *key,void *addr) const override;
|
||||
void SetDefaultValue(void *base, unsigned offset, TArray<FTypeAndOffset> *specials) override;
|
||||
void SetPointer(void *base, unsigned offset, TArray<size_t> *specials) override;
|
||||
void SetPointerArray(void *base, unsigned offset, TArray<size_t> *special) override;
|
||||
void SetPointerMap(void *base, unsigned offset, TArray<std::pair<size_t,PType *>> *ptrofs) override;
|
||||
void SetPointer(void *base, unsigned offset, TArray<std::pair<size_t, PObjectPointer *>> *specials) override;
|
||||
void SetPointerArray(void *base, unsigned offset, TArray<std::pair<size_t, PDynArray *>> *special) override;
|
||||
void SetPointerMap(void *base, unsigned offset, TArray<std::pair<size_t, PMap *>> *ptrofs) override;
|
||||
};
|
||||
|
||||
class PPrototype : public PCompoundType
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue