SPVMエクスチェンジAPI仕様がこのドキュメントには記述されています。SPVMは、1.0のリリースに向けて、ベータテスト中です。SPVMエクスチェンジAPI仕様は、警告なく変更されることがあります。
最終更新日 2019年4月25日
SPVMエクスチェンジAPIとは、PerlとSPVMのデータ構造を変換、PerlからSPVMのサブルーチンを呼び出すためのAPIのことです。
SPVMで作成されたモジュールは、コンパイル終了後に、Perlのモジュールとして、そのまま実行できるようになります。
SPVM::Byte->newメソッドを使うと、Perlのスカラ値をSPVMのSPVM::Byte型に変換できます。
my $spvm_byte = SPVM::Byte->new(98);
Perlのスカラ値は、perlapiとC99の型変換による以下の変換によって、SPVMのbyte型に変換され、その値が、SPVM::Byteのnewメソッドに渡され、SPVM::Byte型のオブジェクトが返されます。
(int8_t)SvIV(sv_value)
SPVM::Short->newメソッドを使うと、Perlのスカラ値をSPVMのSPVM::Short型に変換できます。
my $spvm_short = SPVM::Short->new(9800);
Perlのスカラ値は、perlapiとC99の型変換による以下の変換によって、SPVMのshort型に変換され、その値が、SPVM::Shortのnewメソッドに渡され、SPVM::Short型のオブジェクトが返されます。
(int16_t)SvIV(sv_value)
SPVM::Int->newメソッドを使うと、Perlのスカラ値をSPVMのSPVM::Int型に変換できます。
my $spvm_int = SPVM::Int->new(100000);
Perlのスカラ値は、perlapiとC99の型変換による以下の変換によって、SPVMのint型に変換され、その値が、SPVM::Intのnewメソッドに渡され、SPVM::Int型のオブジェクトが返されます。
(int32_t)SvIV(sv_value)
SPVM::Long->newメソッドを使うと、Perlのスカラ値をSPVMのSPVM::Long型に変換できます。
my $spvm_long = SPVM::Long->new(98);
Perlのスカラ値は、perlapiとC99の型変換による以下の変換によって、SPVMのlong型に変換され、その値が、SPVM::Longのnewメソッドに渡され、SPVM::Long型のオブジェクトが返されます。
(int64_t)SvIV(sv_value)
SPVM::Float->newメソッドを使うと、Perlのスカラ値をSPVMのSPVM::Float型に変換できます。
my $spvm_float = SPVM::Float->new(2.5);
Perlのスカラ値は、perlapiとC99の型変換による以下の変換によって、SPVMのfloat型に変換され、その値が、SPVM::Floatのnewメソッドに渡され、SPVM::Float型のオブジェクトが返されます。
(float)SvNV(sv_value)
SPVM::Double->newメソッドを使うと、Perlのスカラ値をSPVMのSPVM::Double型に変換できます。
my $spvm_double = SPVM::Double->new(2.5);
Perlのスカラ値は、perlapiとC99の型変換による以下の変換によって、SPVMのdouble型に変換され、その値が、SPVM::Doubleのnewメソッドに渡され、SPVM::Double型のオブジェクトが返されます。
(double)SvNV(sv_value)
SPVM::new_barray関数を使うと、Perlの配列リファレンスをSPVMのbyte[]型に変換することができます。
my $spvm_nums = SPVM::new_barray([1, 2, 3]);
第一引数に配列のリファレンスを受け取ります。
配列のリファレンスのそれぞれの要素の値は、Perlのスカラ値から、perlapiとC99の型変換による以下の変換によって、SPVMのbyte型に変換されます。
(int8_t)SvIV(sv_value)
戻り値は、SPVMの「byte[]」型を表現した「SPVM::Data::Array」オブジェクトです。
第一引数が未定義値だった場合は、未定義値が返ります。
SPVM::new_sarray関数を使うと、Perlの配列リファレンスをSPVMのshort[]型に変換することができます。
my $spvm_nums = SPVM::new_sarray([1, 2, 3]);
第一引数に配列のリファレンスを受け取ります。
配列のリファレンスのそれぞれの要素の値は、Perlのスカラ値から、perlapiとC99の型変換による以下の変換によって、SPVMのshort型に変換されます。
(int16_t)SvIV(sv_value)
戻り値は、SPVMの「short[]」型を表現した「SPVM::Data::Array」オブジェクトです。
第一引数が未定義値だった場合は、未定義値が返ります。
SPVM::new_iarray関数を使うと、Perlの配列リファレンスをSPVMのint[]型に変換することができます。
my $spvm_nums = SPVM::new_iarray([1, 2, 3]);
第一引数に配列のリファレンスを受け取ります。
配列のリファレンスのそれぞれの要素の値は、Perlのスカラ値から、perlapiとC99の型変換による以下の変換によって、SPVMのint型に変換されます。
(int32_t)SvIV(sv_value)
戻り値は、SPVMの「int[]」型を表現した「SPVM::Data::Array」オブジェクトです。
第一引数が未定義値だった場合は、未定義値が返ります。
SPVM::new_larray関数を使うと、Perlの配列リファレンスをSPVMのlong[]型に変換することができます。
my $spvm_nums = SPVM::new_larray([1, 2, 3]);
第一引数に配列のリファレンスを受け取ります。
配列のリファレンスのそれぞれの要素の値は、Perlのスカラ値から、perlapiとC99の型変換による以下の変換によって、SPVMのlong型に変換されます。
(int64_t)SvIV(sv_value)
戻り値は、SPVMの「long[]」型を表現した「SPVM::Data::Array」オブジェクトです。
第一引数が未定義値だった場合は、未定義値が返ります。
SPVM::new_farray関数を使うと、Perlの配列リファレンスをSPVMのfloat[]型に変換することができます。
my $spvm_nums = SPVM::new_farray([1, 2, 3]);
第一引数に配列のリファレンスを受け取ります。
配列のリファレンスのそれぞれの要素の値は、Perlのスカラ値から、perlapiとC99の型変換による以下の変換によって、SPVMのfloat型に変換されます。
(float)SvNV(sv_value)
戻り値は、SPVMの「float[]」型を表現した「SPVM::Data::Array」オブジェクトです。
第一引数が未定義値だった場合は、未定義値が返ります。
SPVM::new_darray関数を使うと、Perlの配列リファレンスをSPVMのdouble[]型に変換することができます。
my $spvm_nums = SPVM::new_darray([1, 2, 3]);
第一引数に配列のリファレンスを受け取ります。
配列のリファレンスのそれぞれの要素の値は、Perlのスカラ値から、perlapiとC99の型変換による以下の変換によって、SPVMのdouble型に変換されます。
(double)SvNV(sv_value)
戻り値は、SPVMの「double[]」型を表現した「SPVM::Data::Array」オブジェクトです。
第一引数が未定義値だった場合は、未定義値が返ります。