From: Nicholas Clark Date: Sat, 8 Mar 2008 11:20:28 +0000 (+0000) Subject: Assert that the av argument to all the av_*() functions is an array. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=2fed2a1ba94aec1ffaf141357a7d90754b2b3208;p=p5sagit%2Fp5-mst-13.2.git Assert that the av argument to all the av_*() functions is an array. p4raw-id: //depot/perl@33452 --- diff --git a/av.c b/av.c index fa2be12..e6c26bc 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"); @@ -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); @@ -700,6 +714,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 +760,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 +786,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 +845,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 +932,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 +989,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 +1008,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 +1018,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);