1 /* This file is part of the Sub::Op Perl module.
2 * See http://search.cpan.org/dist/Sub-Op/ */
4 #define PERL_NO_GET_CONTEXT
9 #define __PACKAGE__ "Sub::Op::LexicalSub"
10 #define __PACKAGE_LEN__ (sizeof(__PACKAGE__)-1)
14 STATIC HV *sols_map = NULL;
16 STATIC OP *sols_check(pTHX_ OP *o, void *ud_) {
17 char buf[sizeof(void*)*2+1];
20 (void) hv_store(sols_map, buf, sprintf(buf, "%"UVxf, PTR2UV(o)), cb, 0);
25 STATIC OP *sols_ref(pTHX_ OP *o, void *ud_) {
28 return newSVOP(OP_ANONCODE, o->op_flags & ~OPf_KIDS, cb);
31 STATIC OP *sols_pp(pTHX) {
37 char buf[sizeof(void*)*2+1];
39 svp = hv_fetch(sols_map, buf, sprintf(buf, "%"UVxf, PTR2UV(PL_op)), 0);
48 return CALL_FPTR(PL_ppaddr[OP_ENTERSUB])(aTHX);
51 /* --- XS ------------------------------------------------------------------ */
53 MODULE = Sub::Op::LexicalSub PACKAGE = Sub::Op::LexicalSub
63 _init(SV *name, SV *cb)
70 if (SvTYPE(cb) >= SVt_PVCV) {
72 c.name = SvPV_const(name, c.namelen);
73 if (SvPOK(cb)) { /* Sub is prototyped */
74 c.proto = SvPV_const(cb, c.protolen);
78 c.ud = SvREFCNT_inc(cb);
80 sub_op_register(aTHX_ &c, 0);