From 2430b38406c072888df172ead803858048e71c79 Mon Sep 17 00:00:00 2001 From: Kinglykrab Date: Mon, 1 Feb 2021 22:15:21 -0500 Subject: [PATCH] [Quest API] Perl Hate Validation Macro Add validation macro to all hate methods. --- zone/perl_hateentry.cpp | 43 +++++++++++++++-------------------------- 1 file changed, 16 insertions(+), 27 deletions(-) diff --git a/zone/perl_hateentry.cpp b/zone/perl_hateentry.cpp index 85b5d67dd..4b7b5798e 100644 --- a/zone/perl_hateentry.cpp +++ b/zone/perl_hateentry.cpp @@ -35,6 +35,19 @@ #undef THIS #endif +#define VALIDATE_THIS_IS_HATE \ + do { \ + if (sv_derived_from(ST(0), "HateEntry")) { \ + IV tmp = SvIV((SV*)SvRV(ST(0))); \ + THIS = INT2PTR(struct_HateList*, tmp); \ + } else { \ + Perl_croak(aTHX_ "THIS is not of type HateEntry"); \ + } \ + if (THIS == nullptr) { \ + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); \ + } \ + } while (0); + XS(XS_HateEntry_GetEnt); /* prototype to pass -Wmissing-prototypes */ XS(XS_HateEntry_GetEnt) { dXSARGS; @@ -43,15 +56,7 @@ XS(XS_HateEntry_GetEnt) { { struct_HateList *THIS; Mob *RETVAL; - - if (sv_derived_from(ST(0), "HateEntry")) { - IV tmp = SvIV((SV *) SvRV(ST(0))); - THIS = INT2PTR(struct_HateList *, tmp); - } else - Perl_croak(aTHX_ "THIS is not of type tHateEntry"); - if (THIS == nullptr) - Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - + VALIDATE_THIS_IS_HATE; RETVAL = THIS->entity_on_hatelist; ST(0) = sv_newmortal(); sv_setref_pv(ST(0), "Mob", (void *) RETVAL); @@ -68,15 +73,7 @@ XS(XS_HateEntry_GetHate) { struct_HateList *THIS; int32 RETVAL; dXSTARG; - - if (sv_derived_from(ST(0), "HateEntry")) { - IV tmp = SvIV((SV *) SvRV(ST(0))); - THIS = INT2PTR(struct_HateList *, tmp); - } else - Perl_croak(aTHX_ "THIS is not of type tHateEntry"); - if (THIS == nullptr) - Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - + VALIDATE_THIS_IS_HATE; RETVAL = THIS->stored_hate_amount; XSprePUSH; PUSHi((IV) RETVAL); @@ -93,15 +90,7 @@ XS(XS_HateEntry_GetDamage) { struct_HateList *THIS; int32 RETVAL; dXSTARG; - - if (sv_derived_from(ST(0), "HateEntry")) { - IV tmp = SvIV((SV *) SvRV(ST(0))); - THIS = INT2PTR(struct_HateList *, tmp); - } else - Perl_croak(aTHX_ "THIS is not of type tHateEntry"); - if (THIS == nullptr) - Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - + VALIDATE_THIS_IS_HATE; RETVAL = THIS->hatelist_damage; XSprePUSH; PUSHi((IV) RETVAL);