目錄

名稱

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 會透過嵌入必要的建構,讓 C 函式可以操作 Perl 值,並建立必要的連結,讓 Perl 可以存取這些函式,將 XS 程式碼編譯成 C 程式碼。編譯器會使用型別對應表來決定如何將 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

表示使用者提供的 typemap 應優先於預設 typemap。可以將單一 typemap 指定為字串,或是在陣列參考中指定多個 typemap,其中最後一個 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 使用時,這可能會很尷尬,因此可以透過提供 true 值來使用此選項,使其改為 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