X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Fautovivification.git;a=blobdiff_plain;f=autovivification.xs;h=4f7a212baa2a829bdf3bd7a95b4cb216920bab3d;hp=43922752149c3457518c1b0f65f8fc8c211e9c81;hb=f188eeceb45dd21b7a80346a1f57c06d7d192080;hpb=ccae126e91d7ecabe5a5648bc4810fede4cc2c30 diff --git a/autovivification.xs b/autovivification.xs index 4392275..4f7a212 100644 --- a/autovivification.xs +++ b/autovivification.xs @@ -710,6 +710,16 @@ static OP *a_pp_rv2hv(pTHX) { /* ... pp_deref (aelem,helem,rv2sv,padsv) .................................. */ +static void a_cannot_vivify(pTHX_ UV flags) { +#define a_cannot_vivify(F) a_cannot_vivify(aTHX_ (F)) + if (flags & A_HINT_STRICT) + croak("Reference vivification forbidden"); + else if (flags & A_HINT_WARN) + warn("Reference was vivified"); + else /* A_HINT_STORE */ + croak("Can't vivify reference"); +} + static OP *a_pp_deref(pTHX) { dA_MAP_THX; const a_op_info *oi; @@ -726,14 +736,8 @@ static OP *a_pp_deref(pTHX) { if (flags & (A_HINT_NOTIFY|A_HINT_STORE)) { SPAGAIN; - if (a_undef(TOPs)) { - if (flags & A_HINT_STRICT) - croak("Reference vivification forbidden"); - else if (flags & A_HINT_WARN) - warn("Reference was vivified"); - else /* A_HINT_STORE */ - croak("Can't vivify reference"); - } + if (a_undef(TOPs)) + a_cannot_vivify(flags); } return o;