[Quest API] Perl Object Validation Macro

Add validation macro to all object methods.
This commit is contained in:
Kinglykrab 2021-02-01 22:30:34 -05:00
parent 9b8845949e
commit 772c88d020

View File

@ -42,6 +42,19 @@
#undef THIS #undef THIS
#endif #endif
#define VALIDATE_THIS_IS_OBJECT \
do { \
if (sv_derived_from(ST(0), "Object")) { \
IV tmp = SvIV((SV*)SvRV(ST(0))); \
THIS = INT2PTR(Object*, tmp); \
} else { \
Perl_croak(aTHX_ "THIS is not of type Object"); \
} \
if (THIS == nullptr) { \
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); \
} \
} while (0);
XS(XS_Object_IsGroundSpawn); /* prototype to pass -Wmissing-prototypes */ XS(XS_Object_IsGroundSpawn); /* prototype to pass -Wmissing-prototypes */
XS(XS_Object_IsGroundSpawn) { XS(XS_Object_IsGroundSpawn) {
dXSARGS; dXSARGS;
@ -50,15 +63,7 @@ XS(XS_Object_IsGroundSpawn) {
{ {
Object *THIS; Object *THIS;
bool RETVAL; bool RETVAL;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->IsGroundSpawn(); RETVAL = THIS->IsGroundSpawn();
ST(0) = boolSV(RETVAL); ST(0) = boolSV(RETVAL);
sv_2mortal(ST(0)); sv_2mortal(ST(0));
@ -74,15 +79,7 @@ XS(XS_Object_Close) {
Perl_croak(aTHX_ "Usage: Object::Close(THIS)"); Perl_croak(aTHX_ "Usage: Object::Close(THIS)");
{ {
Object *THIS; Object *THIS;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->Close(); THIS->Close();
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
@ -97,15 +94,7 @@ XS(XS_Object_Delete) {
{ {
Object *THIS; Object *THIS;
bool reset_state; bool reset_state;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
if (items < 2) if (items < 2)
reset_state = false; reset_state = false;
else { else {
@ -123,15 +112,7 @@ XS(XS_Object_StartDecay) {
Perl_croak(aTHX_ "Usage: Object::StartDecay(THIS)"); Perl_croak(aTHX_ "Usage: Object::StartDecay(THIS)");
{ {
Object *THIS; Object *THIS;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->StartDecay(); THIS->StartDecay();
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
@ -146,15 +127,7 @@ XS(XS_Object_DeleteItem) {
{ {
Object *THIS; Object *THIS;
uint8 index = (uint8) SvUV(ST(1)); uint8 index = (uint8) SvUV(ST(1));
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->DeleteItem(index); THIS->DeleteItem(index);
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
@ -168,15 +141,7 @@ XS(XS_Object_IsObject) {
{ {
Object *THIS; Object *THIS;
bool RETVAL; bool RETVAL;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->IsObject(); RETVAL = THIS->IsObject();
ST(0) = boolSV(RETVAL); ST(0) = boolSV(RETVAL);
sv_2mortal(ST(0)); sv_2mortal(ST(0));
@ -193,15 +158,7 @@ XS(XS_Object_Save) {
{ {
Object *THIS; Object *THIS;
bool RETVAL; bool RETVAL;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->Save(); RETVAL = THIS->Save();
ST(0) = boolSV(RETVAL); ST(0) = boolSV(RETVAL);
sv_2mortal(ST(0)); sv_2mortal(ST(0));
@ -218,15 +175,7 @@ XS(XS_Object_SetID) {
{ {
Object *THIS; Object *THIS;
uint16 set_id = (uint16) SvUV(ST(1)); uint16 set_id = (uint16) SvUV(ST(1));
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->SetID(set_id); THIS->SetID(set_id);
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
@ -240,15 +189,7 @@ XS(XS_Object_ClearUser) {
Perl_croak(aTHX_ "Usage: Object::ClearUser(THIS)"); Perl_croak(aTHX_ "Usage: Object::ClearUser(THIS)");
{ {
Object *THIS; Object *THIS;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->ClearUser(); THIS->ClearUser();
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
@ -264,15 +205,7 @@ XS(XS_Object_GetDBID) {
Object *THIS; Object *THIS;
uint32 RETVAL; uint32 RETVAL;
dXSTARG; dXSTARG;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->GetDBID(); RETVAL = THIS->GetDBID();
XSprePUSH; XSprePUSH;
PUSHu((UV) RETVAL); PUSHu((UV) RETVAL);
@ -289,15 +222,7 @@ XS(XS_Object_GetID) {
Object *THIS; Object *THIS;
uint16 RETVAL; uint16 RETVAL;
dXSTARG; dXSTARG;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->GetID(); RETVAL = THIS->GetID();
XSprePUSH; XSprePUSH;
PUSHu((UV) RETVAL); PUSHu((UV) RETVAL);
@ -314,15 +239,7 @@ XS(XS_Object_GetX) {
Object *THIS; Object *THIS;
float RETVAL; float RETVAL;
dXSTARG; dXSTARG;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->GetX(); RETVAL = THIS->GetX();
XSprePUSH; XSprePUSH;
PUSHn((double) RETVAL); PUSHn((double) RETVAL);
@ -339,15 +256,7 @@ XS(XS_Object_GetY) {
Object *THIS; Object *THIS;
float RETVAL; float RETVAL;
dXSTARG; dXSTARG;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->GetY(); RETVAL = THIS->GetY();
XSprePUSH; XSprePUSH;
PUSHn((double) RETVAL); PUSHn((double) RETVAL);
@ -364,15 +273,7 @@ XS(XS_Object_GetZ) {
Object *THIS; Object *THIS;
float RETVAL; float RETVAL;
dXSTARG; dXSTARG;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->GetZ(); RETVAL = THIS->GetZ();
XSprePUSH; XSprePUSH;
PUSHn((double) RETVAL); PUSHn((double) RETVAL);
@ -389,15 +290,7 @@ XS(XS_Object_GetHeading) {
Object *THIS; Object *THIS;
float RETVAL; float RETVAL;
dXSTARG; dXSTARG;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->GetHeadingData(); RETVAL = THIS->GetHeadingData();
XSprePUSH; XSprePUSH;
PUSHn((double) RETVAL); PUSHn((double) RETVAL);
@ -414,15 +307,7 @@ XS(XS_Object_VarSave) {
Object *THIS; Object *THIS;
uint32 RETVAL; uint32 RETVAL;
dXSTARG; dXSTARG;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->VarSave(); RETVAL = THIS->VarSave();
XSprePUSH; XSprePUSH;
PUSHu((UV) RETVAL); PUSHu((UV) RETVAL);
@ -440,15 +325,7 @@ XS(XS_Object_GetType) {
Object *THIS; Object *THIS;
uint32 RETVAL; uint32 RETVAL;
dXSTARG; dXSTARG;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->GetType(); RETVAL = THIS->GetType();
XSprePUSH; XSprePUSH;
PUSHu((UV) RETVAL); PUSHu((UV) RETVAL);
@ -465,15 +342,7 @@ XS(XS_Object_SetType) {
{ {
Object *THIS; Object *THIS;
uint32 type = (uint32) SvUV(ST(1)); uint32 type = (uint32) SvUV(ST(1));
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->SetType(type); THIS->SetType(type);
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
@ -489,15 +358,7 @@ XS(XS_Object_GetIcon) {
Object *THIS; Object *THIS;
uint32 RETVAL; uint32 RETVAL;
dXSTARG; dXSTARG;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->GetIcon(); RETVAL = THIS->GetIcon();
XSprePUSH; XSprePUSH;
PUSHu((UV) RETVAL); PUSHu((UV) RETVAL);
@ -514,15 +375,7 @@ XS(XS_Object_SetIcon) {
{ {
Object *THIS; Object *THIS;
uint32 icon = (uint32) SvUV(ST(1)); uint32 icon = (uint32) SvUV(ST(1));
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->SetIcon(icon); THIS->SetIcon(icon);
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
@ -538,15 +391,7 @@ XS(XS_Object_GetItemID) {
Object *THIS; Object *THIS;
uint32 RETVAL; uint32 RETVAL;
dXSTARG; dXSTARG;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->GetItemID(); RETVAL = THIS->GetItemID();
XSprePUSH; XSprePUSH;
PUSHu((UV) RETVAL); PUSHu((UV) RETVAL);
@ -563,15 +408,7 @@ XS(XS_Object_SetItemID) {
{ {
Object *THIS; Object *THIS;
uint32 itemid = (uint32) SvUV(ST(1)); uint32 itemid = (uint32) SvUV(ST(1));
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->SetItemID(itemid); THIS->SetItemID(itemid);
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
@ -587,15 +424,7 @@ XS(XS_Object_SetLocation) {
float x = (float) SvNV(ST(1)); float x = (float) SvNV(ST(1));
float y = (float) SvNV(ST(2)); float y = (float) SvNV(ST(2));
float z = (float) SvNV(ST(3)); float z = (float) SvNV(ST(3));
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->SetLocation(x, y, z); THIS->SetLocation(x, y, z);
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
@ -609,15 +438,7 @@ XS(XS_Object_SetX) {
{ {
Object *THIS; Object *THIS;
float pos = (float) SvNV(ST(1)); float pos = (float) SvNV(ST(1));
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->SetX(pos); THIS->SetX(pos);
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
@ -631,15 +452,7 @@ XS(XS_Object_SetY) {
{ {
Object *THIS; Object *THIS;
float pos = (float) SvNV(ST(1)); float pos = (float) SvNV(ST(1));
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->SetY(pos); THIS->SetY(pos);
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
@ -653,15 +466,7 @@ XS(XS_Object_SetZ) {
{ {
Object *THIS; Object *THIS;
float pos = (float) SvNV(ST(1)); float pos = (float) SvNV(ST(1));
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->SetZ(pos); THIS->SetZ(pos);
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
@ -675,15 +480,7 @@ XS(XS_Object_SetHeading) {
{ {
Object *THIS; Object *THIS;
float heading = (float) SvNV(ST(1)); float heading = (float) SvNV(ST(1));
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->SetHeading(heading); THIS->SetHeading(heading);
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
@ -697,15 +494,7 @@ XS(XS_Object_SetModelName) {
{ {
Object *THIS; Object *THIS;
char *name = nullptr; char *name = nullptr;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
if (items > 1) { name = (char *) SvPV_nolen(ST(1)); } if (items > 1) { name = (char *) SvPV_nolen(ST(1)); }
THIS->SetModelName(name); THIS->SetModelName(name);
@ -721,15 +510,7 @@ XS(XS_Object_GetModelName) {
Object *THIS; Object *THIS;
Const_char *RETVAL; Const_char *RETVAL;
dXSTARG; dXSTARG;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->GetModelName(); RETVAL = THIS->GetModelName();
sv_setpv(TARG, RETVAL); sv_setpv(TARG, RETVAL);
XSprePUSH; XSprePUSH;
@ -746,15 +527,7 @@ XS(XS_Object_Repop) {
{ {
Object *THIS; Object *THIS;
dXSTARG; dXSTARG;
VALIDATE_THIS_IS_OBJECT; THIS->Repop();
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->Repop();
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
} }
@ -767,15 +540,7 @@ XS(XS_Object_Depop) {
{ {
Object *THIS; Object *THIS;
dXSTARG; dXSTARG;
VALIDATE_THIS_IS_OBJECT; THIS->Depop();
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->Depop();
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
} }
@ -791,15 +556,7 @@ XS(XS_Object_GetEntityVariable) {
Const_char *id = SvPV_nolen(ST(1)); Const_char *id = SvPV_nolen(ST(1));
Const_char *RETVAL; Const_char *RETVAL;
dXSTARG; dXSTARG;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->GetEntityVariable(id); RETVAL = THIS->GetEntityVariable(id);
sv_setpv(TARG, RETVAL); sv_setpv(TARG, RETVAL);
XSprePUSH; XSprePUSH;
@ -817,15 +574,7 @@ XS(XS_Object_EntityVariableExists) {
Object *THIS; Object *THIS;
Const_char *id = SvPV_nolen(ST(1)); Const_char *id = SvPV_nolen(ST(1));
bool RETVAL; bool RETVAL;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->EntityVariableExists(id); RETVAL = THIS->EntityVariableExists(id);
ST(0) = boolSV(RETVAL); ST(0) = boolSV(RETVAL);
sv_2mortal(ST(0)); sv_2mortal(ST(0));
@ -842,15 +591,7 @@ XS(XS_Object_SetEntityVariable) {
Object *THIS; Object *THIS;
Const_char *id = SvPV_nolen(ST(1)); Const_char *id = SvPV_nolen(ST(1));
const char *var = (const char *) SvPV_nolen(ST(2)); const char *var = (const char *) SvPV_nolen(ST(2));
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->SetEntityVariable(id, var); THIS->SetEntityVariable(id, var);
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
@ -865,15 +606,7 @@ XS(XS_Object_GetSolidType) {
Object *THIS; Object *THIS;
uint16 RETVAL; uint16 RETVAL;
dXSTARG; dXSTARG;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->GetSolidType(); RETVAL = THIS->GetSolidType();
XSprePUSH; XSprePUSH;
PUSHu((UV) RETVAL); PUSHu((UV) RETVAL);
@ -890,15 +623,7 @@ XS(XS_Object_SetSolidType) {
{ {
Object *THIS; Object *THIS;
uint16 type = (uint16) SvUV(ST(1)); uint16 type = (uint16) SvUV(ST(1));
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->SetSolidType(type); THIS->SetSolidType(type);
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
@ -913,15 +638,7 @@ XS(XS_Object_GetSize) {
Object *THIS; Object *THIS;
float RETVAL; float RETVAL;
dXSTARG; dXSTARG;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->GetSize(); RETVAL = THIS->GetSize();
XSprePUSH; XSprePUSH;
PUSHn((double) RETVAL); PUSHn((double) RETVAL);
@ -938,15 +655,7 @@ XS(XS_Object_SetSize) {
{ {
Object *THIS; Object *THIS;
float size = (float) SvNV(ST(1)); float size = (float) SvNV(ST(1));
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->SetSize(size); THIS->SetSize(size);
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
@ -960,15 +669,7 @@ XS(XS_Object_SetTiltX) {
{ {
Object *THIS; Object *THIS;
float pos = (float) SvNV(ST(1)); float pos = (float) SvNV(ST(1));
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->SetTiltX(pos); THIS->SetTiltX(pos);
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
@ -982,15 +683,7 @@ XS(XS_Object_SetTiltY) {
{ {
Object *THIS; Object *THIS;
float pos = (float) SvNV(ST(1)); float pos = (float) SvNV(ST(1));
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->SetTiltY(pos); THIS->SetTiltY(pos);
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
@ -1005,15 +698,7 @@ XS(XS_Object_GetTiltX) {
Object *THIS; Object *THIS;
float RETVAL; float RETVAL;
dXSTARG; dXSTARG;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->GetTiltX(); RETVAL = THIS->GetTiltX();
XSprePUSH; XSprePUSH;
PUSHn((double) RETVAL); PUSHn((double) RETVAL);
@ -1030,15 +715,7 @@ XS(XS_Object_GetTiltY) {
Object *THIS; Object *THIS;
float RETVAL; float RETVAL;
dXSTARG; dXSTARG;
VALIDATE_THIS_IS_OBJECT;
if (sv_derived_from(ST(0), "Object")) {
IV tmp = SvIV((SV *) SvRV(ST(0)));
THIS = INT2PTR(Object *, tmp);
} else
Perl_croak(aTHX_ "THIS is not of type Object");
if (THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
RETVAL = THIS->GetTiltY(); RETVAL = THIS->GetTiltY();
XSprePUSH; XSprePUSH;
PUSHn((double) RETVAL); PUSHn((double) RETVAL);