ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/Coro/State.xs
(Generate patch)

Comparing Coro/Coro/State.xs (file contents):
Revision 1.433 by root, Thu May 9 05:40:14 2013 UTC vs.
Revision 1.435 by root, Sat Nov 2 19:49:33 2013 UTC

26#ifndef SVs_PADSTALE 26#ifndef SVs_PADSTALE
27# define SVs_PADSTALE 0 27# define SVs_PADSTALE 0
28#endif 28#endif
29 29
30#ifdef PadARRAY 30#ifdef PadARRAY
31# define NEWPADAPI 31# define NEWPADAPI 1
32# define newPADLIST(var) (Newz (0, var, 1, PADLIST), Newx (PadlistARRAY (var), 2, PAD *)) 32# define newPADLIST(var) (Newz (0, var, 1, PADLIST), Newx (PadlistARRAY (var), 2, PAD *))
33#else 33#else
34typedef AV PADNAMELIST; 34typedef AV PADNAMELIST;
35# if !PERL_VERSION_ATLEAST(5,8,0) 35# if !PERL_VERSION_ATLEAST(5,8,0)
36typedef AV PADLIST; 36typedef AV PADLIST;
511coro_derive_padlist (pTHX_ CV *cv) 511coro_derive_padlist (pTHX_ CV *cv)
512{ 512{
513 PADLIST *padlist = CvPADLIST (cv); 513 PADLIST *padlist = CvPADLIST (cv);
514 PADLIST *newpadlist; 514 PADLIST *newpadlist;
515 PAD *newpad; 515 PAD *newpad;
516 PADOFFSET const off = PadlistMAX (padlist) + 1; 516 PADOFFSET off = PadlistMAX (padlist) + 1;
517 517
518 newPADLIST(newpadlist); 518#if NEWPADAPI
519#if !PERL_VERSION_ATLEAST(5,15,3) 519
520 /* Padlists are AvREAL as of 5.15.3. See perl bug #98092 and perl commit 7d953ba. */ 520 while (!PadlistARRAY (padlist)[off - 1])
521 AvREAL_off (newpadlist); 521 --off;
522#endif 522
523 Perl_pad_push (aTHX_ padlist, off);
524
525 newpad = PadlistARRAY (padlist)[off];
526 PadlistARRAY (padlist)[off] = 0;
527
528#else
529
523#if PERL_VERSION_ATLEAST (5,10,0) 530#if PERL_VERSION_ATLEAST (5,10,0)
524 Perl_pad_push (aTHX_ padlist, off); 531 Perl_pad_push (aTHX_ padlist, off);
525#else 532#else
526 Perl_pad_push (aTHX_ padlist, off, 1); 533 Perl_pad_push (aTHX_ padlist, off, 1);
527#endif 534#endif
535
528 newpad = PadlistARRAY (padlist)[off]; 536 newpad = PadlistARRAY (padlist)[off];
529 PadlistMAX (padlist) = off - 1; 537 PadlistMAX (padlist) = off - 1;
538
539#endif
540
541 newPADLIST (newpadlist);
542#if !PERL_VERSION_ATLEAST(5,15,3)
543 /* Padlists are AvREAL as of 5.15.3. See perl bug #98092 and perl commit 7d953ba. */
544 AvREAL_off (newpadlist);
545#endif
530 546
531 /* Already extended to 2 elements by newPADLIST. */ 547 /* Already extended to 2 elements by newPADLIST. */
532 PadlistMAX (newpadlist) = 1; 548 PadlistMAX (newpadlist) = 1;
533 PadlistNAMES (newpadlist) = (PADNAMELIST *)SvREFCNT_inc_NN (PadlistNAMES (padlist)); 549 PadlistNAMES (newpadlist) = (PADNAMELIST *)SvREFCNT_inc_NN (PadlistNAMES (padlist));
534 PadlistARRAY (newpadlist)[1] = newpad; 550 PadlistARRAY (newpadlist)[1] = newpad;
557 SvREFCNT_dec (pad); 573 SvREFCNT_dec (pad);
558 } 574 }
559 575
560 SvREFCNT_dec (PadlistNAMES (padlist)); 576 SvREFCNT_dec (PadlistNAMES (padlist));
561 577
562#ifdef NEWPADAPI 578#if NEWPADAPI
563 Safefree (PadlistARRAY (padlist)); 579 Safefree (PadlistARRAY (padlist));
564 Safefree (padlist); 580 Safefree (padlist);
565#else 581#else
566 AvFILLp (padlist) = -1; 582 AvFILLp (padlist) = -1;
567 AvREAL_off (padlist); 583 AvREAL_off (padlist);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines