【问题标题】:Where I can find the types of op that are filtered by PL_check?在哪里可以找到 PL_check 过滤的操作类型?
【发布时间】:2017-02-28 06:57:43
【问题描述】:

PL_check 是 Perl 公共 API 公开的变量:

由操作码索引的函数数组,这些函数将在 Perl 代码编译期间为 optree 构建的“检查”阶段调用。对于大多数(但不是全部)类型的操作,一旦操作被初始构建并填充了子操作,它将通过此​​数组的适当元素引用的检查函数进行过滤。

在源代码的哪里可以看到哪些类型的操作码会被过滤?

【问题讨论】:

    标签: perl perlapi


    【解决方案1】:

    您可以检查所有类型的操作。如上所说,它是一个由操作码索引的数组。

    如果您想知道哪些操作具有检查器,这可能会根据您加载的模块而有所不同。例如,autovivificationOP_PADANY, OP_PADSV, OP_AELEM, OP_HELEM, OP_RV2SV, OP_RV2AV, OP_RV2HV, OP_ASLICE, OP_HSLICE, OP_EXISTS, OP_DELETE, OP_KEYSOP_VALUES。 (其中一些可能已经有检查器,在这种情况下,autovivifaction 的新检查器将调用旧检查器。)

    您可以通过查看opcode.hPL_check 的定义(由opcode.pl 生成)来查找哪些操作具有内置检查器。

    【讨论】:

    • 谢谢。现在我有answer 来回答我的问题。
    • 我看不出这如何帮助回答您的其他问题,但太棒了!这是你从自动复活中学到的东西吗?
    • 不,我没有看过自动复活,而是通过手动追踪来完成的。 (见example)但现在我看到了非常有用的评论:Sadly, the padsv OPs we are interested in don't trigger the padsv check function 上面的线索。基于此,我可能会解决另一个我的question
    猜你喜欢
    • 2016-09-02
    • 1970-01-01
    • 2011-12-06
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 2013-12-26
    相关资源
    最近更新 更多