X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FSub-Op.git;a=blobdiff_plain;f=t%2FSub-Op-LexicalSub%2FLexicalSub.xs;h=62e83f833b485b36adcf21c1ab2266bbe4517d1d;hp=a9b1344bba9b998a7f4033d52f30d7060dfede8f;hb=302bf09fbd4b673e199bdd22b330ebbdbec4e1fe;hpb=b9c3a456f75424383f35cb83000965d76e56d4ed diff --git a/t/Sub-Op-LexicalSub/LexicalSub.xs b/t/Sub-Op-LexicalSub/LexicalSub.xs index a9b1344..62e83f8 100644 --- a/t/Sub-Op-LexicalSub/LexicalSub.xs +++ b/t/Sub-Op-LexicalSub/LexicalSub.xs @@ -22,6 +22,12 @@ STATIC OP *sols_check(pTHX_ OP *o, void *ud_) { return o; } +STATIC OP *sols_ref(pTHX_ OP *o, void *ud_) { + SV *cb = ud_; + + return newSVOP(OP_ANONCODE, o->op_flags & ~OPf_KIDS, cb); +} + STATIC OP *sols_pp(pTHX) { dSP; SV *cb; @@ -63,10 +69,14 @@ PPCODE: cb = SvRV(cb); if (SvTYPE(cb) >= SVt_PVCV) { sub_op_init(&c); - c.name = SvPV_const(name, c.namelen); - c.check = sols_check; - c.ud = SvREFCNT_inc(cb); - c.pp = sols_pp; + c.name = SvPV_const(name, c.namelen); + if (SvPOK(cb)) { /* Sub is prototyped */ + c.proto = SvPV_const(cb, c.protolen); + } + c.check = sols_check; + c.ref = sols_ref; + c.ud = SvREFCNT_inc(cb); + c.pp = sols_pp; sub_op_register(aTHX_ &c, 0); } }