X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=av.c;h=3d15d58f8549b5902fb0b1ceaa9ff71b2babc0ec;hb=f89542f789fc8ac88f7cd7e93bb8d9cd6228182b;hp=fa2be12adc100f22ba25429fad8b40a67eeb6d17;hpb=e050cc0e6db974512bccc84746c68ba4ed3e4079;p=p5sagit%2Fp5-mst-13.2.git diff --git a/av.c b/av.c index fa2be12..3d15d58 100644 --- a/av.c +++ b/av.c @@ -28,6 +28,7 @@ Perl_av_reify(pTHX_ AV *av) I32 key; PERL_ARGS_ASSERT_AV_REIFY; + assert(SvTYPE(av) == SVt_PVAV); if (AvREAL(av)) return; @@ -67,6 +68,7 @@ Perl_av_extend(pTHX_ AV *av, I32 key) MAGIC *mg; PERL_ARGS_ASSERT_AV_EXTEND; + assert(SvTYPE(av) == SVt_PVAV); mg = SvTIED_mg((SV*)av, PERL_MAGIC_tied); if (mg) { @@ -210,6 +212,7 @@ Perl_av_fetch(pTHX_ register AV *av, I32 key, I32 lval) dVAR; PERL_ARGS_ASSERT_AV_FETCH; + assert(SvTYPE(av) == SVt_PVAV); if (SvRMAGICAL(av)) { const MAGIC * const tied_magic = mg_find((SV*)av, PERL_MAGIC_tied); @@ -293,6 +296,7 @@ Perl_av_store(pTHX_ register AV *av, I32 key, SV *val) SV** ary; PERL_ARGS_ASSERT_AV_STORE; + assert(SvTYPE(av) == SVt_PVAV); /* S_regclass relies on being able to pass in a NULL sv (unicode_alternate may be NULL). @@ -384,6 +388,8 @@ Perl_av_make(pTHX_ register I32 size, register SV **strp) register AV * const av = (AV*)newSV_type(SVt_PVAV); /* sv_upgrade does AvREAL_only() */ PERL_ARGS_ASSERT_AV_MAKE; + assert(SvTYPE(av) == SVt_PVAV); + if (size) { /* "defined" was returning undef for size==0 anyway. */ register SV** ary; register I32 i; @@ -417,6 +423,8 @@ Perl_av_clear(pTHX_ register AV *av) I32 extra; PERL_ARGS_ASSERT_AV_CLEAR; + assert(SvTYPE(av) == SVt_PVAV); + #ifdef DEBUGGING if (SvREFCNT(av) == 0 && ckWARN_d(WARN_DEBUGGING)) { Perl_warner(aTHX_ packWARN(WARN_DEBUGGING), "Attempt to clear deleted array"); @@ -429,7 +437,7 @@ Perl_av_clear(pTHX_ register AV *av) /* Give any tie a chance to cleanup first */ if (SvRMAGICAL(av)) { const MAGIC* const mg = SvMAGIC(av); - if (PL_delaymagic && mg->mg_type == PERL_MAGIC_isa) + if (PL_delaymagic && mg && mg->mg_type == PERL_MAGIC_isa) PL_delaymagic |= DM_ARRAY; else mg_clear((SV*)av); @@ -470,6 +478,7 @@ void Perl_av_undef(pTHX_ register AV *av) { PERL_ARGS_ASSERT_AV_UNDEF; + assert(SvTYPE(av) == SVt_PVAV); /* Give any tie a chance to cleanup first */ if (SvTIED_mg((SV*)av, PERL_MAGIC_tied)) @@ -503,6 +512,7 @@ void Perl_av_create_and_push(pTHX_ AV **const avp, SV *const val) { PERL_ARGS_ASSERT_AV_CREATE_AND_PUSH; + if (!*avp) *avp = newAV(); av_push(*avp, val); @@ -524,6 +534,7 @@ Perl_av_push(pTHX_ register AV *av, SV *val) MAGIC *mg; PERL_ARGS_ASSERT_AV_PUSH; + assert(SvTYPE(av) == SVt_PVAV); if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); @@ -562,6 +573,7 @@ Perl_av_pop(pTHX_ register AV *av) MAGIC* mg; PERL_ARGS_ASSERT_AV_POP; + assert(SvTYPE(av) == SVt_PVAV); if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); @@ -605,6 +617,7 @@ SV ** Perl_av_create_and_unshift_one(pTHX_ AV **const avp, SV *const val) { PERL_ARGS_ASSERT_AV_CREATE_AND_UNSHIFT_ONE; + if (!*avp) *avp = newAV(); av_unshift(*avp, 1); @@ -629,6 +642,7 @@ Perl_av_unshift(pTHX_ register AV *av, register I32 num) MAGIC* mg; PERL_ARGS_ASSERT_AV_UNSHIFT; + assert(SvTYPE(av) == SVt_PVAV); if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); @@ -687,7 +701,8 @@ Perl_av_unshift(pTHX_ register AV *av, register I32 num) /* =for apidoc av_shift -Shifts an SV off the beginning of the array. +Shifts an SV off the beginning of the array. Returns C<&PL_sv_undef> if the +array is empty. =cut */ @@ -700,6 +715,7 @@ Perl_av_shift(pTHX_ register AV *av) MAGIC* mg; PERL_ARGS_ASSERT_AV_SHIFT; + assert(SvTYPE(av) == SVt_PVAV); if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); @@ -745,6 +761,8 @@ I32 Perl_av_len(pTHX_ register const AV *av) { PERL_ARGS_ASSERT_AV_LEN; + assert(SvTYPE(av) == SVt_PVAV); + return AvFILL(av); } @@ -769,6 +787,7 @@ Perl_av_fill(pTHX_ register AV *av, I32 fill) MAGIC *mg; PERL_ARGS_ASSERT_AV_FILL; + assert(SvTYPE(av) == SVt_PVAV); if (fill < 0) fill = -1; @@ -827,6 +846,7 @@ Perl_av_delete(pTHX_ AV *av, I32 key, I32 flags) SV *sv; PERL_ARGS_ASSERT_AV_DELETE; + assert(SvTYPE(av) == SVt_PVAV); if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); @@ -913,6 +933,7 @@ Perl_av_exists(pTHX_ AV *av, I32 key) { dVAR; PERL_ARGS_ASSERT_AV_EXISTS; + assert(SvTYPE(av) == SVt_PVAV); if (SvRMAGICAL(av)) { const MAGIC * const tied_magic = mg_find((SV*)av, PERL_MAGIC_tied); @@ -969,6 +990,7 @@ S_get_aux_mg(pTHX_ AV *av) { MAGIC *mg; PERL_ARGS_ASSERT_GET_AUX_MG; + assert(SvTYPE(av) == SVt_PVAV); mg = mg_find((SV*)av, PERL_MAGIC_arylen_p); @@ -987,6 +1009,7 @@ Perl_av_arylen_p(pTHX_ AV *av) { MAGIC *const mg = get_aux_mg(av); PERL_ARGS_ASSERT_AV_ARYLEN_P; + assert(SvTYPE(av) == SVt_PVAV); return &(mg->mg_obj); } @@ -996,6 +1019,7 @@ Perl_av_iter_p(pTHX_ AV *av) { MAGIC *const mg = get_aux_mg(av); PERL_ARGS_ASSERT_AV_ITER_P; + assert(SvTYPE(av) == SVt_PVAV); #if IVSIZE == I32SIZE return (IV *)&(mg->mg_len);