SPVM::Document::Extension - C/C++ Binding using SPVM Extension(BETA before 1.0)
If you use the feature Runtime Compile Native Function, you can write program using C language in runtime. This is similar with Extension::C, but SPVM implement this feature by default.
# SPVM/TestCase/Extension.spvm package TestCase::Extension { native sub sum : int ($num1 : int, $num2 : int); } // SPVM/TestCase/Extension.native/Extension.c #include <spvm_api.h> int32_t SPVM__TestCase__Extension__sum(SPVM_API* api, SPVM_API_VALUE* args) { int32_t total = args[0].int_value + args[1].int_value; return total; }
At first, you specify native descripter at SPVM subroutine.
native
package TestCase::Extension { # native descripter native sub sum : int ($num1 : int, $num2 : int); }
Next, you create "SPVM/TestCase/Extension/Extension.c" file
SPVM/TestCase/Extension.spvm SPVM/TestCase/Extension.native/Extension.c
Next, you write C language. You include spvm_api.h.
spvm_api.h
#include <spvm_api.h>
C Function name must be replace : with <_> and add SPVM__ to top of SPVM subroutine name. SPVM subroutine absolute name is TestCase::Extension::sum. C function name is SPVM__TestCase__Extension__sum.
:
SPVM__
TestCase::Extension::sum
SPVM__TestCase__Extension__sum
int32_t SPVM__TestCase__Extension__sum(SPVM_API* api, SPVM_API_VALUE* args) { int32_t total = args[0].int_value + args[1].int_value; return total; }
First argument is api. This is the pointer to SPVM_API. Second argument is args. This is array of SPVM_API_VALUE.
api
SPVM_API
args
SPVM_API_VALUE
SPVM_API_VALUE is union of C language. If you want to get int value, you do the followng.
args[0].int_value
You can get all type of value by the following member.
args[0].byte_value args[0].short_value args[0].int_value args[0].long_value args[0].float_value args[0].double_value args[0].object_value
Type of return value is corresponding the folloing type.
[SPVM] [C] byte int8_t short int16_t int int32_t long int64_t float float double double [Object value] SPVM_API_OBJECT*
To install SPVM, copy and paste the appropriate command in to your terminal.
cpanm
cpanm SPVM
CPAN shell
perl -MCPAN -e shell install SPVM
For more information on module installation, please visit the detailed CPAN module installation guide.