I have the example script from B::OPCheck module with modified PL_op_name
to padsv
use B::Generate;
use B::OPCheck padsv => check => sub {
my $op = shift;
print "HERE";
};
my $x;
1;
But callback is not called.
When deparsing this program I can see this OP
:
$perl -Ilib -Iblib/arch -MO=Terse ~/tmp/xs.pl
LISTOP (0x19828f0) leave [1]
OP (0x1c27ef0) enter
COP (0x1982938) nextstate
OP (0x1982998) padsv [1] <<<< HERE IT IS
COP (0x1c27f38) nextstate
OP (0x1c27f98) null [5]
Why callback is not called?
UPD
It seems here is the answer:
For most (but not all) types of op, once the op has been initially built and populated with child ops it will be filtered through the check function referenced by the appropriate element of this array
But where to find the list of ops which will be filtered through the check function?
I have find out next thing. I should do
Instead of:
Because OP of this type is not created. At that step it is
OP_PADANY
and is transformed intoOP_PADSV
atPerl_newSVREF
which is called somewhere fromPerl_yyparse+0x1834
.So because of this transformation we can not hook
OP_PADSV
UPD
This behavior do not correspond to the DOC