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()
可以依要求匯出。不建議使用函式介面。
傳回一個新的、空的 XS 解析器/編譯器物件。
此方法處理 XS 檔案並將輸出傳送至 C 檔案。此方法可作為函式呼叫(這是舊式介面),然後會使用單例作為呼叫者。
命名參數控制處理方式。接受下列參數
將 extern "C"
新增至 C 程式碼。預設為 false。
保留類型名稱中的 ::
,以便可以對應 C++ 層級類型。預設為 false。
將例外處理程式碼片段新增至 C 程式碼。預設為 false。
表示使用者提供的 typemap 應優先於預設 typemap。可以將單一 typemap 指定為字串,或是在陣列參考中指定多個 typemap,其中最後一個 typemap 具有最高優先權。
為所有 xsub 產生原型程式碼。預設為 false。
在執行時確保物件檔案(衍生自 .xs
檔案)和 .pm
檔案具有相同的版本號碼。預設為 true。
將 #line
指令新增至 C 輸出,以便錯誤訊息看起來像是來自原始 XS 檔案。預設為 true。
啟用特定最佳化。目前受影響的唯一最佳化是輸出 C 程式碼使用 target(請參閱 perlguts)。未最佳化可能會大幅降低產生程式碼的速度,但這是 5.005 及更早版本 xsubpp 的運作方式。預設為最佳化。
啟用辨識 IN
、OUT_LIST
和 INOUT_LIST
宣告。預設為 true。
啟用對類似 ANSI 的函數簽章描述的辨識。預設為 true。
維護人員備註:我不知道這會做什麼。移除函數前綴?
通常,ExtUtils::ParseXS 會在透過 (warn) 將例外情況的詳細資料列印到 STDERR 之後,以 exit(1)
終止程式。當以程式方式使用,而非透過 xsubpp 使用時,這可能會很尷尬,因此可以透過提供 true 值來使用此選項,使其改為 die。如果未提供,這會預設為 $ExtUtils::ParseXS::DIE_ON_ERROR
的值,而後者又預設為 false。
此方法傳回處理 XS 檔案期間遇到的 [某種類型的] 錯誤數量。
這個方法可以作為函數呼叫(這是舊式介面),然後會使用單例作為呼叫者。
根據 Larry Wall 編寫的 xsubpp 程式碼。
維護人員
Ken Williams,<ken@mathforum.org>
David Golden,<dagolden@cpan.org>
James Keenan,<jkeenan@cpan.org>
Steffen Mueller,<smueller@cpan.org>
2002-2014 年的版權所有權人為 Ken Williams、David Golden 和其他貢獻者。保留所有權利。
此函式庫是免費軟體;您可以在與 Perl 相同的條款下重新散布或修改它。
根據 Larry Wall 和 Perl 5 Porters 的 ExtUtils::xsubpp
程式碼,並在相同的授權條款下發布。