- backend update from Raze.
* add QualifiedName to VMFunction and allocate these static names from the class data memory arena instead of using FStrings. * null pointer type checks in the VM added to avoid crash on bad codegen.
This commit is contained in:
parent
f9a86c595c
commit
81fb9a26b2
25 changed files with 78 additions and 44 deletions
|
|
@ -55,6 +55,7 @@
|
|||
#include "textures.h"
|
||||
#include "texturemanager.h"
|
||||
#include "base64.h"
|
||||
#include "vm.h"
|
||||
|
||||
extern DObject *WP_NOCHANGE;
|
||||
bool save_full = false; // for testing. Should be removed afterward.
|
||||
|
|
@ -1565,6 +1566,35 @@ template<> FSerializer &Serialize(FSerializer &arc, const char *key, Dictionary
|
|||
}
|
||||
}
|
||||
|
||||
template<> FSerializer& Serialize(FSerializer& arc, const char* key, VMFunction*& func, VMFunction**)
|
||||
{
|
||||
if (arc.isWriting())
|
||||
{
|
||||
arc.WriteKey(key);
|
||||
if (func) arc.w->String(func->QualifiedName);
|
||||
else arc.w->Null();
|
||||
}
|
||||
else
|
||||
{
|
||||
func = nullptr;
|
||||
|
||||
auto val = arc.r->FindKey(key);
|
||||
if (val != nullptr && val->IsString())
|
||||
{
|
||||
auto qname = val->GetString();
|
||||
size_t p = strcspn(qname, ".");
|
||||
if (p != 0)
|
||||
{
|
||||
FName clsname(qname, p, true);
|
||||
FName funcname(qname + p + 1, true);
|
||||
func = PClass::FindFunction(clsname, funcname);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return arc;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// Handler to retrieve a numeric value of any kind.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue