From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

=head1 Name
SPVM::Document::NativeAPI - Native APIs
=head1 Description
The native APIs in L<SPVM> are the APIs written by the C language for SPVM operations.
These APIs are available in L<native classes|SPVM::Document::NativeClass>.
=head1 Native APIs
=head2 runtime
L<void* runtime|SPVM::Document::NativeAPI::Runtime>;
The runtime for this L<runtime environment|SPVM::Document::NativeClass/"Runtime Environment">.
Examples:
void* runtime = env->runtime;
=head2 api
C<SPVM_ENV_API* api;>
Returns C<SPVM_ENV_API> object. This object have the following fields for other native APIs.
=over 2
=item * L<SPVM_API_ALLOCATOR* allocator|SPVM::Document::NativeAPI::Allocator>
=item * L<SPVM_API_STRING_BUFFER* string_buffer|SPVM::Document::NativeAPI::StringBuffer>
=item * L<SPVM_API_COMPILER* compiler|SPVM::Document::NativeAPI::Compiler>
=item * L<SPVM_API_CLASS_FILE* class_file|SPVM::Document::NativeAPI::ClassFile>
=item * L<SPVM_API_RUNTIME* runtime|SPVM::Document::NativeAPI::Runtime>
=item * L<SPVM_API_BASIC_TYPE* basic_type|SPVM::Document::NativeAPI::BasicType>
=item * L<SPVM_API_CLASS_VAR* class_var|SPVM::Document::NativeAPI::ClassVariable>
=item * L<SPVM_API_FIELD* field|SPVM::Document::NativeAPI::Field>
=item * L<SPVM_API_METHOD* method|SPVM::Document::NativeAPI::Method>
=item * L<SPVM_API_ARG* arg|SPVM::Document::NativeAPI::Argument>
=item * L<SPVM_API_TYPE* type|SPVM::Document::NativeAPI::Type>
=item * L<SPVM_API_INTERNAL* internal|SPVM::Document::NativeAPI::Internal>
=item * L<SPVM_API_MUTEX* mutex|SPVM::Document::NativeAPI::Mutex>
=back
Examples:
SPVM_API_BASIC_TYPE* api_basic_type = env->api->basic_type;
=head2 new_env
C<SPVM_ENV* (*new_env)();>
Creates a new L<runtime environment|SPVM::Document::NativeClass/"Runtime Environment">.
This native API should not be used unless special purposes are intended.
=head2 free_env
C<void (*free_env)(SPVM_ENV* env);>
Frees the L<runtime environment|SPVM::Document::NativeClass/"Runtime Environment"> I<env>.
This native API should not be used unless special purposes are intended.
=head2 call_init_methods
C<int32_t (*call_init_methods)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">);>
Calls C<INIT> blocks of all classes.
If an exception is thrown, returns a non-zero value. Otherwise, returns 0.
This native API should not be used unless special purposes are intended.
=head2 set_command_info_program_name
C<int32_t (*set_command_info_program_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* obj_program_name);>
Sets the program name I<obj_program_name> to L<CommandInfo#PROGRAM_NAME|SPVM::CommandInfo/"PROGRAM_NAME"> class variable.
If an exception is thrown, returns a non-zero value. Otherwise, returns 0.
This native API should not be used unless special purposes are intended.
=head2 set_command_info_argv
C<int32_t (*set_command_info_argv)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* obj_argv);>
Sets the command line arguments I<obj_argv> to L<CommandInfo#ARGV|SPVM::CommandInfo/"ARGV"> class variable.
If an exception is thrown, returns a non-zero value. Otherwise, returns 0.
This native API should not be used unless special purposes are intended.
=head2 set_command_info_basetime
C<int32_t (*set_command_info_basetime)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int64_t base_time);>
Sets the base time I<base_time> to L<CommandInfo#BASE_TIME|SPVM::CommandInfo/"BASE_TIME"> class variable.
If an exception is thrown, returns a non-zero value. Otherwise, returns 0.
This native API should not be used unless special purposes are intended.
=head2 destroy_class_vars
C<void (*destroy_class_vars)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">);>
Sets all class variables of all classes that is a object type to undef.
This native API should not be used unless special purposes are intended.
=head2 args_width
C<int32_t (*args_width)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">);>
Returns the L<width of the arguments|SPVM::Document::NativeClass/"Arguments Width"> given by the caller.
Examples:
int32_t args_width = env->args_width(env, stack);
=head2 get_object_basic_type
C<void* (*get_object_basic_type)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
Returns the L<basic type|SPVM::Document::NativeAPI::BasicType> of the object I<object>.
=head2 get_object_basic_type_id
C<int32_t (*get_object_basic_type_id)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
Returns the basic type ID of the object I<object>.
=head2 get_object_basic_type_name
C<const char* (*get_object_basic_type_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
Returns the basic type name of the object I<object>.
=head2 get_object_type_dimension
C<int32_t (*get_object_type_dimension)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
Returns the type dimension of the object I<object>.
=head2 get_basic_type
C<void* (*get_basic_type)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name);>
Searches a L<basic type|SPVM::Document::NativeAPI::BasicType> given the basic type name I<basic_type_name>.
If it is found, returns it. Otherwise, returns C<NULL>.
=head2 get_basic_type_by_name
C<void* (*get_basic_type_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Searches a L<basic type|SPVM::Document::NativeAPI::BasicType> given the basic type name I<basic_type_name>.
If it is found, returns it. Otherwise, an exception is thrown.
The function name I<func_name>, the file path I<file>, and the line number I<line> must be given for the exception stack trace.
If the basic type given by I<basic_type_name> is not found, an exception is thrown.
If an exception is thrown, C<error_id> is set to a non-zero value. Otherwise, it is set to 0.
=head2 get_basic_type_by_id
C<void* (*get_basic_type_by_id)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t basic_type_id);>
Searches a L<basic type|SPVM::Document::NativeAPI::BasicType> given the basic type ID I<basic_type_id>.
If it is found, returns it. Otherwise, returns C<NULL>.
=head2 get_basic_type_id
C<int32_t (*get_basic_type_id)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name);>
Searches a basic type given the basic type name I<basic_type_name>.
If it is found, returns the basic type id of it. Otherwise, returns a negative value.
Examples:
int32_t basic_type_id = env->get_basic_type_id(env, stack, "Int");
=head2 get_basic_type_id_by_name
C<int32_t (*get_basic_type_id_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Searches a basic type ID given the basic type name I<basic_type_name>.
The function name I<func_name>, the file path I<file>, and the line number I<line> must be given for the exception stack trace.
If the basic type given by I<basic_type_name> is not found, an exception is thrown.
If an exception is thrown, C<error_id> is set to a non-zero value. Otherwise, it is set to 0.
=head2 get_class_var
C<void* (*get_class_var)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* class_var_name);>
Searches a L<class variable|SPVM::Document::NativeAPI::ClassVariable> given the basic type name I<basic_type_name> and the class variable name I<class_var_name>.
If it is found, returns it. Otherwise, returns C<NULL>.
Examples:
void* class_var = env->get_class_var(env, stack, "MyClass", "$VAR");
=head2 get_class_var_byte
C<int8_t (*get_class_var_byte)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* class_var|SPVM::Document::NativeAPI::ClassVariable>);>
Returns the value of the class variable I<class_var> interpreting its type is byte type.
=head2 get_class_var_short
C<int16_t (*get_class_var_short)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* class_var|SPVM::Document::NativeAPI::ClassVariable>);>
Returns the value of the class variable I<class_var> interpreting its type is short type.
=head2 get_class_var_int
C<int32_t (*get_class_var_int)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* class_var|SPVM::Document::NativeAPI::ClassVariable>);>
Returns the value of the class variable I<class_var> interpreting its type is int type.
=head2 get_class_var_long
C<int64_t (*get_class_var_long)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* class_var|SPVM::Document::NativeAPI::ClassVariable>);>
Returns the value of the class variable I<class_var> interpreting its type is long type.
=head2 get_class_var_float
C<float (*get_class_var_float)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* class_var|SPVM::Document::NativeAPI::ClassVariable>);>
Returns the value of the class variable I<class_var> interpreting its type is float type.
=head2 get_class_var_double
C<double (*get_class_var_double)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* class_var|SPVM::Document::NativeAPI::ClassVariable>);>
Returns the value of the class variable I<class_var> interpreting its type is double type.
=head2 get_class_var_object
C<void* (*get_class_var_object)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* class_var|SPVM::Document::NativeAPI::ClassVariable>);>
Returns the value of the class variable I<class_var> interpreting its type is an object type.
=head2 get_class_var_string
C<void* (*get_class_var_string)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* class_var|SPVM::Document::NativeAPI::ClassVariable>);>
Returns the value of the class variable I<class_var> interpreting its type is string type.
=head2 set_class_var_byte
C<void (*set_class_var_byte)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* class_var|SPVM::Document::NativeAPI::ClassVariable>, int8_t value);>
Sets I<value> to the class variable I<class_var> interpreting its type is byte type.
=head2 set_class_var_short
C<void (*set_class_var_short)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* class_var|SPVM::Document::NativeAPI::ClassVariable>, int16_t value);>
Sets I<value> to the class variable I<class_var> interpreting its type is short type.
=head2 set_class_var_int
C<void (*set_class_var_int)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* class_var|SPVM::Document::NativeAPI::ClassVariable>, int32_t value);>
Sets I<value> to the class variable I<class_var> interpreting its type is int type.
=head2 set_class_var_long
C<void (*set_class_var_long)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* class_var|SPVM::Document::NativeAPI::ClassVariable>, int64_t value);>
Sets I<value> to the class variable I<class_var> interpreting its type is long type.
=head2 set_class_var_float
C<void (*set_class_var_float)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* class_var|SPVM::Document::NativeAPI::ClassVariable>, float value);>
Sets I<value> to the class variable I<class_var> interpreting its type is float type.
=head2 set_class_var_double
C<void (*set_class_var_double)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* class_var|SPVM::Document::NativeAPI::ClassVariable>, double value);>
Sets I<value> to the class variable I<class_var> interpreting its type is double type.
=head2 set_class_var_object
C<void (*set_class_var_object)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* class_var|SPVM::Document::NativeAPI::ClassVariable>, void* value);>
Sets I<value> to the class variable I<class_var> interpreting its type is an object type.
=head2 set_class_var_string
C<void (*set_class_var_string)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* class_var|SPVM::Document::NativeAPI::ClassVariable>, void* value);>
Sets I<value> to the class variable I<class_var> interpreting its type is string type.
=head2 get_class_var_object_ref
C<void** (*get_class_var_object_ref)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* class_var|SPVM::Document::NativeAPI::ClassVariable>);>
Returns the address where the value of the class variable I<class_var> is stored.
=head2 get_class_var_byte_by_name
C<int8_t (*get_class_var_byte_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* class_var_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Gets the value of the class variable specified by the basic type name I<basic_type_name> and the class variable name I<class_var_name>, and returns the value.
The type of the filed must be C<byte> type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<basic_type_name> is not found, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<class_var_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the class variable type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
int8_t value = env->get_class_var_byte_by_name(env, stack, "TestCase::NativeAPI", "$BYTE_VALUE", &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 get_class_var_short_by_name
C<int16_t (*get_class_var_short_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* class_var_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Gets the value of the class variable specified by the basic type name I<basic_type_name> and the class variable name I<class_var_name>, and returns the value casting to C<short> type.
The type of the filed must be C<short> type or smaller numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<basic_type_name> is not found, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<class_var_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the class variable type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
int16_t value = env->get_class_var_short_by_name(env, stack, "TestCase::NativeAPI", "$SHORT_VALUE", &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 get_class_var_int_by_name
C<int32_t (*get_class_var_int_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* class_var_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Gets the value of the class variable specified by the basic type name I<basic_type_name> and the class variable name I<class_var_name>, and returns the value casting to C<int> type.
The type of the filed must be C<int> type or smaller numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<basic_type_name> is not found, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<class_var_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the class variable type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
int8_t value = env->get_class_var_int_by_name(env, stack, "TestCase::NativeAPI", "$BYTE_VALUE", &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 get_class_var_long_by_name
C<int64_t (*get_class_var_long_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* class_var_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Gets the value of the class variable specified by the basic type name I<basic_type_name> and the class variable name I<class_var_name>, and returns the value casting to C<long> type.
The type of the filed must be C<long> type or smaller numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<basic_type_name> is not found, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<class_var_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the class variable type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
int64_t value = env->get_class_var_long_by_name(env, stack, "TestCase::NativeAPI", "$LONG_VALUE", &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 get_class_var_float_by_name
C<float (*get_class_var_float_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* class_var_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Gets the value of the class variable specified by the basic type name I<basic_type_name> and the class variable name I<class_var_name>, and returns the value casting to C<float> type.
The type of the filed must be C<float> type or smaller numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<basic_type_name> is not found, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<class_var_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the class variable type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
float value = env->get_class_var_float_by_name(env, stack, "TestCase::NativeAPI", "$FLOAT_VALUE", &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 get_class_var_double_by_name
C<double (*get_class_var_double_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* class_var_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Gets the value of the class variable specified by the basic type name I<basic_type_name> and the class variable name I<class_var_name>, and returns the value casting to C<double> type.
The type of the filed must be C<double> type or smaller numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<basic_type_name> is not found, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<class_var_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the class variable type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
double value = env->get_class_var_double_by_name(env, stack, "TestCase::NativeAPI", "$DOUBLE_VALUE", &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 get_class_var_object_by_name
C<void* (*get_class_var_object_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* class_var_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Gets the value of the class variable specified by the basic type name I<basic_type_name> and the class variable name I<class_var_name>, and returns the value.
The type of the filed must be an object type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<basic_type_name> is not found, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<class_var_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the class variable type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
void* value = env->get_class_var_object_by_name(env, stack, "TestCase::NativeAPI", "$MINIMAL_VALUE", &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 get_class_var_string_by_name
C<void* (*get_class_var_string_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* class_var_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
The same as L</"get_class_var_object_by_name"> native API.
=head2 set_class_var_byte_by_name
C<void (*set_class_var_byte_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* class_var_name, int8_t value, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Sets the class variable specified by the basic type name I<basic_type_name> and the class variable name I<class_var_name> to the value I<value> casting to the field type.
The type of the filed must be C<byte> type or larger numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<basic_type_name> is not found, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<class_var_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the class variable type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
env->set_class_var_byte_by_name(env, stack, "TestCase::NativeAPI", "$BYTE_VALUE", 15, &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 set_class_var_short_by_name
C<void (*set_class_var_short_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* class_var_name, int16_t value, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Sets the class variable specified by the basic type name I<basic_type_name> and the class variable name I<class_var_name> to the value I<value> casting to the field type.
The type of the filed must be C<short> type or larger numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<basic_type_name> is not found, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<class_var_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the class variable type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
env->set_class_var_short_by_name(env, stack, "TestCase::NativeAPI", "$SHORT_VALUE", 15, &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 set_class_var_int_by_name
C<void (*set_class_var_int_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* class_var_name, int32_t value, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Sets the class variable specified by the basic type name I<basic_type_name> and the class variable name I<class_var_name> to the value I<value> casting to the field type.
The type of the filed must be C<int> type or larger numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<basic_type_name> is not found, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<class_var_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the class variable type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
env->set_class_var_int_by_name(env, stack, "TestCase::NativeAPI", "$INT_VALUE", 15, &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 set_class_var_long_by_name
C<void (*set_class_var_long_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* class_var_name, int64_t value, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Sets the class variable specified by the basic type name I<basic_type_name> and the class variable name I<class_var_name> to the value I<value> casting to the field type.
The type of the filed must be C<long> type or larger numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<basic_type_name> is not found, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<class_var_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the class variable type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
env->set_class_var_long_by_name(env, stack, "TestCase::NativeAPI", "$LONG_VALUE", 15, &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 set_class_var_float_by_name
C<void (*set_class_var_float_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* class_var_name, float value, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Sets the class variable specified by the basic type name I<basic_type_name> and the class variable name I<class_var_name> to the value I<value> casting to the field type.
The type of the filed must be C<float> type or larger numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<basic_type_name> is not found, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<class_var_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the class variable type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
env->set_class_var_float_by_name(env, stack, "TestCase::NativeAPI", "$FLOAT_VALUE", 15, &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 set_class_var_double_by_name
C<void (*set_class_var_double_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* class_var_name, double value, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Sets the class variable specified by the basic type name I<basic_type_name> and the class variable name I<class_var_name> to the value I<value>.
The type of the filed must be C<double> type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<basic_type_name> is not found, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<class_var_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the class variable type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
env->set_class_var_double_by_name(env, stack, "TestCase::NativeAPI", "$DOUBLE_VALUE", 15, &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 set_class_var_object_by_name
C<void (*set_class_var_object_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* class_var_name, void* value, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Searches a class variable I<class_var> given the basic type name I<basic_type_name> and the class variable name I<class_var_name>.
Sets the class variable specified by the basic type name I<basic_type_name> and the class variable name I<class_var_name> to the value I<value>.
The type of the filed must be an object type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<basic_type_name> is not found, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<class_var_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the class variable type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
env->set_class_var_object_by_name(env, stack, "TestCase::NativeAPI", "$MINIMAL_VALUE", minimal, &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 set_class_var_string_by_name
C<void (*set_class_var_string_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* class_var_name, void* value, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
The same as L</"set_class_var_object_by_name"> native API.
=head2 get_field
C<void* (*get_field_by_index)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name);>
Searches a L<field|SPVM::Document::NativeAPI::Field> object given the object I<object> and the field name I<field_name>.
If it is found, returns it. Otherwise, returns C<NULL>.
Examples:
void* field = env->get_field(env, stack, object, "x");
=head2 get_field_static
C<void* (*get_field_static)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* field_name);>
Searches a L<field|SPVM::Document::NativeAPI::Field> object given the basic type name I<basic_type_name> and the field name I<field_name>.
If it is found, returns it. Otherwise, returns C<NULL>.
Examples:
void* field = env->get_field_static(env, stack, "Point", "x");
=head2 get_field_byte
C<int8_t (*get_field_byte)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, L<void* field|SPVM::Document::NativeAPI::Field>);>
Returns the value of the field I<field> of the object I<object> interpreting its type is byte type.
=head2 get_field_short
C<int16_t (*get_field_short)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, L<void* field|SPVM::Document::NativeAPI::Field>);>
Returns the value of the field I<field> of the object I<object> interpreting its type is short type.
=head2 get_field_int
C<int32_t (*get_field_int)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, L<void* field|SPVM::Document::NativeAPI::Field>);>
Returns the value of the field I<field> of the object I<object> interpreting its type is int type.
=head2 get_field_long
C<int64_t (*get_field_long)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, L<void* field|SPVM::Document::NativeAPI::Field>);>
Returns the value of the field I<field> of the object I<object> interpreting its type is long type.
=head2 get_field_float
C<float (*get_field_float)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, L<void* field|SPVM::Document::NativeAPI::Field>);>
Returns the value of the field I<field> of the object I<object> interpreting its type is float type.
=head2 get_field_double
C<double (*get_field_double)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, L<void* field|SPVM::Document::NativeAPI::Field>);>
Returns the value of the field I<field> of the object I<object> interpreting its type is double type.
=head2 get_field_object
C<void* (*get_field_object)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, L<void* field|SPVM::Document::NativeAPI::Field>);>
Returns the value of the field I<field> of the object I<object> interpreting its type is an object type.
=head2 get_field_string
C<void* (*get_field_string)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, L<void* field|SPVM::Document::NativeAPI::Field>);>
Returns the value of the field I<field> of the object I<object> interpreting its type is string type.
=head2 set_field_byte
C<void (*set_field_byte)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, L<void* field|SPVM::Document::NativeAPI::Field>, int8_t value);>
Sets I<value> to the field I<field> of the object I<object> interpreting its type is byte type.
=head2 set_field_short
C<void (*set_field_short)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, L<void* field|SPVM::Document::NativeAPI::Field>, int16_t value);>
Sets I<value> to the field I<field> of the object I<object> interpreting its type is short type.
=head2 set_field_int
C<void (*set_field_int)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, L<void* field|SPVM::Document::NativeAPI::Field>, int32_t value);>
Sets I<value> to the field I<field> of the object I<object> interpreting its type is int type.
=head2 set_field_long
C<void (*set_field_long)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, L<void* field|SPVM::Document::NativeAPI::Field>, int64_t value);>
Sets I<value> to the field I<field> of the object I<object> interpreting its type is long type.
=head2 set_field_float
C<void (*set_field_float)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, L<void* field|SPVM::Document::NativeAPI::Field>, float value);>
Sets I<value> to the field I<field> of the object I<object> interpreting its type is float type.
=head2 set_field_double
C<void (*set_field_double)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, L<void* field|SPVM::Document::NativeAPI::Field>, double value);>
Sets I<value> to the field I<field> of the object I<object> interpreting its type is double type.
=head2 set_field_object
C<void (*set_field_object)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, L<void* field|SPVM::Document::NativeAPI::Field>, void* value);>
Sets I<value> to the field I<field> of the object I<object> interpreting its type is an object type.
=head2 set_field_string
C<void (*set_field_string)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, L<void* field|SPVM::Document::NativeAPI::Field>, void* value);>
Sets I<value> to the field I<field> interpreting its type is string type.
=head2 get_field_byte_by_name
C<int8_t (*get_field_byte_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Retruns the value of the field specified by the invocant I<object> and the field name I<field_name>.
The type of the filed must be C<byte> type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<object> is not a class type, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<field_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the field type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
int8_t byte_value = env->get_field_byte_by_name(env, stack, object, "byte_value", &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 get_field_short_by_name
C<int16_t (*get_field_short_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Gets the value of the field specified by the invocant I<object> and the field name I<field_name>, and returns the value casting to C<short> type.
The type of the filed must be C<short> type or smaller numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<object> is not a class type, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<field_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the field type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
int8_t short_value = env->get_field_short_by_name(env, stack, object, "short_value", &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 get_field_int_by_name
C<int32_t (*get_field_int_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Gets the value of the field specified by the invocant I<object> and the field name I<field_name>, and returns the value casting to C<int> type.
The type of the filed must be C<int> type or smaller numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<object> is not a class type, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<field_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the field type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
int8_t int_value = env->get_field_int_by_name(env, stack, object, "int_value", &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 get_field_long_by_name
C<int64_t (*get_field_long_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Gets the value of the field specified by the invocant I<object> and the field name I<field_name>, and returns the value casting to C<long> type.
The type of the filed must be C<long> type or smaller numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<object> is not a class type, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<field_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the field type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
int8_t long_value = env->get_field_long_by_name(env, stack, object, "long_value", &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 get_field_float_by_name
C<float (*get_field_float_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Gets the value of the field specified by the invocant I<object> and the field name I<field_name>, and returns the value casting to C<float> type.
The type of the filed must be C<float> type or smaller numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<object> is not a class type, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<field_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the field type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
int8_t float_value = env->get_field_float_by_name(env, stack, object, "float_value", &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 get_field_double_by_name
C<double (*get_field_double_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Gets the value of the field specified by the invocant I<object> and the field name I<field_name>, and returns the value casting to C<double> type.
The type of the filed must be C<double> type or smaller numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<object> is not a class type, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<field_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the field type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
int8_t double_value = env->get_field_double_by_name(env, stack, object, "double_value", &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 get_field_object_by_name
C<void* (*get_field_object_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Gets the value of the field specified by the invocant I<object> and the field name I<field_name>.
The type of the filed must be an object type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<object> is not a class type, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<field_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the field type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
void* object_minimal = env->get_field_object_by_name(env, stack, object_simple, "object_value", &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 get_field_string_by_name
C<void* (*get_field_string_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
The same as L</"get_field_object_by_name"> native API.
=head2 set_field_byte_by_name
C<void (*set_field_byte_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, int8_t value, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Sets the field specified by the invocant I<object> and the field name I<field_name> to the value I<value> casting to the field type.
The type of the filed must be C<byte> type or larger numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<object> is not a class type, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<field_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the field type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
env->set_field_byte_by_name(env, stack, object, "byte_value", 13, &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 set_field_short_by_name
C<void (*set_field_short_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, int16_t value, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Sets the field specified by the invocant I<object> and the field name I<field_name> to the value I<value> casting to the field type.
The type of the filed must be C<short> type or larger numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<object> is not a class type, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<field_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the field type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
env->set_field_short_by_name(env, stack, object, "short_value", 13, &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 set_field_int_by_name
C<void (*set_field_int_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, int32_t value, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Sets the field specified by the invocant I<object> and the field name I<field_name> to the value I<value> casting to the field type.
The type of the filed must be C<int> type or larger numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<object> is not a class type, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<field_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the field type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
env->set_field_int_by_name(env, stack, object, "int_value", 13, &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 set_field_long_by_name
C<void (*set_field_long_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, int64_t value, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Sets the field specified by the invocant I<object> and the field name I<field_name> to the value I<value> casting to the field type.
The type of the filed must be C<long> type or larger numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<object> is not a class type, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<field_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the field type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
env->set_field_long_by_name(env, stack, object, "long_value", 13, &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 set_field_float_by_name
C<void (*set_field_float_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, float value, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Sets the field specified by the invocant I<object> and the field name I<field_name> to the value I<value> casting to the field type.
The type of the filed must be C<float> type or larger numeric type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<object> is not a class type, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<field_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the field type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
env->set_field_float_by_name(env, stack, object, "float_value", 13, &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 set_field_double_by_name
C<void (*set_field_double_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, double value, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Sets the field specified by the invocant I<object> and the field name I<field_name> to the value I<value>.
The type of the filed must be C<double> type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<object> is not a class type, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<field_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the field type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
env->set_field_double_by_name(env, stack, object, "double_value", 13, &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 set_field_object_by_name
C<void (*set_field_object_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, void* value, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Sets the field specified by the invocant I<object> and the field name I<field_name> to the value I<value>.
The type of the filed must be an object type.
The function name I<func_name>, the file path I<file>, and the line number I<line> are needed for the exception stack trace.
If this function succeeds, I<error_id> is set to 0.
Exceptions:
If I<object> is not a class type, an exception is set and I<error_id> is set to the basic type id of L<Error|SPVM::Error> class.
If I<field_name> is not found, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
If the field type is invalid, an exception is set and I<error_id> ise set to the basic type id of L<Error|SPVM::Error> class.
Examples:
int32_t error_id = 0;
env->set_field_object_by_name(env, stack, object_simple, "object_value", object_minimal, &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 set_field_string_by_name
C<void (*set_field_string_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, void* value, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
The same as L</"set_field_object_by_name"> native API.
=head2 get_field_string_chars_by_name
C<const char* (*get_field_string_chars_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Calls the L</"get_field_string_by_name">. If the return value is C<NULL>, returns C<NULL>. Otherwise, calls the L</"get_chars"> given the return value, and returns the return value of L</"get_chars"> native API.
=head2 get_method
C<void* (*get_method)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* method_name);>
Searches a L<method|SPVM::Document::NativeAPI::Method> given the basic type name I<basic_type_name> and the method name I<method_name>.
If it is found, returns it. Otherwise, returns C<NULL>.
Examples:
void* method = env->get_method(env, stack, "Foo", "get");
=head2 get_class_method
C<void* (*get_class_method)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* method_name);>
Searches a class L<method|SPVM::Document::NativeAPI::Method> given the basic type name I<basic_type_name> and the method name I<method_name>.
If it is found, returns it. Otherwise, returns C<NULL>.
Examples:
void* method = env->get_class_method(env, stack, "Foo", "get");
=head2 get_instance_method_static
C<void* (*get_instance_method_static)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* method_name);>
Searches an instance method given the basic type name I<basic_type_name> and the method name I<method_name>.
If found, returns it. Otherwise, returns C<NULL>.
Examples:
void* method = env->get_instance_method_static(env, stack, "Foo", "get");
=head2 get_instance_method
C<void* (*get_instance_method)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* method_name);>
Searches an instance L<method|SPVM::Document::NativeAPI::Method> given the object I<object> and the method name I<method_name>.
If it is found, returns it. Otherwise, returns C<NULL>.
Examples:
void* method = env->get_instance_method(env, stack, object, "get");
=head2 call_method_no_mortal
C<int32_t (*call_method_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* method|SPVM::Document::NativeAPI::Method>, int32_t args_width);>
Calls the method I<method> given the L<width of the argument|SPVM::Document::NativeClass/"Arguments Width"> I<args_width>.
If the method throws an exception, returns a basic type ID of an error class. Otherwise, returns 0.
C<stack[0]> is set to the return value of the method.
This native API should not be used unless special purposes are intended. Normally, use L</"call_method"> native API.
=head2 call_method
C<int32_t (*call_method)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* method|SPVM::Document::NativeAPI::Method>, int32_t args_width);>
Calls L</"call_method_no_mortal"> native API and if the type of the its return value is an object type, it is push to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
=head2 call_class_method_by_name
C<void (*call_class_method_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* method_name, int32_t args_width, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Calls a class method given the basic type name I<basic_type_name> and the method name I<method_name>.
The function name I<func_name>, the file path I<file>, and the line number I<line> must be given for the exception stack trace.
If the basic type given by I<basic_type_name> is not found, an exception is thrown.
If the method given by I<method_name> is not found, an exception is thrown.
If the found method is not a class method, an exception is thrown.
If an exception is thrown, C<error_id> is set to a non-zero value. Otherwise, it is set to 0.
Examples:
// Call a class method
int32_t error_id = 0;
int32_t total;
{
int32_t args_width = 2;
stack[0].ival = 5;
stack[1].ival = 10;
env->call_class_method_by_name(env, stack, "MyClass", "sum", args_width, &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
total = stack[0].ival;
}
=head2 call_instance_method_static_by_name
C<void (*call_instance_method_static_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, const char* method_name, int32_t args_width, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Calls an instance method by the basic type name I<basic_type_name> and the method name I<method_name>.
The function name I<func_name>, the file path I<file>, and the line number I<line> must be given for the exception stack trace.
If the basic type given by I<basic_type_name> is not found, an exception is thrown.
If the method given by I<method_name> is not found, an exception is thrown.
If the found method is not an instance method, an exception is thrown.
If C<stack[0].oval> is C<NULL>, an exception is thrown.
If C<stack[0].oval> cannot be assigned to the class given by I<basic_type_name>, an exception is thrown.
If an exception is thrown, C<error_id> is set to a non-zero value. Otherwise, it is set to 0.
Examples:
int32_t error_id = 0;
int32_t output;
{
int32_t args_width = 1;
stack[0].oval = obj_point;
env->call_instance_method_static_by_name(env, stack, "Point", "x", args_width, &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
output = stack[0].ival;
}
=head2 call_instance_method_by_name
C<void (*call_instance_method_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* method_name, int32_t args_width, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Calls an instance method given the method name I<method_name>.
The function name I<func_name>, the file path I<file>, and the line number I<line> must be given for the exception stack trace.
If C<stack[0].oval> is C<NULL>, an exception is thrown.
The type dimension of C<stack[0].oval> must be 0. Otherwise, an exception is thrown.
If the basic type given by I<basic_type_name> is not found, an exception is thrown.
If the instance method given by I<method_name> is not found in the class or super classes, an exception is thrown.
If an exception is thrown, C<error_id> is set to a non-zero value. Otherwise, it is set to 0.
=head2 new_object_no_mortal
C<void* (*new_object_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* basic_type|SPVM::Document::NativeAPI::BasicType>);>
Creates a new object given the basic type I<basic_type>.
I<basic_type> must not be C<NULL>.
I<basic_type> must be a class type.
If its memory allocation failed, returns C<NULL>.
This native API should not be used unless special purposes are intended. Normally, use L</"new_object"> native API.
=head2 new_object
C<void* (*new_object)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* basic_type|SPVM::Document::NativeAPI::BasicType>);>
Calls C<new_object_no_mortal> and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
Examples:
void* basic_type = env->get_basic_type(env, stack, "Int");
void* object = env->new_object(env, stack, basic_type);
=head2 new_object_by_name
C<void* (*new_object_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Creates a new object given the basic type name I<basic_type_name>, and returns it.
The create object is pushed to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">.
The function name I<func_name>, the file path I<file>, and the line number I<line> must be given for the exception stack trace.
If the basic type given by I<basic_type_name> is not found, an exception is thrown.
If the creation of the object failed, an exception is thrown.
If an exception is thrown, C<error_id> is set to a non-zero value. Otherwise, it is set to 0.
Examples:
int32_t error_id = 0;
void* obj_point = env->new_object_by_name(env, stack, "Point", &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 new_pointer_object_no_mortal
C<void* (*new_pointer_object_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* basic_type|SPVM::Document::NativeAPI::BasicType>, void* pointer);>
Calls L</"new_object_no_mortal"> native API and sets the pointer I<pointer> to a native data to the created object, and returns it.
This native API should not be used unless special purposes are intended. Normally, use L</"new_pointer_object"> native API.
=head2 new_pointer_object
C<void* (*new_pointer_object)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* basic_type|SPVM::Document::NativeAPI::BasicType>, void* pointer);>
Calls L</"new_pointer_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
Examples:
void* basic_type = env->get_basic_type(env, stack, "MyTm");
void* st_tm = env->new_memory_block(env, stack, sizeof (struct tm));
void* obj_st_tm = env->new_pointer(env, stack, basic_type, st_tm);
=head2 new_pointer_object_by_name
C<void* (*new_pointer_object_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, void* pointer, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Calls L</"new_object_by_name"> native API and sets the pointer I<pointer> to a native data to the created object, and returns it.
int32_t error_id = 0;
void* minimal = env->new_pointer_object_by_name(env, stack, "TestCase::Pointer", pointer, &error_id, __func__, FILE_NAME, __LINE__);
if (error_id) { return error_id; }
=head2 get_pointer
C<void* (*get_pointer)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
Returns L<pointer value|SPVM::Document::NativeClass/"Pointer Value"> of the object I<object>.
Examples:
strcut tm* tm = (struct tm*)env->get_pointer(env, stack, obj_tm);
=head2 set_pointer
C<void (*set_pointer)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, void* pointer);>
Sets the L<pointer value|SPVM::Document::NativeClass/"Pointer Value"> of the object I<object> to the pointer I<pointer>.
=head2 new_string_nolen_no_mortal
C<void* (*new_string_nolen_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* bytes);>
Creates a new string object given a C string I<bytes>. I<bytes> must end with C<\0>, and returns it.
If its memory allocation failed, returns C<NULL>.
This native API should not be used unless special purposes are intended. Normally, use L</"new_string_nolen"> native API.
=head2 new_string_nolen
C<void* (*new_string_nolen)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* bytes);>
Calls L</"new_string_nolen_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
Examples:
void* str_obj = env->new_string_nolen(env, stack, "Hello World");
=head2 new_string_no_mortal
C<void* (*new_string_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* bytes, int32_t length);>
Creates a new string object given the C string I<bytes> and the length I<length>, and returns it.
If its memory allocation failed, returns C<NULL>.
If the length of I<bytes> is lower than I<length> or I<bytes> is NULL, The part that longer than the length of I<bytes> is filled with C<\0>.
This native API should not be used unless special purposes are intended. Normally, use L</"new_string"> native API.
=head2 new_string
C<void* (*new_string)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* bytes, int32_t length);>
Calls L</"new_string_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
Examples:
void* str_obj = env->new_string(env, stack, "Hello \0World", 11);
=head2 new_byte_array_no_mortal
C<void* (*new_byte_array_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t length);>
Creates a new array of the byte[] type given the length I<length>, and returns it.
If its memory allocation failed, returns C<NULL>.
This native API should not be used unless special purposes are intended. Normally, use L</"new_byte_array"> native API.
=head2 new_byte_array
C<void* (*new_byte_array)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t length);>
Calls L</"new_byte_array_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
Examples:
void* byte_array = env->new_byte_array(env, stack, 100);
=head2 new_short_array_no_mortal
C<void* (*new_short_array_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t length);>
Creates a new array of the short[] type given the length I<length>, and returns it.
If its memory allocation failed, returns C<NULL>.
This native API should not be used unless special purposes are intended. Normally, use L</"new_short_array"> native API.
=head2 new_short_array
C<void* (*new_short_array)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t length);>
Calls L</"new_short_array_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
Examples:
void* short_array = env->new_short_array(env, stack, 100);
=head2 new_int_array_no_mortal
C<void* (*new_int_array_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t length);>
Creates a new array of the int[] type given the length I<length>, and returns it.
If its memory allocation failed, returns C<NULL>.
This native API should not be used unless special purposes are intended. Normally, use L</"new_int_array"> native API.
=head2 new_int_array
C<void* (*new_int_array)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t length);>
Calls L</"new_int_array_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
Examples:
void* int_array = env->new_int_array(env, stack, 100);
=head2 new_long_array_no_mortal
C<void* (*new_long_array_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t length);>
Creates a new array of the long[] type given the length I<length>, and returns it.
If its memory allocation failed, returns C<NULL>.
This native API should not be used unless special purposes are intended. Normally, use L</"new_long_array"> native API.
=head2 new_long_array
C<void* (*new_long_array)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t length);>
Calls L</"new_long_array_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
Examples:
void* long_array = env->new_long_array(env, stack, 100);
=head2 new_float_array_no_mortal
C<void* (*new_float_array_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t length);>
Creates a new array of float[] type given the length I<length>, and returns it.
If its memory allocation failed, returns C<NULL>.
This native API should not be used unless special purposes are intended. Normally, use L</"new_float_array"> native API.
=head2 new_float_array
C<void* (*new_float_array)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t length);>
Calls L</"new_float_array_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
Examples:
void* float_array = env->new_float_array(env, stack, 100);
=head2 new_double_array_no_mortal
C<void* (*new_double_array_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t length);>
Creates a new array of double[] type given the length I<length>, and returns it.
If its memory allocation failed, returns C<NULL>.
This native API should not be used unless special purposes are intended. Normally, use L</"new_double_array"> native API.
=head2 new_double_array
C<void* (*new_double_array)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t length);>
Calls L</"new_double_array_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
Examples:
void* double_array = env->new_double_array(env, stack, 100);
=head2 new_object_array_no_mortal
C<void* (*new_object_array_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* basic_type|SPVM::Document::NativeAPI::BasicType>, int32_t length);>
Creates a new array of an object type given the basic type I<basic_type> and the array length I<length>, and returns it.
If its memory allocation failed, returns C<NULL>.
This native API should not be used unless special purposes are intended. Normally, use L</"new_object_array"> native API.
=head2 new_object_array
C<void* (*new_object_array)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* basic_type|SPVM::Document::NativeAPI::BasicType>, int32_t length);>
Calls L</"new_object_array_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
Examples:
int32_t basic_type_id = env->get_basic_type_id(env, stack, "Int");
void* object_array = env->new_object_array(env, stack, basic_type_id, 100);
=head2 new_object_array_by_name
C<void* (*new_object_array_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, int32_t length, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Creates a new object array given the basic type name I<basic_type_name> and the array length I<length>, and returns it.
The created array is pushed to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">.
If the basic type given by I<basic_type_name> is not found, an exception is thrown.
If the creation of the array failed, an exception is thrown.
The function name I<func_name>, the file path I<file>, and the line number I<line> must be given for the exception stack trace.
If an exception is thrown, C<error_id> is set to a non-zero value. Otherwise, it is set to 0.
=head2 new_string_array
C<void* (*new_string_array)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t length);>
Calls L</"new_string_array_no_mortal"> native API and calls L</"push_mortal"> native API given the return value.
=head2 new_muldim_array_no_mortal
C<void* (*new_muldim_array_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* basic_type|SPVM::Document::NativeAPI::BasicType>, int32_t type_dimension, int32_t length);>
Creates a new multi-dimensional array given the basic type I<basic_type>, the type dimension I<type_dimension>, and the array length I<length>, and returns it.
If its memory allocation failed, returns C<NULL>.
I<type_dimension> must be less than or equals to 255.
This native API should not be used unless special purposes are intended. Normally, use L</"new_muldim_array"> native API.
=head2 new_muldim_array
C<void* (*new_muldim_array_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* basic_type|SPVM::Document::NativeAPI::BasicType>, int32_t type_dimension, int32_t length);>
Calls L</"new_muldim_array_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
Examples:
// Creates 2-dimensional array - new Int[][100].
int32_t basic_type_id = env->get_basic_type_id(env, stack, "Int");
void* multi_array = env->new_muldim_array(env, stack, basic_type_id, 2, 100);
=head2 new_muldim_array_by_name
C<void* (*new_muldim_array_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, int32_t type_dimension, int32_t length, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Creates a new multi-dimensional array given the basic type name I<basic_type_name>, the type dimension I<type_dimension>, and the array length I<length>, and returns it.
The created array is pushed to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">.
The function name I<func_name>, the file path I<file>, and the line number I<line> must be given for the exception stack trace.
If the basic type given by I<basic_type_name> is not found, an exception is thrown.
If the creation of the array failed, an exception is thrown.
If an exception is thrown, C<error_id> is set to a non-zero value. Otherwise, it is set to 0.
=head2 new_mulnum_array_no_mortal
C<void* (*new_mulnum_array_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* basic_type|SPVM::Document::NativeAPI::BasicType>, int32_t length);>
Creates a new multi-numeric array given the basic type I<basic_type> and the array length I<length>, and returns it.
If its memory allocation failed, returns C<NULL>.
This native API should not be used unless special purposes are intended. Normally, use L</"new_mulnum_array"> native API.
=head2 new_mulnum_array
C<void* (*new_mulnum_array)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* basic_type|SPVM::Document::NativeAPI::BasicType>, int32_t length);>
Calls L</"new_mulnum_array_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
Examples:
int32_t basic_type_id = env->get_basic_type_id(env, stack, "Complex_2d");
void* value_array = env->new_mulnum_array(env, stack, basic_type_id, 100);
=head2 new_mulnum_array_by_name
C<void* (*new_mulnum_array_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, int32_t length, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Creates a new multi-numeric array given the basic type name I<basic_type_name>, the type dimension I<type_dimension>, and the array length I<length>, and returns it.
The created array is pushed to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">.
The function name I<func_name>, the file path I<file>, and the line number I<line> must be given for the exception stack trace.
If the basic type given by I<basic_type_name> is not found, an exception is thrown.
If the creation of the array failed, an exception is thrown.
If an exception is thrown, C<error_id> is set to a non-zero value. Otherwise, it is set to 0.
=head2 new_array_proto_no_mortal
C<void* (*new_array_proto_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, void* array, int32_t length);>
Creates a new array given the prototype array I<array> and the length I<length>, and returns it.
If I<array> is C<NULL>, returns C<NULL>.
If the type of I<array> is not an array type, returns C<NULL>.
If I<length> is lower than 0, returns C<NULL>.
This native API should not be used unless special purposes are intended. Normally, use L</"new_array_proto"> native API.
=head2 new_array_proto
C<void* (*new_array_proto)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* array, int32_t length);>
Calls L</"new_array_proto_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
=head2 length
C<int32_t (*length)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
Returns the value of C<length> member variable in L</"SPVM_OBJECT"> struct given the object I<object>.
I<object> must be defined.
If I<object> is an array, C<length> is its array length.
If I<object> is a string, C<length> is its string length.
Otherwise C<length> is 0.
Examples:
int32_t length = env->length(env, stack, object);
=head2 get_elems_byte
C<int8_t* (*get_elems_byte)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* array);>
Returns the pointer to the elements of the byte array I<array>.
Examples:
int8_t* values = env->get_elems_byte(env, stack, array);
values[3] = 5;
=head2 get_elems_short
C<int16_t* (*get_elems_short)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* array);>
Returns the pointer to the elements of the short array I<array>.
Examples:
int16_t* values = env->get_elems_short(env, stack, array);
values[3] = 5;
=head2 get_elems_int
C<int32_t* (*get_elems_int)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* array);>
Returns the pointer to the elements of the int array I<array>.
Examples:
int32_t* values = env->get_elems_int(env, stack, array);
values[3] = 5;
=head2 get_elems_long
C<int64_t* (*get_elems_long)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* array);>
Returns the pointer to the elements of the long array I<array>.
Examples:
int64_t* values = env->get_elems_long(env, stack, array);
values[3] = 5;
=head2 get_elems_float
C<float* (*get_elems_float)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* array);>
Returns the pointer to the elements of the float array I<array>.
Examples:
float* values = env->get_elems_float(env, stack, array);
values[3] = 1.5f;
=head2 get_elems_double
C<double* (*get_elems_double)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* array);>
Returns the pointer to the elements of the double array I<array>.
Examples:
double* values = env->get_elems_double(env, stack, array);
values[3] = 1.5;
=head2 get_elem_object
C<void* (*get_elem_object)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* array, int32_t index);>
Returns the element of the array I<array> at the index I<index>.
Examples:
void* object = env->get_elem_object(env, stack, array, 3);
=head2 get_elem_string
C<void* (*get_elem_string)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* array, int32_t index);>
Calls L</"get_elem_object"> native API, and returns its return value.
=head2 set_elem_object
C<void (*set_elem_object)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* array, int32_t index, void* object);>
Sets I<object> to the element of the array I<array> at the index I<index>.
Examples:
env->get_elem_object(env, stack, array, 3, object);
=head2 set_elem_string
C<void (*set_elem_string)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* array, int32_t index, void* string);>
Calls L</"set_elem_object"> native API.
=head2 get_chars
C<const char* (*get_chars)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* string_object);>
Returns the pointer to the characters stored in the string C<string_object>.
Examples:
const char* chars = env->get_chars(env, stack, obj_string);
=head2 get_bool_object_value
C<int32_t (*get_bool_object_value)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* bool_object);>
Returns the value stored in L<Bool|SPVM::Bool> object I<bool_object>.
I<bool_object> must not be C<NULL>.
Examples:
int32_t bool_value = env->get_bool_object_value(env, stack, bool_object);
=head2 concat_no_mortal
C<void* (*concat_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* string1, void* string2);>
Creates a new string concating two strings I<string1> and I<string2>, and returns it.
If its memory allocation failed, returns C<NULL>.
This native API should not be used unless special purposes are intended. Normally, use L</"concat"> native API.
=head2 concat
C<void* (*concat)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* string1, void* string2);>
Calls L</"concat_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
=head2 shorten
C<void (*shorten)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* string, int32_t new_length);>
Shorten the string C<string> to the length I<length>.
Characters whose index is greater than I<length> are are filled with C<\0>.
If the string C<string> is C<NULL>, nothing is performed.
If the type of C<string> is not string type, nothing is performed.
If C<string> is read-only, nothing is performed.
If I<length> is not greater than or equal to 0, nothing is performed.
If I<length> is less than the length of I<string>, nothing is performed.
=head2 make_read_only
C<void (*make_read_only)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* string)>
Makes the string I<string> read-only.
If I<string> is C<NULL>, no operation is performed.
=head2 is_read_only
C<void (*make_read_only)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* string)>
If the string I<string> is not C<NULL> and it is read-only, returns 1, otherwise returns 0.
=head2 print
C<void (*print)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* string);>
Prints the string I<string> to L<SPVM's standard output|SPVM::Document::Language::System/"Standard Streams">.
=head2 print_stderr
C<void (*print_stderr)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* string);>
Prints the string I<string> to L<SPVM's standard error|SPVM::Document::Language::System/"Standard Streams">.
If I<string> is NULL, this method produces no output.
=head2 dump_no_mortal
C<void* (*dump_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
Performs the L<dump|SPVM::Document::Language::Operators/"dump"> operation, and returns its return value.
This native API should not be used unless special purposes are intended. Normally, use L</"dump"> native API.
=head2 dump
C<void* (*dump)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
Calls L</"dump_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
=head2 dumpc
C<const char* (*dumpc)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
Calls L</"dump"> native API and calls L</"get_chars"> native API given the return value of C<dump> to I<string>, and returns the return value of C<get_chars>.
=head2 copy_no_mortal
C<void* (*copy_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);>
The type of the object I<object> must be a string type, a numeric array type, or a multi-numeric array type.
If the type of the object I<object> is string type, creates a string and copies the characters stored in I<object> to the created string, and returns the created object.
If the type of the object I<object> is a numeric array type or a multi-numeric array type, creates an array using type of I<object> as a prototype and copies the elements stored in I<object> to the created array, and returns the created array.
If I<object> is C<NULL>, returns C<NULL>.
This native API should not be used unless special purposes are intended. Normally, use L</"copy"> native API.
=head2 copy
C<void* (*copy)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
Calls L</"copy_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
=head2 get_spvm_version_string
C<const char* (*get_spvm_version_string)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">);>
Returns the L<version string|SPVM::Document::Language::Class/"Version String"> of the SPVM language.
=head2 get_spvm_version_number
C<double (*get_spvm_version_number)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">);>
Calls L</"get_spvm_version_string"> native API and converts its return value to a double value.
=head2 get_version_string
C<const char* (*get_version_string)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* basic_type|SPVM::Document::NativeAPI::BasicType>);>
Returns the L<version string|SPVM::Document::Language::Class/"Version String"> of the basic type I<basic_type>.
If the version string is not defined, returns C<NULL>.
=head2 get_version_number
C<double (*get_version_number)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, L<void* basic_type|SPVM::Document::NativeAPI::BasicType>);>
Calls L</"get_version_string"> native API and converts its return value to a double value.
If the version string is not defined, returns -1.
=head2 die
C<int32_t (*die)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* message, ...);>
Creates a string from a C<sprintf> formatted message I<message> given its parameters corresponding to its format specifiers, a function name, a file name, and a line number for an exception call stack.
And sets the created string to the L<exception variable|SPVM::Document::Language::ExceptionHandling/"Exception Variable">, and return the basic type ID of L<Error|SPVM::Error> class.
Examples:
return env->die(env, stack, "The value must be %d.", 3, __func__, FILE_NAME, __LINE__);
=head2 get_exception
C<void* (*get_exception)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">);>
Returns the value of the L<exception variable|SPVM::Document::Language::ExceptionHandling/"Exception Variable">.
The return value is a SVPM string.
=head2 set_exception
C<void (*set_exception)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* exception);>
Sets I<exception> to the L<exception variable|SPVM::Document::Language::ExceptionHandling/"Exception Variable">.
I<exception> is an SPVM string.
=head2 new_stack_trace_no_mortal
C<void* (*new_stack_trace_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* exception, L<void* method|SPVM::Document::NativeAPI::Method>, int32_t line);>
Creates a new string adding a string line of a stack trace given the file I<file> and the line I<line> to the end of the exception I<exception>, and returns it.
If its memory allocation failed, returns C<NULL>.
I<exception> is an SPVM string. The return value is an SPVM string.
This native API should not be used unless special purposes are intended. Normally, use L</"new_stack_trace"> native API.
=head2 new_stack_trace
C<void* (*new_stack_trace)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* exception, L<void* method|SPVM::Document::NativeAPI::Method>, int32_t line);>
Calls L</"new_stack_trace_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
=head2 is_string
C<int32_t (*is_string)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
If the object I<object> is not C<NULL> and its type is string type, returns 1, otherwise returns 0.
=head2 is_class
C<int32_t (*is_class)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
If the object I<object> is not C<NULL> and its type is a class type, returns 1, otherwise returns 0.
=head2 is_pointer_class
C<int32_t (*is_pointer_class)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
If the object I<object> is not C<NULL> and the class of I<object> has the C<pointer> attribute, returns 1, otherwise returns 0.
=head2 is_array
C<int32_t (*is_array)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
If the object I<object> is not C<NULL> and its type is an array type, returns 1, otherwise returns 0.
=head2 is_object_array
C<int32_t (*is_object_array)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
If the object I<object> is not C<NULL> and its type is an object array type, returns 1, otherwise returns 0.
=head2 is_numeric_array
C<int32_t (*is_numeric_array)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
If the object I<object> is not C<NULL> and its type is a numeric array type, returns 1, otherwise returns 0.
=head2 is_mulnum_array
C<int32_t (*is_mulnum_array)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
If the object I<object> is not C<NULL> and its type is a multi-numeric array type, returns 1, otherwise returns 0.
=head2 isa
C<int32_t (*isa)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, void* basic_type, int32_t type_dimension);>
If the object I<object> satisfies the L<assignment requirement|SPVM::Document::Language::Types/"Assignment Requirement"> without data conversion to the type given by the basic type C<basic_type> and the type dimension C<type_dimension>, returns 1, otherwise returns 0.
=head2 isa_by_name
C<int32_t (*isa_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* basic_type_name, int32_t type_dimension);>
If the basic type given by the basic type name I<basic_type_name> is not found, returns 0.
If the object I<object> satisfies the L<assignment requirement|SPVM::Document::Language::Types/"Assignment Requirement"> without data conversion to the type given by the basic type name C<basic_type_name> and the type dimension C<type_dimension>, returns 1, otherwise returns 0.
=head2 is_type
C<int32_t (*is_type)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, L<void* basic_type|SPVM::Document::NativeAPI::BasicType>, int32_t type_dimension);>
If the type of the object I<object> is equal to the type given by the basic type I<basic_type> and the type dimension I<type_dimension>, returns 1, otherwise returns 0.
I<object> must not be C<NULL>.
=head2 is_type_by_name
C<int32_t (*is_type_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* basic_type_name, int32_t type_dimension);>
If the basic type given by the basic type name I<basic_type_name> is not found, returns 0.
If the object I<object> is not C<NULL> and its type of the object I<object> is equal to the basic type given by the basic type name I<basic_type_name> and the type dimension I<type_dimension>, returns 1, otherwise returns 0.
=head2 elem_isa
C<int32_t (*elem_isa)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* array, void* element);>
If the element I<element> satisfies the L<assignment requirement|SPVM::Document::Language::Types/"Assignment Requirement"> without data conversion to the element type of the array I<array>, returns 1, otherwise returns 0.
=head2 get_elem_size
C<int32_t (*get_elem_size)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* array);>
Returns the byte size of the element of the array I<array>.
=head2 get_type_name_no_mortal
C<void* (*get_type_name_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
Creates a new string that is the type name of the object I<object>, and returns it.
If its memory allocation failed, returns C<NULL>.
This native API should not be used unless special purposes are intended. Normally, use L</"get_type_name"> native API.
=head2 get_type_name
C<void* (*get_type_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
Calls L</"get_type_name_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
=head2 get_compile_type_name_no_mortal
C<void* (*get_compile_type_name_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, int32_t type_dimension, int32_t type_flag);>
Creates a new string that is the the compile-time type name of the type given by the basic type name I<basic_type_name>, the type dimension I<type_dimension>, the type flag I<type_flag>, and returns it.
If its memory allocation failed, returns C<NULL>.
This native API should not be used unless special purposes are intended. Normally, use L</"get_compile_type_name"> native API.
=head2 get_compile_type_name
C<void* (*get_compile_type_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name, int32_t type_dimension, int32_t type_flag);>
Calls L</"get_compile_type_name_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
=head2 enter_scope
C<int32_t (*enter_scope)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">);>
Performs an L<enterring scope|SPVM::Document::Language::GarbageCollection/"Entering Scope"> operation and returns the top position of the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">. This value is used as an argument to L</"leave_scope"> native API.
=head2 leave_scope
C<void (*leave_scope)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t mortal_stack_top);>
Performs a L<leaving scope operation|SPVM::Document::Language::GarbageCollection/"Leaving Scope"> given the top position of the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack"> I<mortal_stack_top>.
Normally, I<mortal_stack_top> is a return value from L</"enter_scope"> native API.
=head2 push_mortal
C<int32_t (*push_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
Pushes the object I<object> to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">.
If I<object> is NULL, no operation is performed.
If successful, returns 0. Otherwise, returns a non-zero value.
=head2 weaken
C<int32_t (*weaken)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void** ref);>
Weakens the reference C<ref>.
I<ref> must not be C<NULL>.
If the object referenced by I<ref> is C<NULL>, no operation is performed.
If I<ref> is already weakened, no operation is performed.
See the doc of L<weak reference|SPVM::Document::Language::GarbageCollection/"Weak Reference"> about weak references.
=head2 isweak
C<int32_t (*isweak()SPVM_ENV* env, void** ref);>
If the reference C<ref> is weakened, returns 1, otherwise returns 0.
I<ref> must not be C<NULL>.
If the object referenced by I<ref> is C<NULL>, returns 0.
See the doc of L<weak reference|SPVM::Document::Language::GarbageCollection/"Weak Reference"> about weak references.
=head2 unweaken
C<void (*unweaken)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void** ref);>
Unweakens the reference C<ref>.
I<ref> must not be C<NULL>.
If the object referenced by I<ref> is C<NULL>, no operation is performed.
If I<ref> is not weakened, no operation is performed.
See the doc of L<weak reference|SPVM::Document::Language::GarbageCollection/"Weak Reference"> about weak references.
=head2 strerror_string
C<void* (*strerror_string)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t errno_value, int32_t length);>
Calls the L</"strerror"> function and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
=head2 strerror_string_nolen
C<void* (*strerror_string_nolen)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t errno_value);>
Calls the L</"strerror_string"> function given 0 to I<length>, and returns its return value.
=head2 strerror
C<const char* (*strerror)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t errno_value, int32_t length);>
Returns the return value of the L<strerror|https://linux.die.net/man/3/strerror> function in the C language.
If the length is 0, the length is set to 128.
If the C<strerror> function failed, C<errno> is set to the a positive value.
This native API is thread-safe.
This native API is implemented by the following functions:
Windows:
Linux and UNIX:
L<strerror_r - XSI-compliant|https://linux.die.net/man/3/strerror_r>
=head2 strerror_nolen
C<const char* (*strerror_nolen)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t errno_value);>
Calls the L</"strerror"> function given 0 to I<length>, and returns its return value.
=head2 is_binary_compatible_object
C<int32_t (*is_binary_compatible_object)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object);>
If the object I<object> is binary compatible with the runtime environment I<runtime> and the runtime stack I<stack>, returns 1, otherwise returns 0.
=head2 reserved195
C<void* reserved195;>
Reserved for the future use.
=head2 new_stack
C<SPVM_VALUE* (*new_stack)(SPVM_ENV* env);>
Creates a new L<runtime stack|SPVM::Document::NativeClass/"Runtime Stack">, and returns it.
=head2 free_stack
C<void (*free_stack)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">);>
Frees the L<runtime stack|SPVM::Document::NativeClass/"Runtime Stack"> I<stack>.
=head2 get_field_object_defined_and_has_pointer_by_name
C<void* (*get_field_object_defined_and_has_pointer_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Calls L</"get_field_object_by_name"> native API, and returns its return value.
If the return value is C<NULL>, an exception is thrown.
If the pointer stored in the return value is C<NULL>, an exception is thrown.
=head2 get_field_object_ref
C<void** (*get_field_object_ref)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, L<void* field|SPVM::Document::NativeAPI::Field>);>
Returns the address where the value of the field I<field> is stored.
=head2 get_field_object_ref_by_name
C<void** (*get_field_object_ref_by_name)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* object, const char* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);>
Searches a field field given the object I<object> and the field name I<field_name>.
If it is found, the address where the value of the field I<field> is stored. Otherwise, an exception is thrown.
The function name I<func_name>, the file path I<file>, and the line number I<line> must be given for the exception stack trace.
If the field given by I<field_name> is not found, an exception is thrown.
If an excetpion is thrown, the value referenced by C<error_id> is set to a non-zero value. Otherwise, set to 0.
=head2 is_binary_compatible_stack
C<int32_t (*is_binary_compatible_stack)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">);>
If the runtime stack I<stack> is binary compatible with the runtime environment I<runtime>, returns 1, otherwise returns 0.
=head2 assign_object
C<void (*assign_object)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void** ref, void* object);>
Assigns the object C<object> to the place referenced by the reference C<ref>.
This native API should not be used unless special purposes are intended.
=head2 new_string_array_no_mortal
C<void* (*new_string_array_no_mortal)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, int32_t length);>
Creates a new string array given the length I<length>, and returns it.
This native API should not be used unless special purposes are intended. Normally, use L</"new_string_array"> native API.
=head2 new_memory_block
C<void* (*new_memory_block)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, size_t size);>
Creates a new memory block given the byte size I<size> and returns its address.
If I<size> is 0, retunrs C<NULL>.
If I<size> is greater than C<SIZE_MAX> defined in the sysmte, returns C<NULL>.
If the system memory allocation function returns C<NULL>, this native API returns C<NULL>.
The count of the memory blocks managed by this runtime is incremented by 1.
=head2 free_memory_block
C<void (*free_memory_block)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* block);>
Frees the memory block I<block>.
If I<block> is C<NULL>, no operation is performed.
The count of the memory blocks managed by this runtime is decremented by 1.
=head2 get_memory_blocks_count
C<int32_t (*get_memory_blocks_count)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">);>
Returns the count of the memory blocks managed by this runtime.
=head2 say
C<void (*say)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* string);>
Prints the string I<string> and C<\n> to L<SPVM's standard output|SPVM::Document::Language::System/"Standard Streams">.
=head2 warn
C<void (*warn)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, void* string, const char* basic_type_name, const char* method_name, const char* file, int32_t line);>
Performs the L<warn|SPVM::Document::Language::Operators/"warn"> operation given the string I<string>, the basic type name I<basic_type_name>, the method name I<method_name>, the file path I<file>, and the line number I<line>.
=head2 spvm_stdin
C<FILE* (*spvm_stdin)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">);>
Returns L<SPVM's standard input|SPVM::Document::Language::System/"Standard Streams">.
=head2 spvm_stdout
C<FILE* (*spvm_stdout)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">);>
Returns L<SPVM's standard output|SPVM::Document::Language::System/"Standard Streams">.
=head2 spvm_stderr
C<FILE* (*spvm_stderr)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">);>
Returns L<SPVM's standard error|SPVM::Document::Language::System/"Standard Streams">.
=head2 check_bootstrap_method
C<int32_t (*check_bootstrap_method)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">, const char* basic_type_name);>
Checks the definition of the L<bootstrap method|SPVM::Document::Language::Class/"Bootstrap Method">.
If it is invalid, an exception is thrown.
If an exception is thrown, returns a non-zero value. Otherwise, returns 0.
=head2 new_array_proto_element_no_mortal
C<void* (*new_array_proto_element_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, void* element, int32_t length);>
Creates a new array given the prototype element I<element> and the length I<length>, and returns it.
If I<element> is C<NULL>, returns C<NULL>.
If the type of I<element> must be an object type.
If I<length> is lower than 0, returns C<NULL>.
This native API should not be used unless special purposes are intended. Normally, use L</"new_array_proto_element"> native API.
=head2 new_array_proto_element
C<void* (*new_array_proto_element)(SPVM_ENV* env, SPVM_VALUE* stack, void* element, int32_t length);>
Calls L</"new_array_proto_element_no_mortal"> native API and push its return value to the L<native mortal stack|SPVM::Document::NativeClass/"Native Mortal Stack">, and returns it.
=head2 get_byte_object_value
C<int32_t (*get_byte_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, void* byte_object);>
Returns the value of the C<value> field of L<Byte|SPVM::Byte> object I<byte_object>.
I<byte_object> must be a L<Byte|SPVM::Byte> object.
=head2 get_short_object_value
C<int32_t (*get_short_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, void* short_object);>
Returns the value of the C<value> field of L<Short|SPVM::Short> object I<short_object>.
I<short_object> must be a L<Short|SPVM::Short> object.
=head2 get_int_object_value
C<int32_t (*get_int_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, void* int_object);>
Returns the value of the C<value> field of L<Int|SPVM::Int> object I<int_object>.
I<int_object> must be an L<Int|SPVM::Int> object.
=head2 get_long_object_value
C<int64_t (*get_long_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, void* long_object);>
Returns the value of the C<value> field of L<Long|SPVM::Long> object I<long_object>.
I<long_object> must be a L<Long|SPVM::Long> object.
=head2 get_float_object_value
C<float (*get_float_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, void* float_object);>
Returns the value of the C<value> field of L<Float|SPVM::Float> object I<float_object>.
I<float_object> must be a L<Float|SPVM::Float> object.
=head2 get_double_object_value
C<double (*get_double_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, void* double_object);>
Returns the value of the C<value> field of L<Double|SPVM::Double> object I<double_object>.
I<double_object> must be a L<Double|SPVM::Double> object.
=head2 no_free
C<int32_t (*no_free)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);>
If C<no_free> flag of the object I<object> is enabled, retunrs 1, otherwise retunrs 0.
=head2 set_no_free
C<void (*set_no_free)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, int32_t no_free);>
If I<no_free> is a true value, enables C<no_free> flag of the object I<object>, otherwise disables C<no_free> flag.
=head2 get_stack_tmp_buffer
C<char* (*get_stack_tmp_buffer)(SPVM_ENV* env, SPVM_VALUE* stack);>
Returns the temporary buffer on the runtime stack I<stack>.
The byte size of the temporary buffer is L</"SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE">.
=head2 print_exception_to_stderr
C<void (*print_exception_to_stderr)(SPVM_ENV* env, SPVM_VALUE* stack);>
Prints C<"[An exception is converted to a warning]\n"> to L<SPVM's standard error|SPVM::Document::Language::System/"Standard Streams">.
And prints the current exception to L<SPVM's standard error|SPVM::Document::Language::System/"Standard Streams">.
And prints C<"\n"> to L<SPVM's standard error|SPVM::Document::Language::System/"Standard Streams">.
=head2 dump_object_internal
C<void* (*dump_object_internal)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);>
Dumps the internal information of the object I<object>, creates a new string from the information, and returns it.
The dumped internal information looks like the following one.
[Object Intenal:0x55dd87806090]
pointer:(nil)
weaken_backrefs_length:0
ref_count:1
basic_type_name:Point
type_dimension:0
flag:
length:2
If I<object> is NULL, returns a string C<"undef">.
=head2 get_seed
C<int32_t (*get_seed)(SPVM_ENV* env, SPVM_VALUE* stack);>
Returns the value of C<seed> stack variable on the runtime stack I<stack>.
=head2 set_seed
C<void (*set_seed)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t seed);>
Sets the value of C<seed> stack variable on the runtime stack I<stack> to I<seed>.
If the value of C<seed_initialized> stack variable on the runtime stack I<stack> is 0, sets it to 1.
=head2 seed_initialized
C<int32_t (*seed_initialized)(SPVM_ENV* env, SPVM_VALUE* stack);>
Returns the value of C<seed_initialized> stack variable on the runtime stack I<stack>.
=head2 get_basic_type_name_in_version_from
C<const char* (*get_basic_type_name_in_version_from)(SPVM_ENV* env, SPVM_VALUE* stack, void* basic_type);>
Returns the basic type name specified by C<version_from> statement. If it is not specified, returns NULL.
=head2 set_command_info_warning
C<int32_t (*set_command_info_warning)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t warning);>
Sets L<CommandInfo#WARNING|SPVM::CommandInfo/"WARNING"> class variable to I<warning>.
If an exception is thrown, returns the basic type ID of L<Error|SPVM::Error> classs, otherwise returns 0.
This native API should not be used unless special purposes are intended.
=head2 destroy_cache_class_vars
C<void (*destroy_cache_class_vars)(L<SPVM_ENV* env|SPVM::Document::NativeClass/"Runtime Environment">, L<SPVM_VALUE* stack|SPVM::Document::NativeClass/"Runtime Stack">);>
Sets all class variables of all classes that is a object type and C<cache> class variable attribute is specified to undef.
=head1 Native API IDs
Native APIs have its IDs.
0 runtime
1 api
2 new_env,
3 free_env,
4 call_init_methods,
5 set_command_info_program_name,
6 set_command_info_argv,
7 set_command_info_basetime,
8 destroy_class_vars,
9 args_width,
10 get_object_basic_type,
11 get_object_basic_type_id,
12 get_object_basic_type_name,
13 get_object_type_dimension,
14 get_basic_type,
15 get_basic_type_by_name,
16 get_basic_type_by_id,
17 get_basic_type_id,
18 get_basic_type_id_by_name,
19 get_class_var,
20 get_class_var_byte,
21 get_class_var_short,
22 get_class_var_int,
23 get_class_var_long,
24 get_class_var_float,
25 get_class_var_double,
26 get_class_var_object,
27 get_class_var_string,
28 set_class_var_byte,
29 set_class_var_short,
30 set_class_var_int,
31 set_class_var_long,
32 set_class_var_float,
33 set_class_var_double,
34 set_class_var_object,
35 set_class_var_string,
36 get_class_var_object_ref,
37 get_class_var_byte_by_name,
38 get_class_var_short_by_name,
39 get_class_var_int_by_name,
40 get_class_var_long_by_name,
41 get_class_var_float_by_name,
42 get_class_var_double_by_name,
43 get_class_var_object_by_name,
44 get_class_var_string_by_name,
45 set_class_var_byte_by_name,
46 set_class_var_short_by_name,
47 set_class_var_int_by_name,
48 set_class_var_long_by_name,
49 set_class_var_float_by_name,
50 set_class_var_double_by_name,
51 set_class_var_object_by_name,
52 set_class_var_string_by_name,
53 get_field,
54 get_field_static,
55 get_field_byte,
56 get_field_short,
57 get_field_int,
58 get_field_long,
59 get_field_float,
60 get_field_double,
61 get_field_object,
62 get_field_string,
63 set_field_byte,
64 set_field_short,
65 set_field_int,
66 set_field_long,
67 set_field_float,
68 set_field_double,
69 set_field_object,
70 set_field_string,
71 get_field_byte_by_name,
72 get_field_short_by_name,
73 get_field_int_by_name,
74 get_field_long_by_name,
75 get_field_float_by_name,
76 get_field_double_by_name,
77 get_field_object_by_name,
78 get_field_string_by_name,
79 set_field_byte_by_name,
80 set_field_short_by_name,
81 set_field_int_by_name,
82 set_field_long_by_name,
83 set_field_float_by_name,
84 set_field_double_by_name,
85 set_field_object_by_name,
86 set_field_string_by_name,
87 get_field_string_chars_by_name,
88 get_method,
89 get_class_method,
90 get_instance_method_static,
91 get_instance_method,
92 call_method_no_mortal,
93 call_method,
94 call_class_method_by_name,
95 call_instance_method_static_by_name,
96 call_instance_method_by_name,
97 new_object_no_mortal,
98 new_object,
99 new_object_by_name,
100 new_pointer_object_no_mortal,
101 new_pointer_object,
102 new_pointer_object_by_name,
103 get_pointer,
104 set_pointer,
105 new_string_nolen_no_mortal,
106 new_string_nolen,
107 new_string_no_mortal,
108 new_string,
109 new_byte_array_no_mortal,
110 new_byte_array,
111 new_short_array_no_mortal,
112 new_short_array,
113 new_int_array_no_mortal,
114 new_int_array,
115 new_long_array_no_mortal,
116 new_long_array,
117 new_float_array_no_mortal,
118 new_float_array,
119 new_double_array_no_mortal,
120 new_double_array,
121 new_object_array_no_mortal,
122 new_object_array,
123 new_object_array_by_name,
124 new_string_array,
125 new_muldim_array_no_mortal,
126 new_muldim_array,
127 new_muldim_array_by_name,
128 new_mulnum_array_no_mortal,
129 new_mulnum_array,
130 new_mulnum_array_by_name,
131 new_array_proto_no_mortal,
132 new_array_proto,
133 length,
134 get_elems_byte,
135 get_elems_short,
136 get_elems_int,
137 get_elems_long,
138 get_elems_float,
139 get_elems_double,
140 get_elem_object,
141 get_elem_string,
142 set_elem_object,
143 set_elem_string,
144 get_chars,
145 get_bool_object_value,
146 concat_no_mortal,
147 concat,
148 shorten,
149 make_read_only,
150 is_read_only,
151 print,
152 print_stderr,
153 dump_no_mortal,
154 dump,
155 dumpc,
156 copy_no_mortal,
157 copy,
158 get_spvm_version_string,
159 get_spvm_version_number,
160 get_version_string,
161 get_version_number,
162 die,
163 get_exception,
164 set_exception,
165 new_stack_trace_no_mortal,
166 new_stack_trace,
167 is_string,
168 is_class,
169 is_pointer_class,
170 is_array,
171 is_object_array,
172 is_numeric_array,
173 is_mulnum_array,
174 isa,
175 isa_by_name,
176 is_type,
177 is_type_by_name,
178 elem_isa,
179 get_elem_size,
180 get_type_name_no_mortal,
181 get_type_name,
182 get_compile_type_name_no_mortal,
183 get_compile_type_name,
184 enter_scope,
185 leave_scope,
186 push_mortal,
187 weaken,
188 isweak,
189 unweaken,
190 strerror_string,
191 strerror_string_nolen,
192 strerror,
193 strerror_nolen,
194 is_binary_compatible_object,
195 is_binary_compatible_stack,
196 new_stack,
197 free_stack,
198 get_field_object_defined_and_has_pointer_by_name,
199 get_field_object_ref,
200 get_field_object_ref_by_name,
201 check_bootstrap_method
202 assign_object,
203 new_string_array_no_mortal,
204 new_memory_block,
205 free_memory_block,
206 get_memory_blocks_count,
207 say,
208 warn,
209 spvm_stdin,
210 spvm_stdout,
211 spvm_stderr,
212 new_array_proto_element_no_mortal
213 new_array_proto_element
214 get_byte_object_value
215 get_short_object_value
216 get_int_object_value
217 get_long_object_value
218 get_float_object_value
219 get_double_object_value
220 no_free
221 set_no_free
222 get_stack_tmp_buffer
223 print_exception_to_stderr
224 dump_object_internal
225 get_seed
226 set_seed
227 seed_initialized
228 get_basic_type_name_in_version_from
229 set_command_info_warning
230 destroy_cache_class_vars
=head1 Constant Values
=head2 Basic Type IDs
=begin html
<table>
<tr>
<th>ID</th><th>Name</th><th>Description</th>
</tr>
<tr>
<td>0</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_UNKNOWN</td><td>The basic type ID for unknown types</td>
</tr>
<tr>
<td>1</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_UNDEF</td><td>The basic type ID of the undef type</td>
</tr>
<tr>
<td>2</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_VOID</td><td>The basic type ID of the void type</td>
</tr>
<tr>
<td>3</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_BYTE</td><td>The basic type ID of byte type</td>
</tr>
<tr>
<td>4</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_SHORT</td><td>The basic type ID of short type</td>
</tr>
<tr>
<td>5</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_INT</td><td>The basic type ID of int type</td>
</tr>
<tr>
<td>6</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_LONG</td><td>The basic type ID of long type</td>
</tr>
<tr>
<td>7</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_FLOAT</td><td>The basic type ID of float type</td>
</tr>
<tr>
<td>8</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_DOUBLE</td><td>The basic type ID of double type</td>
</tr>
<tr>
<td>9</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_STRING</td><td>The basic type ID of string type</td>
</tr>
<tr>
<td>10</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_ANY_OBJECT</td><td>The basic type ID of the any object type</td>
</tr>
<tr>
<td>11</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_BYTE_CLASS</td><td>The basic type ID of the <a href="https://metacpan.org/pod/SPVM::Byte">Byte</a> class</td>
</tr>
<tr>
<td>12</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_SHORT_CLASS</td><td>The basic type ID of the <a href="https://metacpan.org/pod/SPVM::Short">Short</a> class</td>
</tr>
<tr>
<td>13</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_INT_CLASS</td><td>The basic type ID of the <a href="https://metacpan.org/pod/SPVM::Int">Int</a> class</td>
</tr>
<tr>
<td>14</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_LONG_CLASS</td><td>The basic type ID of the <a href="https://metacpan.org/pod/SPVM::Long">Long</a> class</td>
</tr>
<tr>
<td>15</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_FLOAT_CLASS</td><td>The basic type ID of the <a href="https://metacpan.org/pod/SPVM::Float">Float</a> class</td>
</tr>
<tr>
<td>16</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_DOUBLE_CLASS</td><td>The basic type ID of the <a href="https://metacpan.org/pod/SPVM::Double">Double</a> class</td>
</tr>
<tr>
<td>17</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_BOOL_CLASS</td><td>The basic type ID of the <a href="https://metacpan.org/pod/SPVM::Bool">Bool</a> class</td>
</tr>
<tr>
<td>18</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS</td><td>The basic type ID of the <a href="https://metacpan.org/pod/SPVM::Error">Error</a> class</td>
</tr>
<tr>
<td>19</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_SYSTEM_CLASS</td><td>The basic type ID of the <a href="https://metacpan.org/pod/SPVM::Error::System">Error::System</a> class</td>
</tr>
<tr>
<td>20</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_NOT_SUPPORTED_CLASS</td><td>The basic type ID of the <a href="https://metacpan.org/pod/SPVM::Error::NotSupported">Error::NotSupported</a> class</td>
</tr>
<tr>
<td>21</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_COMMAND_INFO_CLASS</td><td>The basic type ID of the <a href="https://metacpan.org/pod/SPVM::CommandInfo">CommandInfo</a> class</td>
</tr>
<tr>
<td>22</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_ADDRESS_CLASS</td><td>The basic type ID of the <a href="https://metacpan.org/pod/SPVM::Address">Address</a> class</td>
</tr>
<tr>
<td>23</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_COMPILE_CLASS</td><td>The basic type ID of the <a href="https://metacpan.org/pod/SPVM::Error::Compile">Error::Compile</a> class</td>
</tr>
<tr>
<td>24</td><td>SPVM_NATIVE_C_BASIC_TYPE_ID_SPVM_CLASS</td><td>The basic type ID of the <a href="https://metacpan.org/pod/SPVM::Error::Compile">Error::Compile</a> class</td>
</tr>
</table>
=end html
=head2 Basic Type Category IDs
=begin html
<table>
<tr>
<th>ID</th><th>Name</th><th>Description</th>
</tr>
<tr>
<td>0</td><td>SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_UNKNOWN</td><td>The basic type category for unknown types</td>
</tr>
<tr>
<td>1</td><td>SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_UNDEF</td><td>The basic type category for the undef type</td>
</tr>
<tr>
<td>2</td><td>SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_VOID</td><td>The basic type category for the void type</td>
</tr>
<tr>
<td>3</td><td>SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_NUMERIC</td><td>The basic type category for numeric types</td>
</tr>
<tr>
<td>4</td><td>SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_MULNUM</td><td>The basic type category for multi-numeric types</td>
</tr>
<tr>
<td>5</td><td>SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_STRING</td><td>The basic type category for string type</td>
</tr>
<tr>
<td>6</td><td>SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_CLASS</td><td>The basic type category for class types</td>
</tr>
<tr>
<td>7</td><td>SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_INTERFACE</td><td>The basic type category for interface types</td>
</tr>
<tr>
<td>8</td><td>SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_ANY_OBJECT</td><td>The basic type category for the any object type</td>
</tr>
</table>
=end html
=head2 Type Flag IDs
=begin html
<table>
<tr>
<th>ID</th><th>Name</th><th>Description</th>
</tr>
<tr>
<td>1</td><td>SPVM_NATIVE_C_TYPE_FLAG_REF</td><td>A flag indicating that it is a reference type</td>
</tr>
<tr>
<td>2</td><td>SPVM_NATIVE_C_TYPE_FLAG_MUTABLE</td><td>A flag indicating that a mutable modifier is present</td>
</tr>
</table>
=end html
=head2 SPVM_NATIVE_VERSION_NUMBER
C<SPVM_NATIVE_VERSION_NUMBER>
The version number of the SPVM language.
Examples:
// 0.989062
double spvm_version_number = SPVM_NATIVE_VERSION_NUMBER;
=head2 SPVM_NATIVE_VERSION_STRING
C<SPVM_NATIVE_VERSION_STRING>
The version string of the SPVM language. This is a constant string.
Examples:
// "0.989062"
const char* spvm_version_string = SPVM_NATIVE_VERSION_STRING;
=head2 SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE
C<SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE>
The byte size of the temporary buffer in a runtime stack. This value is 512.
=head1 Macro Functions
=head2 spvm_warn
C<#define spvm_warn(format, ...)>
Prints the formatted message I<format> to C<stderr> with the current function name, the current file name, and the current line number.
I<format> must be the C<char*> type.
Examples:
spvm_warn("Hello");
spvm_warn("Hello %s%d", "Foo", 3);
=head2 spvm_warnf
C<#define spvm_warnf(stream, format, ...)>
Prints the formatted message I<format> to the stream I<stream> with the current function name, the current file name, and the current line number.
I<format> must be the C<char*> type.
I<stream> must be C<FILE> type.
Examples:
spvm_warnf(env->spvm_stderr(env, stack), "Hello");
spvm_warnf(env->spvm_stderr(env, stack), "Hello %s%d", "Foo", 3);
=head2 SPVM_NATIVE_GET_POINTER
C<#define SPVM_NATIVE_GET_POINTER(object)>
Returns the pointer stored in the object I<object> and returns it.
The return type is the C<void*> type.
=head2 SPVM_NATIVE_SET_POINTER
C<#define SPVM_NATIVE_SET_POINTER(object, pointer)>
Sets the pointer I<pointer> of the object I<object>.
=head1 Data Structures
=head2 SPVM_OBJECT
C<SPVM_OBJECT> is an internal data structure for an SPVM object.
typedef struct spvm_object SPVM_OBJECT
struct spvm_object {
void* pointer;
SPVM_WEAKEN_BACKREF* weaken_backref_head;
SPVM_RUNTIME_BASIC_TYPE* basic_type;
int32_t ref_count;
uint8_t type_dimension;
uint8_t flag;
int32_t length;
};
=head1 See Also
=over 2
=item * L<SPVM::Document::NativeAPI::Allocator>
=item * L<SPVM::Document::NativeAPI::StringBuffer>
=item * L<SPVM::Document::NativeAPI::Compiler>
=item * L<SPVM::Document::NativeAPI::ClassFile>
=item * L<SPVM::Document::NativeAPI::Runtime>
=item * L<SPVM::Document::NativeAPI::BasicType>
=item * L<SPVM::Document::NativeAPI::ClassVariable>
=item * L<SPVM::Document::NativeAPI::Field>
=item * L<SPVM::Document::NativeAPI::Method>
=item * L<SPVM::Document::NativeAPI::Argument>
=item * L<SPVM::Document::NativeAPI::Type>
=item * L<SPVM::Document::NativeAPI::Internal>
=item * L<SPVM::Document::NativeAPI::Mutex>
=item * L<SPVM::Document::NativeClass>
=item * L<SPVM::Document>
=item * L<Examples using SPVM native APIs|https://github.com/yuki-kimoto/SPVM/tree/master/examples/native>
=back
=head1 Copyright & License
Copyright (c) 2023 Yuki Kimoto
MIT License