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

Comparing Guard/Guard.xs (file contents):
Revision 1.4 by root, Sat Dec 13 19:43:27 2008 UTC vs.
Revision 1.9 by root, Sat Apr 11 04:42:29 2009 UTC

31 PUSHSTACKi (PERLSI_DESTROY); 31 PUSHSTACKi (PERLSI_DESTROY);
32 32
33 PUSHMARK (SP); 33 PUSHMARK (SP);
34 PUTBACK; 34 PUTBACK;
35 call_sv (cb, G_VOID | G_DISCARD | G_EVAL); 35 call_sv (cb, G_VOID | G_DISCARD | G_EVAL);
36 SPAGAIN;
37 36
38 if (SvTRUE (ERRSV)) 37 if (SvTRUE (ERRSV))
39 { 38 {
39 SPAGAIN;
40
40 PUSHMARK (SP); 41 PUSHMARK (SP);
41 PUTBACK; 42 PUTBACK;
42 call_sv (get_sv ("Guard::DIED", 1), G_VOID | G_DISCARD | G_EVAL | G_KEEPERR); 43 call_sv (get_sv ("Guard::DIED", 1), G_VOID | G_DISCARD | G_EVAL | G_KEEPERR);
43 SPAGAIN;
44 44
45 sv_setpvn (ERRSV, "", 0); 45 sv_setpvn (ERRSV, "", 0);
46 } 46 }
47 47
48 if (saveerr) 48 if (saveerr)
53 PL_diehook = savedie; 53 PL_diehook = savedie;
54 SvREFCNT_dec (oldhook); 54 SvREFCNT_dec (oldhook);
55 } 55 }
56 56
57 POPSTACK; 57 POPSTACK;
58 PUTBACK;
59} 58}
60 59
61static void 60static void
62scope_guard_cb (pTHX_ void *cv) 61scope_guard_cb (pTHX_ void *cv)
63{ 62{
66 65
67static int 66static int
68guard_free (pTHX_ SV *cv, MAGIC *mg) 67guard_free (pTHX_ SV *cv, MAGIC *mg)
69{ 68{
70 exec_guard_cb (aTHX_ mg->mg_obj); 69 exec_guard_cb (aTHX_ mg->mg_obj);
70
71 return 0;
71} 72}
72 73
73static MGVTBL guard_vtbl = { 74static MGVTBL guard_vtbl = {
74 0, 0, 0, 0, 75 0, 0, 0, 0,
75 guard_free 76 guard_free
77 78
78MODULE = Guard PACKAGE = Guard 79MODULE = Guard PACKAGE = Guard
79 80
80BOOT: 81BOOT:
81 guard_stash = gv_stashpv ("Guard", 1); 82 guard_stash = gv_stashpv ("Guard", 1);
82 83 CvNODEBUG_on (get_cv ("Guard::scope_guard", 0)); /* otherwise calling scope can be the debugger */
83void
84CLONE (...)
85 PROTOTYPE: @
86 CODE:
87 guard_stash = gv_stashpv ("Guard", 1);
88 84
89void 85void
90scope_guard (SV *block) 86scope_guard (SV *block)
91 PROTOTYPE: & 87 PROTOTYPE: &
92 CODE: 88 CODE:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines