X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pad.h;h=352a592f8324b986cdaebb3faf1ac494e9032a65;hb=a0614a7b604f0f7f994a6210a436500d449c1384;hp=2f0fb7c7d11322f59e810dfd0ebf8b7e0272d651;hpb=b1bc3f345d4dfe19cd94c120c46649336b5cb92b;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pad.h b/pad.h index 2f0fb7c..352a592 100644 --- a/pad.h +++ b/pad.h @@ -210,7 +210,7 @@ Restore the old pad saved into the local variable opad by PAD_SAVE_LOCAL() #define PAD_BASE_SV(padlist, po) \ (AvARRAY(padlist)[1]) \ - ? AvARRAY((AV*)(AvARRAY(padlist)[1]))[po] : NULL; + ? AvARRAY(MUTABLE_AV((AvARRAY(padlist)[1])))[po] : NULL; #define PAD_SET_CUR_NOSAVE(padlist,nth) \ @@ -239,7 +239,7 @@ Restore the old pad saved into the local variable opad by PAD_SAVE_LOCAL() PTR2UV(PL_comppad), PTR2UV(PL_curpad))); #define PAD_RESTORE_LOCAL(opad) \ - PL_comppad = opad; \ + PL_comppad = opad && SvIS_FREED(opad) ? NULL : opad; \ PL_curpad = PL_comppad ? AvARRAY(PL_comppad) : NULL; \ DEBUG_Xv(PerlIO_printf(Perl_debug_log, \ "Pad 0x%"UVxf"[0x%"UVxf"] restore_local\n", \ @@ -258,7 +258,7 @@ context block structure (can be used as an lvalue). */ #define CX_CURPAD_SAVE(block) (block).oldcomppad = PL_comppad -#define CX_CURPAD_SV(block,po) (AvARRAY((AV*)((block).oldcomppad))[po]) +#define CX_CURPAD_SV(block,po) (AvARRAY(MUTABLE_AV(((block).oldcomppad)))[po]) /* @@ -337,7 +337,7 @@ Clone the state variables associated with running and compiling pads. * sub's CV or padlist. */ #define PAD_CLONE_VARS(proto_perl, param) \ - PL_comppad = (AV *) ptr_table_fetch(PL_ptr_table, proto_perl->Icomppad); \ + PL_comppad = MUTABLE_AV(ptr_table_fetch(PL_ptr_table, proto_perl->Icomppad)); \ PL_curpad = PL_comppad ? AvARRAY(PL_comppad) : NULL; \ PL_comppad_name = av_dup(proto_perl->Icomppad_name, param); \ PL_comppad_name_fill = proto_perl->Icomppad_name_fill; \