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.328 by root, Tue Nov 25 09:49:43 2008 UTC vs.
Revision 1.330 by root, Wed Nov 26 09:29:06 2008 UTC

386 if (SvREFCNT (padlist)) 386 if (SvREFCNT (padlist))
387 { 387 {
388 I32 i = AvFILLp (padlist); 388 I32 i = AvFILLp (padlist);
389 while (i >= 0) 389 while (i >= 0)
390 { 390 {
391 SV **svp = av_fetch (padlist, i--, FALSE); 391 SV **svp = AvARRAY (padlist)[i--];
392 if (svp) 392 if (svp)
393 { 393 {
394 SV *sv; 394 AvREAL_on (*svp);
395 while (&PL_sv_undef != (sv = av_pop ((AV *)*svp)))
396 SvREFCNT_dec (sv); 395 av_undef (*svp);
397
398 SvREFCNT_dec (*svp); 396 SvREFCNT_dec (*svp);
399 } 397 }
400 } 398 }
401 399
402 SvREFCNT_dec ((SV*)padlist); 400 SvREFCNT_dec ((SV*)padlist);
503 mg = sv_magicext ((SV *)cv, (SV *)newAV (), CORO_MAGIC_type_cv, &coro_cv_vtbl, 0, 0); 501 mg = sv_magicext ((SV *)cv, (SV *)newAV (), CORO_MAGIC_type_cv, &coro_cv_vtbl, 0, 0);
504 502
505 av = (AV *)mg->mg_obj; 503 av = (AV *)mg->mg_obj;
506 504
507 if (expect_false (AvFILLp (av) >= AvMAX (av))) 505 if (expect_false (AvFILLp (av) >= AvMAX (av)))
508 av_extend (av, AvMAX (av) + 1); 506 av_extend (av, AvFILLp (av) + 1);
509 507
510 AvARRAY (av)[++AvFILLp (av)] = (SV *)CvPADLIST (cv); 508 AvARRAY (av)[++AvFILLp (av)] = (SV *)CvPADLIST (cv);
511} 509}
512 510
513/** load & save, init *******************************************************/ 511/** load & save, init *******************************************************/
2370 SV **ary; 2368 SV **ary;
2371 2369
2372 /* unfortunately, building manually saves memory */ 2370 /* unfortunately, building manually saves memory */
2373 Newx (ary, 2, SV *); 2371 Newx (ary, 2, SV *);
2374 AvALLOC (av) = ary; 2372 AvALLOC (av) = ary;
2373#if PERL_VERSION_ATLEAST (5,10,0)
2375 /*AvARRAY (av) = ary;*/ 2374 AvARRAY (av) = ary;
2375#else
2376 SvPVX ((SV *)av) = (char *)ary; /* 5.8.8 needs this syntax instead of AvARRAY = ary */ 2376 /* 5.8.8 needs this syntax instead of AvARRAY = ary, yet */
2377 /* -DDEBUGGING flags this as a bug, despite it perfectly working */
2378 SvPVX ((SV *)av) = (char *)ary;
2379#endif
2377 AvMAX (av) = 1; 2380 AvMAX (av) = 1;
2378 AvFILLp (av) = 0; 2381 AvFILLp (av) = 0;
2379 ary [0] = newSViv (count); 2382 ary [0] = newSViv (count);
2380 2383
2381 return newRV_noinc ((SV *)av); 2384 return newRV_noinc ((SV *)av);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines