在perl的特殊标记一样__PACKAGE__,__SUB__,__FILE__,__LINE__存在并可以从脚本.
我可能会得到的值__PACKAGE__从XS作为HvNAME( PL_currstash ),我想.
但如何访问他人?
是否有特殊的界面来访问所有这些XS?我爱:CTX->package,CTX->sub等等.
为了获得当前的上下文,我找到了caller_cx函数perlapi.但是没有结构描述.在perl源代码中perl.h我只能找到这个typedef:
typedef struct context PERL_CONTEXT;
Run Code Online (Sandbox Code Playgroud)
是否有示例如何使用此结构返回caller_cx来从XS查找当前包?
当Devel::Peek我倾倒perl SV时,我可以看到:
SV = IV(0x1c13168) at 0x1c13178
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 2
Run Code Online (Sandbox Code Playgroud)
但找不到描述是什么pIOK意思.
我想看看它在Devel::Peek,perlapi,perlguts,perlxs...在来源,我发现:
{SVp_IOK, "pIOK,"}
Run Code Online (Sandbox Code Playgroud)
但还是找不到什么SVp_IOK.它是什么?
UPD
我找到了这个文件.它揭示了旗帜的含义以及它们所处的位置.(要小心这个DOC已经过时了)
此标志指示对象具有有效的非公共IVX字段值.它只能为值类型SvIV或其子类型设置.
UPD