… | |
… | |
361 | |
361 | |
362 | /* casting is fun. */ |
362 | /* casting is fun. */ |
363 | while (&PL_sv_undef != (SV *)(padlist = (AV *)av_pop (av))) |
363 | while (&PL_sv_undef != (SV *)(padlist = (AV *)av_pop (av))) |
364 | free_padlist (aTHX_ padlist); |
364 | free_padlist (aTHX_ padlist); |
365 | |
365 | |
|
|
366 | SvREFCNT_dec (av); |
|
|
367 | |
366 | return 0; |
368 | return 0; |
367 | } |
369 | } |
368 | |
370 | |
369 | #define CORO_MAGIC_type_cv PERL_MAGIC_ext |
371 | #define CORO_MAGIC_type_cv PERL_MAGIC_ext |
370 | #define CORO_MAGIC_type_state PERL_MAGIC_ext |
372 | #define CORO_MAGIC_type_state PERL_MAGIC_ext |
… | |
… | |
420 | if (expect_true (mg && AvFILLp ((av = (AV *)mg->mg_obj)) >= 0)) |
422 | if (expect_true (mg && AvFILLp ((av = (AV *)mg->mg_obj)) >= 0)) |
421 | CvPADLIST (cv) = (AV *)AvARRAY (av)[AvFILLp (av)--]; |
423 | CvPADLIST (cv) = (AV *)AvARRAY (av)[AvFILLp (av)--]; |
422 | else |
424 | else |
423 | { |
425 | { |
424 | #if CORO_PREFER_PERL_FUNCTIONS |
426 | #if CORO_PREFER_PERL_FUNCTIONS |
425 | /* this is probably cleaner, but also slower? */ |
427 | /* this is probably cleaner? but also slower! */ |
|
|
428 | /* in practise, it seems to be less stable */ |
426 | CV *cp = Perl_cv_clone (cv); |
429 | CV *cp = Perl_cv_clone (cv); |
427 | CvPADLIST (cv) = CvPADLIST (cp); |
430 | CvPADLIST (cv) = CvPADLIST (cp); |
428 | CvPADLIST (cp) = 0; |
431 | CvPADLIST (cp) = 0; |
429 | SvREFCNT_dec (cp); |
432 | SvREFCNT_dec (cp); |
430 | #else |
433 | #else |