… | |
… | |
42 | # define PadlistNAMES(pl) (*PadlistARRAY (pl)) |
42 | # define PadlistNAMES(pl) (*PadlistARRAY (pl)) |
43 | # define PadARRAY AvARRAY |
43 | # define PadARRAY AvARRAY |
44 | # define PadMAX AvFILLp |
44 | # define PadMAX AvFILLp |
45 | # define newPADLIST(var) ((var) = newAV (), av_extend (var, 1)) |
45 | # define newPADLIST(var) ((var) = newAV (), av_extend (var, 1)) |
46 | #endif |
46 | #endif |
|
|
47 | #ifndef PadnamelistREFCNT |
|
|
48 | # define PadnamelistREFCNT(pnl) SvREFCNT (pnl) |
|
|
49 | #endif |
|
|
50 | #ifndef PadnamelistREFCNT_dec |
|
|
51 | # define PadnamelistREFCNT_dec(pnl) SvREFCNT_dec (pnl) |
|
|
52 | #endif |
47 | |
53 | |
48 | /* 5.19.something has replaced SVt_BIND by SVt_INVLIST */ |
54 | /* 5.19.something has replaced SVt_BIND by SVt_INVLIST */ |
49 | /* we just alias it to SVt_IV, as that is sufficient for swap_sv for now */ |
55 | /* we just alias it to SVt_IV, as that is sufficient for swap_sv for now */ |
50 | #if PERL_VERSION_ATLEAST(5,19,0) |
56 | #if PERL_VERSION_ATLEAST(5,19,0) |
51 | # define SVt_BIND SVt_IV |
57 | # define SVt_BIND SVt_IV |
… | |
… | |
517 | ecb_inline PADLIST * |
523 | ecb_inline PADLIST * |
518 | coro_derive_padlist (pTHX_ CV *cv) |
524 | coro_derive_padlist (pTHX_ CV *cv) |
519 | { |
525 | { |
520 | PADLIST *padlist = CvPADLIST (cv); |
526 | PADLIST *padlist = CvPADLIST (cv); |
521 | PADLIST *newpadlist; |
527 | PADLIST *newpadlist; |
|
|
528 | PADNAMELIST *padnames; |
522 | PAD *newpad; |
529 | PAD *newpad; |
523 | PADOFFSET off = PadlistMAX (padlist) + 1; |
530 | PADOFFSET off = PadlistMAX (padlist) + 1; |
524 | |
531 | |
525 | #if NEWPADAPI |
532 | #if NEWPADAPI |
526 | |
533 | |
… | |
… | |
553 | AvREAL_off (newpadlist); |
560 | AvREAL_off (newpadlist); |
554 | #endif |
561 | #endif |
555 | |
562 | |
556 | /* Already extended to 2 elements by newPADLIST. */ |
563 | /* Already extended to 2 elements by newPADLIST. */ |
557 | PadlistMAX (newpadlist) = 1; |
564 | PadlistMAX (newpadlist) = 1; |
558 | PadlistNAMES (newpadlist) = (PADNAMELIST *)SvREFCNT_inc_NN (PadlistNAMES (padlist)); |
565 | |
|
|
566 | padnames = PadlistNAMES (padlist); |
|
|
567 | ++PadnamelistREFCNT (padnames); |
|
|
568 | PadlistNAMES (newpadlist) = padnames; |
|
|
569 | |
559 | PadlistARRAY (newpadlist)[1] = newpad; |
570 | PadlistARRAY (newpadlist)[1] = newpad; |
560 | |
571 | |
561 | return newpadlist; |
572 | return newpadlist; |
562 | } |
573 | } |
563 | |
574 | |
… | |
… | |
584 | PadMAX (pad) = -1; |
595 | PadMAX (pad) = -1; |
585 | SvREFCNT_dec (pad); |
596 | SvREFCNT_dec (pad); |
586 | } |
597 | } |
587 | } |
598 | } |
588 | |
599 | |
589 | SvREFCNT_dec (PadlistNAMES (padlist)); |
600 | PadnamelistREFCNT_dec (PadlistNAMES (padlist)); |
590 | |
601 | |
591 | #if NEWPADAPI |
602 | #if NEWPADAPI |
592 | Safefree (PadlistARRAY (padlist)); |
603 | Safefree (PadlistARRAY (padlist)); |
593 | Safefree (padlist); |
604 | Safefree (padlist); |
594 | #else |
605 | #else |