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

Comparing Guard/Guard.xs (file contents):
Revision 1.2 by root, Sat Dec 13 17:49:12 2008 UTC vs.
Revision 1.3 by root, Sat Dec 13 19:14:58 2008 UTC

1#define PERL_NO_GET_CONTEXT 1#define PERL_NO_GET_CONTEXT
2 2
3#include "EXTERN.h" 3#include "EXTERN.h"
4#include "perl.h" 4#include "perl.h"
5#include "XSUB.h" 5#include "XSUB.h"
6
7static HV *guard_stash;
6 8
7static SV * 9static SV *
8guard_get_cv (pTHX_ SV *cb_sv) 10guard_get_cv (pTHX_ SV *cb_sv)
9{ 11{
10 HV *st; 12 HV *st;
63 guard_free 65 guard_free
64}; 66};
65 67
66MODULE = Guard PACKAGE = Guard 68MODULE = Guard PACKAGE = Guard
67 69
70BOOT:
71 guard_stash = gv_stashpv ("Guard", 1);
72
73void
74CLONE (...)
75 PROTOTYPE: @
76 CODE:
77 guard_stash = gv_stashpv ("Guard", 1);
78
68void 79void
69scope_guard (SV *block) 80scope_guard (SV *block)
70 PROTOTYPE: & 81 PROTOTYPE: &
71 CODE: 82 CODE:
72 LEAVE; /* unfortunately, perl sandwiches XS calls into ENTER/LEAVE */ 83 LEAVE; /* unfortunately, perl sandwiches XS calls into ENTER/LEAVE */
81 SV *cv = guard_get_cv (aTHX_ block); 92 SV *cv = guard_get_cv (aTHX_ block);
82 SV *guard = NEWSV (0, 0); 93 SV *guard = NEWSV (0, 0);
83 SvUPGRADE (guard, SVt_PVMG); 94 SvUPGRADE (guard, SVt_PVMG);
84 sv_magicext (guard, cv, PERL_MAGIC_ext, &guard_vtbl, 0, 0); 95 sv_magicext (guard, cv, PERL_MAGIC_ext, &guard_vtbl, 0, 0);
85 RETVAL = newRV_noinc (guard); 96 RETVAL = newRV_noinc (guard);
97 SvOBJECT_on (guard);
98 ++PL_sv_objcount;
99 SvSTASH_set (guard, (HV*)SvREFCNT_inc ((SV *)guard_stash));
86} 100}
87 OUTPUT: 101 OUTPUT:
88 RETVAL 102 RETVAL
89 103
90void 104void

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines