Better error handling for extern functions that retrieve userdata
This commit is contained in:
parent
bae3e92577
commit
0266b3c616
|
@ -12,27 +12,47 @@ namespace Porygon::UserData {
|
|||
|
||||
void RegisterUserDataField(uint32_t typeId, uint32_t fieldId, UserDataField *field) {
|
||||
auto ud = UserDataStorage::GetUserDataType(typeId);
|
||||
ud->Get()->CreateField(fieldId, field);
|
||||
auto get = ud->Get();
|
||||
if (get == nullptr){
|
||||
throw Exception("Userdata was not found.");
|
||||
}
|
||||
get->CreateField(fieldId, field);
|
||||
}
|
||||
|
||||
int32_t GetUserDataFieldCount(uint32_t typeId) {
|
||||
auto ud = UserDataStorage::GetUserDataType(typeId);
|
||||
return ud->Get()->GetFieldCount();
|
||||
auto get = ud->Get();
|
||||
if (get == nullptr){
|
||||
throw Exception("Userdata was not found.");
|
||||
}
|
||||
return get->GetFieldCount();
|
||||
}
|
||||
|
||||
void SetIsCastableFunc(uint32_t typeId, bool (*cast)(const ScriptType*, bool)){
|
||||
auto ud = UserDataStorage::GetUserDataType(typeId);
|
||||
ud->Get()->SetIsCastable(cast);
|
||||
auto get = ud->Get();
|
||||
if (get == nullptr){
|
||||
throw Exception("Userdata was not found.");
|
||||
}
|
||||
get->SetIsCastable(cast);
|
||||
}
|
||||
|
||||
void SetCastFunc(uint32_t typeId, Evaluation::EvalValue* (*cast)(void*, const ScriptType*)){
|
||||
auto ud = UserDataStorage::GetUserDataType(typeId);
|
||||
ud->Get()->SetCastFunc(cast);
|
||||
auto get = ud->Get();
|
||||
if (get == nullptr){
|
||||
throw Exception("Userdata was not found.");
|
||||
}
|
||||
get->SetCastFunc(cast);
|
||||
}
|
||||
|
||||
void AddUserdataBinaryOperation(uint32_t typeId, char kind, const UserDataBinaryOperation* operation){
|
||||
auto ud = UserDataStorage::GetUserDataType(typeId);
|
||||
ud->Get()->AddBinaryOperation(static_cast<Binder::BoundBinaryOperation >(kind), operation);
|
||||
auto get = ud->Get();
|
||||
if (get == nullptr){
|
||||
throw Exception("Userdata was not found.");
|
||||
}
|
||||
get->AddBinaryOperation(static_cast<Binder::BoundBinaryOperation >(kind), operation);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
#include "UserDataFunction.hpp"
|
||||
#include "../Utilities/Random.hpp"
|
||||
|
||||
using namespace Porygon::Evaluation;
|
||||
|
||||
|
@ -8,7 +9,7 @@ namespace Porygon::UserData{
|
|||
const EvalValue * CreateFunctionEvalValue(const Evaluation::EvalValue* (*func)(void*, const ScriptOptions*,
|
||||
const EvalValue* [], int ), void* obj) {
|
||||
auto opt = new UserDataFunction(func, obj);
|
||||
auto t = new GenericFunctionEvalValue(make_shared<GenericFunctionScriptType>(), rand());
|
||||
auto t = new GenericFunctionEvalValue(make_shared<GenericFunctionScriptType>(), Utilities::Random::Get());
|
||||
t->RegisterOption(opt);
|
||||
return t;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue