如何从 XS访问当前上下文



当用户从包中调用XSmain::我们不能使用

caller_cx(0, NULL);

因为没有用于main::XSUB DOC 的帧

请注意,XSUB 没有堆栈帧,因此 C 将返回紧随其后的 Perl 代码的信息。

如何获取调用XSUBfile:line信息、main::范围的提示等信息?

mess_sv复制(由 Perl API 函数 warncroak 调用,它们附加行信息,如 Perl 函数 warndie(:

use strict;
use warnings;
use feature qw( say );
use Inline C => <<'__EOS__';
void testing() {
    dXSARGS;
    /*
     * Try and find the file and line for PL_op.  This will usually be
     * PL_curcop, but it might be a cop that has been optimised away.  We
     * can try to find such a cop by searching through the optree star ting
     * from the sibling of PL_curcop.
     */
    if (PL_curcop) {
        const COP *cop =
            Perl_closest_cop(aTHX_ PL_curcop, OpSIBLING(PL_curcop), PL_op, FALSE);
        if (!cop)
            cop = PL_curcop;
        if (CopLINE(cop)) {
            EXTEND(SP, 2);
            mPUSHs(newSVpv(OutCopFILE(cop), 0));
            mPUSHs(newSViv((IV)CopLINE(cop)));
            XSRETURN(2);
        }
    }
    XSRETURN(0);
}
__EOS__
say join ":", testing();

关于PL_curcop这里的一点。

相关内容

  • 没有找到相关文章

最新更新