gpt4 book ai didi

perl - 为什么不调用回调?

转载 作者:行者123 更新时间:2023-12-03 20:21:18 25 4
gpt4 key购买 nike

我有来自 B::OPCheck 的示例脚本修改后的模块 PL_op_name padsv

use B::Generate;

use B::OPCheck padsv => check => sub {
my $op = shift;
print "HERE";
};

my $x;
1;

但是没有调用回调。

当 deparsing 这个程序时,我可以看到这个 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]

为什么不调用回调?

更新
好像 here是答案:

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



但是在哪里可以找到将通过检查功能过滤的操作列表?

最佳答案

我已经知道接下来的事情了。我应该做

wrap_op_checker(OP_PADANY, my_check, &old_checker);

代替:
wrap_op_checker(OP_PADSV, my_check, &old_checker);

因为这种类型的 OP 未创建 .在那一步是 OP_PADANY被转换 进入 OP_PADSVPerl_newSVREF Perl_yyparse+0x1834 某处调用.

因此,由于这种转换,我们无法 Hook OP_PADSV
更新
此行为不对应 DOC

A check routine is called when the node is fully constructed

关于perl - 为什么不调用回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42455755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com