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.189 by root, Fri Oct 5 20:38:43 2007 UTC vs.
Revision 1.192 by root, Fri Oct 5 21:51:40 2007 UTC

75/* 5.8.7 */ 75/* 5.8.7 */
76#ifndef SvRV_set 76#ifndef SvRV_set
77# define SvRV_set(s,v) SvRV(s) = (v) 77# define SvRV_set(s,v) SvRV(s) = (v)
78#endif 78#endif
79 79
80/* 5.8.8 */
81#ifndef GV_NOTQUAL
82# define GV_NOTQUAL 0
83#endif
84#ifndef newSV
85# define newSV(l) NEWSV(0,l)
86#endif
87
80#if !__i386 && !__x86_64 && !__powerpc && !__m68k && !__alpha && !__mips && !__sparc64 88#if !__i386 && !__x86_64 && !__powerpc && !__m68k && !__alpha && !__mips && !__sparc64
81# undef CORO_STACKGUARD 89# undef CORO_STACKGUARD
82#endif 90#endif
83 91
84#ifndef CORO_STACKGUARD 92#ifndef CORO_STACKGUARD
599 PL_curpm = 0; 607 PL_curpm = 0;
600 PL_localizing = 0; 608 PL_localizing = 0;
601 PL_dirty = 0; 609 PL_dirty = 0;
602 PL_restartop = 0; 610 PL_restartop = 0;
603 611
604 GvSV (PL_defgv) = NEWSV (0, 0); 612 GvSV (PL_defgv) = newSV (0);
605 GvAV (PL_defgv) = coro->args; coro->args = 0; 613 GvAV (PL_defgv) = coro->args; coro->args = 0;
606 GvSV (PL_errgv) = NEWSV (0, 0); 614 GvSV (PL_errgv) = newSV (0);
607 GvSV (irsgv) = newSVpvn ("\n", 1); sv_magic (GvSV (irsgv), (SV *)irsgv, PERL_MAGIC_sv, "/", 0); 615 GvSV (irsgv) = newSVpvn ("\n", 1); sv_magic (GvSV (irsgv), (SV *)irsgv, PERL_MAGIC_sv, "/", 0);
608 PL_rs = newSVsv (GvSV (irsgv)); 616 PL_rs = newSVsv (GvSV (irsgv));
609 PL_defoutgv = SvREFCNT_inc (stdoutgv); 617 PL_defoutgv = SvREFCNT_inc (stdoutgv);
610 618
619 ENTER; /* necessary e.g. for dounwind */
620
611 { 621 {
612 dSP; 622 dSP;
613 LOGOP myop; 623 LOGOP myop;
614 624
615 Zero (&myop, 1, LOGOP); 625 Zero (&myop, 1, LOGOP);
616 myop.op_next = Nullop; 626 myop.op_next = Nullop;
617 myop.op_flags = OPf_WANT_VOID; 627 myop.op_flags = OPf_WANT_VOID;
618 628
619 PUSHMARK (SP); 629 PUSHMARK (SP);
620 XPUSHs (av_shift (GvAV (PL_defgv))); 630 XPUSHs (sv_2mortal (av_shift (GvAV (PL_defgv))));
621 PUTBACK; 631 PUTBACK;
622 PL_op = (OP *)&myop; 632 PL_op = (OP *)&myop;
623 PL_op = PL_ppaddr[OP_ENTERSUB](aTHX); 633 PL_op = PL_ppaddr[OP_ENTERSUB](aTHX);
624 SPAGAIN; 634 SPAGAIN;
625 } 635 }
626
627 ENTER; /* necessary e.g. for dounwind */
628} 636}
629 637
630static void 638static void
631coro_destroy (pTHX_ struct coro *coro) 639coro_destroy (pTHX_ struct coro *coro)
632{ 640{
1378#ifdef USE_ITHREADS 1386#ifdef USE_ITHREADS
1379 MUTEX_INIT (&coro_mutex); 1387 MUTEX_INIT (&coro_mutex);
1380#endif 1388#endif
1381 BOOT_PAGESIZE; 1389 BOOT_PAGESIZE;
1382 1390
1383 irsgv = gv_fetchpv ("/" , GV_ADD, SVt_PV); 1391 irsgv = gv_fetchpv ("/" , GV_ADD|GV_NOTQUAL, SVt_PV);
1384 stdoutgv = gv_fetchpv ("STDOUT", GV_ADD, SVt_PVIO); 1392 stdoutgv = gv_fetchpv ("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVIO);
1385 1393
1386 coro_state_stash = gv_stashpv ("Coro::State", TRUE); 1394 coro_state_stash = gv_stashpv ("Coro::State", TRUE);
1387 1395
1388 newCONSTSUB (coro_state_stash, "CC_TRACE" , newSViv (CC_TRACE)); 1396 newCONSTSUB (coro_state_stash, "CC_TRACE" , newSViv (CC_TRACE));
1389 newCONSTSUB (coro_state_stash, "CC_TRACE_SUB" , newSViv (CC_TRACE_SUB)); 1397 newCONSTSUB (coro_state_stash, "CC_TRACE_SUB" , newSViv (CC_TRACE_SUB));
1419 coro_first = coro; 1427 coro_first = coro;
1420 1428
1421 coro->hv = hv = newHV (); 1429 coro->hv = hv = newHV ();
1422 sv_magicext ((SV *)hv, 0, PERL_MAGIC_ext, &coro_state_vtbl, (char *)coro, 0)->mg_flags |= MGf_DUP; 1430 sv_magicext ((SV *)hv, 0, PERL_MAGIC_ext, &coro_state_vtbl, (char *)coro, 0)->mg_flags |= MGf_DUP;
1423 RETVAL = sv_bless (newRV_noinc ((SV *)hv), gv_stashpv (klass, 1)); 1431 RETVAL = sv_bless (newRV_noinc ((SV *)hv), gv_stashpv (klass, 1));
1432
1433 av_extend (coro->args, items - 1);
1424 1434
1425 for (i = 1; i < items; i++) 1435 for (i = 1; i < items; i++)
1426 av_push (coro->args, newSVsv (ST (i))); 1436 av_push (coro->args, newSVsv (ST (i)));
1427} 1437}
1428 OUTPUT: 1438 OUTPUT:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines