From: Nicholas Clark Date: Thu, 17 Sep 2009 14:24:47 +0000 (+0100) Subject: In S_mro_get_linear_isa_c3() replace sv_inc() with code for the cases we need. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=c9875a611df71a98a3ccc8a0f3989fc29bd48ed8;p=p5sagit%2Fp5-mst-13.2.git In S_mro_get_linear_isa_c3() replace sv_inc() with code for the cases we need. --- diff --git a/ext/mro/mro.xs b/ext/mro/mro.xs index 69557a6..00c960d 100644 --- a/ext/mro/mro.xs +++ b/ext/mro/mro.xs @@ -158,9 +158,15 @@ S_mro_get_linear_isa_c3(pTHX_ HV* stash, U32 level) HE* const he = hv_fetch_ent(tails, seqitem, 1, 0); if(he) { SV* const val = HeVAL(he); - /* This will increment undef to 1, which is what we - want for a newly created entry. */ - sv_inc(val); + /* For 5.8.0 and later, sv_inc() with increment undef to + an IV of 1, which is what we want for a newly created + entry. However, for 5.6.x it will become an NV of + 1.0, which confuses the SvIVX() checks above. */ + if(SvIOK(val)) { + SvIV_set(val, SvIVX(val) + 1); + } else { + sv_setiv(val, 1); + } } } }