内容

名称

ExtUtils::ParseXS - 将 Perl XS 代码转换为 C 代码

语法

use ExtUtils::ParseXS;

my $pxs = ExtUtils::ParseXS->new;
$pxs->process_file( filename => 'foo.xs' );

$pxs->process_file( filename => 'foo.xs',
                    output => 'bar.c',
                    'C++' => 1,
                    typemap => 'path/to/typemap',
                    hiertype => 1,
                    except => 1,
                    versioncheck => 1,
                    linenumbers => 1,
                    optimize => 1,
                    prototypes => 1,
                    die_on_error => 0,
                  );

# Legacy non-OO interface using a singleton:
use ExtUtils::ParseXS qw(process_file);
process_file( filename => 'foo.xs' );

描述

ExtUtils::ParseXS 会通过嵌入必要的构造来编译 XS 代码为 C 代码,以便 C 函数可以操作 Perl 值,并创建必要的胶水代码,以便 Perl 可以访问这些函数。编译器使用类型映射来确定如何将 C 函数参数和变量映射到 Perl 值。

编译器会搜索名为 typemap 的类型映射文件。它会使用以下搜索路径来查找默认类型映射,最右边的类型映射优先。

../../../typemap:../../typemap:../typemap:typemap

导出

默认情况下没有。process_file() 和/或 report_error_count() 可以根据请求导出。不建议使用函数接口。

方法

$pxs->new()

返回一个新的空 XS 解析器/编译器对象。

$pxs->process_file()

此方法处理 XS 文件并将输出发送到 C 文件。此方法可作为函数调用(这是旧版接口),然后将使用单例作为调用者。

命名参数控制处理方式。接受以下参数

C++

extern "C" 添加到 C 代码。默认为 false。

hiertype

在类型名称中保留 ::,以便可以映射 C++ 层次结构类型。默认为 false。

except

将异常处理存根添加到 C 代码。默认为 false。

typemap

表示用户提供的类型映射应优先于默认类型映射。可以将单个类型映射指定为字符串,也可以在数组引用中指定多个类型映射,其中最后一个类型映射具有最高优先级。

prototypes

为所有 xsub 生成原型代码。默认为 false。

versioncheck

确保在运行时,对象文件(源自 .xs 文件)和 .pm 文件具有相同的版本号。默认为 true。

linenumbers

#line 指令添加到 C 输出,以便错误消息看起来像是来自原始 XS 文件。默认为 true。

optimize

启用某些优化。目前唯一受影响的优化是输出 C 代码使用 target(请参阅 perlguts)。不优化可能会显著降低生成代码的速度,但这是 5.005 及更早版本的 xsubpp 的操作方式。默认为优化。

inout

启用对 INOUT_LISTINOUT_LIST 声明的识别。默认为 true。

argtypes

启用对函数签名的类似 ANSI 的描述的识别。默认为 true。

s

维护者注:我不知道它有什么作用。删除函数前缀?

die_on_error

通常,ExtUtils::ParseXS 会在通过 (warn) 向 STDERR 打印异常详细信息后,使用 exit(1) 终止程序。当以编程方式使用它而不是通过 xsubpp 使用它时,这可能会很尴尬,因此可以使用此选项通过提供真值来让它改为 die。如果未提供,则默认为 $ExtUtils::ParseXS::DIE_ON_ERROR 的值,而后者又默认为 false。

$pxs->report_error_count()

此方法返回在处理 XS 文件期间遇到的 [某种类型的] 错误的数量。

该方法可以作为函数调用(这是旧版接口),然后将使用单例作为调用者。

作者

基于 Larry Wall 编写的 xsubpp 代码。

由以下人员维护

版权

版权所有 2002-2014 Ken Williams、David Golden 和其他贡献者。保留所有权利。

此库是免费软件;您可以在与 Perl 本身相同的条款下重新分发和/或修改它。

基于 Larry Wall 和 Perl 5 Porters 的 ExtUtils::xsubpp 代码,该代码在相同的许可条款下发布。

另请参阅

perl、ExtUtils::xsubpp、ExtUtils::MakeMaker、perlxsperlxstut