Name

SPVM::Document::NativeAPI - Native APIs

Description

The native APIs in SPVM are the APIs written by the C language for SPVM operations.

These APIs are available in native classes.

Native APIs

runtime

void* runtime;

The runtime for this runtime environment.

Examples:

void* runtime = env->runtime;

api

SPVM_ENV_API* api;

Returns SPVM_ENV_API object. This object have the following fields for other native APIs.

Examples:

SPVM_API_BASIC_TYPE* api_basic_type = env->api->basic_type;

new_env

SPVM_ENV* (*new_env)();

Creates a new runtime environment.

This native API should not be used unless special purposes are intended.

free_env

void (*free_env)(SPVM_ENV* env);

Frees the runtime environment env.

This native API should not be used unless special purposes are intended.

call_init_methods

int32_t (*call_init_methods)(SPVM_ENV* env, SPVM_VALUE* stack);

Calls 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.

set_command_info_program_name

int32_t (*set_command_info_program_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* obj_program_name);

Sets the program name obj_program_name to 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.

set_command_info_argv

int32_t (*set_command_info_argv)(SPVM_ENV* env, SPVM_VALUE* stack, void* obj_argv);

Sets the command line arguments obj_argv to 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.

set_command_info_base_time

int32_t (*set_command_info_base_time)(SPVM_ENV* env, SPVM_VALUE* stack, int64_t base_time);

Sets the base time base_time to 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.

destroy_class_vars

void (*destroy_class_vars)(SPVM_ENV* env, SPVM_VALUE* stack);

Destroys the class variables of all classes.

This native API should not be used unless special purposes are intended.

args_width

int32_t (*args_width)(SPVM_ENV* env, SPVM_VALUE* stack);

Returns the width of the arguments given by the caller.

Examples:

int32_t args_width = env->args_width(env, stack);

get_object_basic_type

void* (*get_object_basic_type)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

Returns the basic type of the object object.

get_object_basic_type_id

int32_t (*get_object_basic_type_id)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

Returns the basic type ID of the object object.

get_object_basic_type_name

const char* (*get_object_basic_type_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

Returns the basic type name of the object object.

get_object_type_dimension

int32_t (*get_object_type_dimension)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

Returns the type dimension of the object object.

get_basic_type

void* (*get_basic_type)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name);

Searches a basic type given the basic type name basic_type_name.

If it is found, returns it. Otherwise, returns NULL.

get_basic_type_by_name

void* (*get_basic_type_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);

Searches a basic type given the basic type name basic_type_name.

If it is found, returns it. Otherwise, an exception is thrown.

The function name func_name, the file path file, and the line number line must be given for the exception stack trace.

If the basic type given by basic_type_name is not found, an exception is thrown.

If an exception is thrown, error_id is set to a non-zero value. Otherwise, it is set to 0.

get_basic_type_by_id

void* (*get_basic_type_by_id)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id);

Searches a basic type given the basic type ID basic_type_id.

If it is found, returns it. Otherwise, returns NULL.

get_basic_type_id

int32_t (*get_basic_type_id)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name);

Searches a basic type given the basic type name 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");

get_basic_type_id_by_name

int32_t (*get_basic_type_id_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 basic_type_name.

The function name func_name, the file path file, and the line number line must be given for the exception stack trace.

If the basic type given by basic_type_name is not found, an exception is thrown.

If an exception is thrown, error_id is set to a non-zero value. Otherwise, it is set to 0.

get_class_var

void* (*get_class_var)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* class_var_name);

Searches a class variable given the basic type name basic_type_name and the class variable name class_var_name.

If it is found, returns it. Otherwise, returns NULL.

Examples:

void* class_var = env->get_class_var(env, stack, "MyClass", "$VAR");

get_class_var_byte

int8_t (*get_class_var_byte)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var);

Returns the value of the class variable class_var interpreting its type is byte type.

get_class_var_short

int16_t (*get_class_var_short)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var);

Returns the value of the class variable class_var interpreting its type is short type.

get_class_var_int

int32_t (*get_class_var_int)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var);

Returns the value of the class variable class_var interpreting its type is int type.

get_class_var_long

int64_t (*get_class_var_long)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var);

Returns the value of the class variable class_var interpreting its type is long type.

get_class_var_float

float (*get_class_var_float)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var);

Returns the value of the class variable class_var interpreting its type is float type.

get_class_var_double

double (*get_class_var_double)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var);

Returns the value of the class variable class_var interpreting its type is double type.

get_class_var_object

void* (*get_class_var_object)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var);

Returns the value of the class variable class_var interpreting its type is an object type.

get_class_var_string

void* (*get_class_var_string)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var);

Returns the value of the class variable class_var interpreting its type is string type.

set_class_var_byte

void (*set_class_var_byte)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var, int8_t value);

Sets value to the class variable class_var interpreting its type is byte type.

set_class_var_short

void (*set_class_var_short)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var, int16_t value);

Sets value to the class variable class_var interpreting its type is short type.

set_class_var_int

void (*set_class_var_int)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var, int32_t value);

Sets value to the class variable class_var interpreting its type is int type.

set_class_var_long

void (*set_class_var_long)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var, int64_t value);

Sets value to the class variable class_var interpreting its type is long type.

set_class_var_float

void (*set_class_var_float)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var, float value);

Sets value to the class variable class_var interpreting its type is float type.

set_class_var_double

void (*set_class_var_double)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var, double value);

Sets value to the class variable class_var interpreting its type is double type.

set_class_var_object

void (*set_class_var_object)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var, void* value);

Sets value to the class variable class_var interpreting its type is an object type.

set_class_var_string

void (*set_class_var_string)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var, void* value);

Sets value to the class variable class_var interpreting its type is string type.

get_class_var_object_ref

void** (*get_class_var_object_ref)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var);

Returns the address where the value of the class variable class_var is stored.

get_class_var_byte_by_name

int8_t (*get_class_var_byte_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 basic_type_name and the class variable name class_var_name, and returns the value.

The type of the filed must be byte type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If basic_type_name is not found, an exception is set and error_id is set to the basic type id of Error class.

If class_var_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the class variable type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

get_class_var_short_by_name

int16_t (*get_class_var_short_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 basic_type_name and the class variable name class_var_name, and returns the value casting to short type.

The type of the filed must be short type or smaller numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If basic_type_name is not found, an exception is set and error_id is set to the basic type id of Error class.

If class_var_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the class variable type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

get_class_var_int_by_name

int32_t (*get_class_var_int_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 basic_type_name and the class variable name class_var_name, and returns the value casting to int type.

The type of the filed must be int type or smaller numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If basic_type_name is not found, an exception is set and error_id is set to the basic type id of Error class.

If class_var_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the class variable type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

get_class_var_long_by_name

int64_t (*get_class_var_long_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 basic_type_name and the class variable name class_var_name, and returns the value casting to long type.

The type of the filed must be long type or smaller numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If basic_type_name is not found, an exception is set and error_id is set to the basic type id of Error class.

If class_var_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the class variable type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

get_class_var_float_by_name

float (*get_class_var_float_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 basic_type_name and the class variable name class_var_name, and returns the value casting to float type.

The type of the filed must be float type or smaller numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If basic_type_name is not found, an exception is set and error_id is set to the basic type id of Error class.

If class_var_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the class variable type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

get_class_var_double_by_name

double (*get_class_var_double_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 basic_type_name and the class variable name class_var_name, and returns the value casting to double type.

The type of the filed must be double type or smaller numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If basic_type_name is not found, an exception is set and error_id is set to the basic type id of Error class.

If class_var_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the class variable type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

get_class_var_object_by_name

void* (*get_class_var_object_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 basic_type_name and the class variable name class_var_name, and returns the value.

The type of the filed must be an object type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If basic_type_name is not found, an exception is set and error_id is set to the basic type id of Error class.

If class_var_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the class variable type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

get_class_var_string_by_name

void* (*get_class_var_string_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 "get_class_var_object_by_name" native API.

set_class_var_byte_by_name

void (*set_class_var_byte_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 basic_type_name and the class variable name class_var_name to the value value casting to the field type.

The type of the filed must be byte type or larger numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If basic_type_name is not found, an exception is set and error_id is set to the basic type id of Error class.

If class_var_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the class variable type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

set_class_var_short_by_name

void (*set_class_var_short_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 basic_type_name and the class variable name class_var_name to the value value casting to the field type.

The type of the filed must be short type or larger numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If basic_type_name is not found, an exception is set and error_id is set to the basic type id of Error class.

If class_var_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the class variable type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

set_class_var_int_by_name

void (*set_class_var_int_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 basic_type_name and the class variable name class_var_name to the value value casting to the field type.

The type of the filed must be int type or larger numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If basic_type_name is not found, an exception is set and error_id is set to the basic type id of Error class.

If class_var_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the class variable type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

set_class_var_long_by_name

void (*set_class_var_long_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 basic_type_name and the class variable name class_var_name to the value value casting to the field type.

The type of the filed must be long type or larger numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If basic_type_name is not found, an exception is set and error_id is set to the basic type id of Error class.

If class_var_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the class variable type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

set_class_var_float_by_name

void (*set_class_var_float_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 basic_type_name and the class variable name class_var_name to the value value casting to the field type.

The type of the filed must be float type or larger numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If basic_type_name is not found, an exception is set and error_id is set to the basic type id of Error class.

If class_var_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the class variable type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

set_class_var_double_by_name

void (*set_class_var_double_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 basic_type_name and the class variable name class_var_name to the value value.

The type of the filed must be double type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If basic_type_name is not found, an exception is set and error_id is set to the basic type id of Error class.

If class_var_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the class variable type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

set_class_var_object_by_name

void (*set_class_var_object_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 class_var given the basic type name basic_type_name and the class variable name class_var_name.

Sets the class variable specified by the basic type name basic_type_name and the class variable name class_var_name to the value value.

The type of the filed must be an object type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If basic_type_name is not found, an exception is set and error_id is set to the basic type id of Error class.

If class_var_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the class variable type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

set_class_var_string_by_name

void (*set_class_var_string_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 "set_class_var_object_by_name" native API.

get_field

void* (*get_field_by_index)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* field_name);

Searches a field object given the object object and the field name field_name.

If it is found, returns it. Otherwise, returns NULL.

Examples:

void* field = env->get_field(env, stack, object, "x");

get_field_static

void* (*get_field_static)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* field_name);

Searches a field object given the basic type name basic_type_name and the field name field_name.

If it is found, returns it. Otherwise, returns NULL.

Examples:

void* field = env->get_field_static(env, stack, "Point", "x");

get_field_byte

int8_t (*get_field_byte)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* field);

Returns the value of the field field of the object object interpreting its type is byte type.

get_field_short

int16_t (*get_field_short)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* field);

Returns the value of the field field of the object object interpreting its type is short type.

get_field_int

int32_t (*get_field_int)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* field);

Returns the value of the field field of the object object interpreting its type is int type.

get_field_long

int64_t (*get_field_long)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* field);

Returns the value of the field field of the object object interpreting its type is long type.

get_field_float

float (*get_field_float)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* field);

Returns the value of the field field of the object object interpreting its type is float type.

get_field_double

double (*get_field_double)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* field);

Returns the value of the field field of the object object interpreting its type is double type.

get_field_object

void* (*get_field_object)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* field);

Returns the value of the field field of the object object interpreting its type is an object type.

get_field_string

void* (*get_field_string)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* field);

Returns the value of the field field of the object object interpreting its type is string type.

set_field_byte

void (*set_field_byte)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* field, int8_t value);

Sets value to the field field of the object object interpreting its type is byte type.

set_field_short

void (*set_field_short)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* field, int16_t value);

Sets value to the field field of the object object interpreting its type is short type.

set_field_int

void (*set_field_int)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* field, int32_t value);

Sets value to the field field of the object object interpreting its type is int type.

set_field_long

void (*set_field_long)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* field, int64_t value);

Sets value to the field field of the object object interpreting its type is long type.

set_field_float

void (*set_field_float)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* field, float value);

Sets value to the field field of the object object interpreting its type is float type.

set_field_double

void (*set_field_double)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* field, double value);

Sets value to the field field of the object object interpreting its type is double type.

set_field_object

void (*set_field_object)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* field, void* value);

Sets value to the field field of the object object interpreting its type is an object type.

set_field_string

void (*set_field_string)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* field, void* value);

Sets value to the field field interpreting its type is string type.

get_field_byte_by_name

int8_t (*get_field_byte_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 object and the field name field_name.

The type of the filed must be byte type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If object is not a class type, an exception is set and error_id is set to the basic type id of Error class.

If field_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the field type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

get_field_short_by_name

int16_t (*get_field_short_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 object and the field name field_name, and returns the value casting to short type.

The type of the filed must be short type or smaller numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If object is not a class type, an exception is set and error_id is set to the basic type id of Error class.

If field_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the field type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

get_field_int_by_name

int32_t (*get_field_int_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 object and the field name field_name, and returns the value casting to int type.

The type of the filed must be int type or smaller numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If object is not a class type, an exception is set and error_id is set to the basic type id of Error class.

If field_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the field type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

get_field_long_by_name

int64_t (*get_field_long_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 object and the field name field_name, and returns the value casting to long type.

The type of the filed must be long type or smaller numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If object is not a class type, an exception is set and error_id is set to the basic type id of Error class.

If field_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the field type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

get_field_float_by_name

float (*get_field_float_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 object and the field name field_name, and returns the value casting to float type.

The type of the filed must be float type or smaller numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If object is not a class type, an exception is set and error_id is set to the basic type id of Error class.

If field_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the field type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

get_field_double_by_name

double (*get_field_double_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 object and the field name field_name, and returns the value casting to double type.

The type of the filed must be double type or smaller numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If object is not a class type, an exception is set and error_id is set to the basic type id of Error class.

If field_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the field type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

get_field_object_by_name

void* (*get_field_object_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 object and the field name field_name.

The type of the filed must be an object type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If object is not a class type, an exception is set and error_id is set to the basic type id of Error class.

If field_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the field type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

get_field_string_by_name

void* (*get_field_string_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);

The same as "get_field_object_by_name" native API.

set_field_byte_by_name

void (*set_field_byte_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 object and the field name field_name to the value value casting to the field type.

The type of the filed must be byte type or larger numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If object is not a class type, an exception is set and error_id is set to the basic type id of Error class.

If field_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the field type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

set_field_short_by_name

void (*set_field_short_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 object and the field name field_name to the value value casting to the field type.

The type of the filed must be short type or larger numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If object is not a class type, an exception is set and error_id is set to the basic type id of Error class.

If field_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the field type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

set_field_int_by_name

void (*set_field_int_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 object and the field name field_name to the value value casting to the field type.

The type of the filed must be int type or larger numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If object is not a class type, an exception is set and error_id is set to the basic type id of Error class.

If field_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the field type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

set_field_long_by_name

void (*set_field_long_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 object and the field name field_name to the value value casting to the field type.

The type of the filed must be long type or larger numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If object is not a class type, an exception is set and error_id is set to the basic type id of Error class.

If field_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the field type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

set_field_float_by_name

void (*set_field_float_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 object and the field name field_name to the value value casting to the field type.

The type of the filed must be float type or larger numeric type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If object is not a class type, an exception is set and error_id is set to the basic type id of Error class.

If field_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the field type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

set_field_double_by_name

void (*set_field_double_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 object and the field name field_name to the value value.

The type of the filed must be double type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If object is not a class type, an exception is set and error_id is set to the basic type id of Error class.

If field_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the field type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

set_field_object_by_name

void (*set_field_object_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 object and the field name field_name to the value value.

The type of the filed must be an object type.

The function name func_name, the file path file, and the line number line are needed for the exception stack trace.

If this function succeeds, error_id is set to 0.

Exceptions:

If object is not a class type, an exception is set and error_id is set to the basic type id of Error class.

If field_name is not found, an exception is set and error_id ise set to the basic type id of Error class.

If the field type is invalid, an exception is set and error_id ise set to the basic type id of 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; }

set_field_string_by_name

void (*set_field_string_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 "set_field_object_by_name" native API.

get_field_string_chars_by_name

const char* (*get_field_string_chars_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);

Calls the "get_field_string_by_name". If the return value is NULL, returns NULL. Otherwise, calls the "get_chars" given the return value, and returns the return value of "get_chars" native API.

get_method

void* (*get_method)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* method_name);

Searches a method given the basic type name basic_type_name and the method name method_name.

If it is found, returns it. Otherwise, returns NULL.

Examples:

void* method = env->get_method(env, stack, "Foo", "get");

get_class_method

void* (*get_class_method)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* method_name);

Searches a class method given the basic type name basic_type_name and the method name method_name.

If it is found, returns it. Otherwise, returns NULL.

Examples:

void* method = env->get_class_method(env, stack, "Foo", "get");

get_instance_method_static

void* (*get_instance_method_static)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* method_name);

Searches an instance method given the basic type name basic_type_name and the method name method_name.

If found, returns it. Otherwise, returns NULL.

Examples:

void* method = env->get_instance_method_static(env, stack, "Foo", "get");

get_instance_method

void* (*get_instance_method)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* method_name);

Searches an instance method given the object object and the method name method_name.

If it is found, returns it. Otherwise, returns NULL.

Examples:

void* method = env->get_instance_method(env, stack, object, "get");

call_method_no_mortal

int32_t (*call_method_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, void* method, int32_t args_width);

Calls the method method given the width of the argument args_width.

If the method throws an exception, returns a basic type ID of an error class. Otherwise, returns 0.

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 "call_method" native API.

call_method

int32_t (*call_method)(SPVM_ENV* env, SPVM_VALUE* stack, void* method, int32_t args_width);

Calls "call_method_no_mortal" native API and if the type of the its return value is an object type, it is push to the native mortal stack, and returns it.

call_class_method_by_name

void (*call_class_method_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 basic_type_name and the method name method_name.

The function name func_name, the file path file, and the line number line must be given for the exception stack trace.

If the basic type given by basic_type_name is not found, an exception is thrown.

If the method given by 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, 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;
}

call_instance_method_static_by_name

void (*call_instance_method_static_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 basic_type_name and the method name method_name.

The function name func_name, the file path file, and the line number line must be given for the exception stack trace.

If the basic type given by basic_type_name is not found, an exception is thrown.

If the method given by method_name is not found, an exception is thrown.

If the found method is not an instance method, an exception is thrown.

If stack[0].oval is NULL, an exception is thrown.

If stack[0].oval cannot be assigned to the class given by basic_type_name, an exception is thrown.

If an exception is thrown, 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;
}

call_instance_method_by_name

void (*call_instance_method_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 method_name.

The function name func_name, the file path file, and the line number line must be given for the exception stack trace.

If stack[0].oval is NULL, an exception is thrown.

The type dimension of stack[0].oval must be 0. Otherwise, an exception is thrown.

If the basic type given by basic_type_name is not found, an exception is thrown.

If the instance method given by method_name is not found in the class or super classes, an exception is thrown.

If an exception is thrown, error_id is set to a non-zero value. Otherwise, it is set to 0.

new_object_no_mortal

void* (*new_object_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, void* basic_type);

Creates a new object given the basic type basic_type.

basic_type must not be NULL.

basic_type must be a class type.

If its memory allocation failed, returns NULL.

This native API should not be used unless special purposes are intended. Normally, use "new_object" native API.

new_object

void* (*new_object)(SPVM_ENV* env, SPVM_VALUE* stack, void* basic_type);

Calls new_object_no_mortal and push its return value to the 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);

new_object_by_name

void* (*new_object_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 basic_type_name, and returns it.

The create object is pushed to the native mortal stack.

The function name func_name, the file path file, and the line number line must be given for the exception stack trace.

If the basic type given by 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, 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; }

new_pointer_object_no_mortal

void* (*new_pointer_object_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, void* basic_type, void* pointer);

Calls "new_object_no_mortal" native API and sets the pointer 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 "new_pointer_object" native API.

new_pointer_object

void* (*new_pointer_object)(SPVM_ENV* env, SPVM_VALUE* stack, void* basic_type, void* pointer);

Calls "new_pointer_no_mortal" native API and push its return value to the 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);

new_pointer_object_by_name

void* (*new_pointer_object_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, void* pointer, int32_t* error_id, const char* func_name, const char* file, int32_t line);

Calls "new_object_by_name" native API and sets the pointer 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; }

get_pointer

void* (*get_pointer)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

Returns pointer value of the object object.

Examples:

strcut tm* tm = (struct tm*)env->get_pointer(env, stack, obj_tm);

set_pointer

void (*set_pointer)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* pointer);

Sets the pointer value of the object object to the pointer pointer.

new_string_nolen_no_mortal

void* (*new_string_nolen_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, const char* bytes);

Creates a new string object given a C string bytes. bytes must end with \0, and returns it.

If its memory allocation failed, returns NULL.

This native API should not be used unless special purposes are intended. Normally, use "new_string_nolen" native API.

new_string_nolen

void* (*new_string_nolen)(SPVM_ENV* env, SPVM_VALUE* stack, const char* bytes);

Calls "new_string_nolen_no_mortal" native API and push its return value to the native mortal stack, and returns it.

Examples:

void* str_obj = env->new_string_nolen(env, stack, "Hello World");

new_string_no_mortal

void* (*new_string_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, const char* bytes, int32_t length);

Creates a new string object given the C string bytes and the length length, and returns it.

If its memory allocation failed, returns NULL.

If the length of bytes is lower than length or bytes is NULL, The part that longer than the length of bytes is filled with \0.

This native API should not be used unless special purposes are intended. Normally, use "new_string" native API.

new_string

void* (*new_string)(SPVM_ENV* env, SPVM_VALUE* stack, const char* bytes, int32_t length);

Calls "new_string_no_mortal" native API and push its return value to the native mortal stack, and returns it.

Examples:

void* str_obj = env->new_string(env, stack, "Hello \0World", 11);

new_byte_array_no_mortal

void* (*new_byte_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);

Creates a new array of the byte[] type given the length length, and returns it.

If its memory allocation failed, returns NULL.

This native API should not be used unless special purposes are intended. Normally, use "new_byte_array" native API.

new_byte_array

void* (*new_byte_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);

Calls "new_byte_array_no_mortal" native API and push its return value to the native mortal stack, and returns it.

Examples:

void* byte_array = env->new_byte_array(env, stack, 100);

new_short_array_no_mortal

void* (*new_short_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);

Creates a new array of the short[] type given the length length, and returns it.

If its memory allocation failed, returns NULL.

This native API should not be used unless special purposes are intended. Normally, use "new_short_array" native API.

new_short_array

void* (*new_short_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);

Calls "new_short_array_no_mortal" native API and push its return value to the native mortal stack, and returns it.

Examples:

void* short_array = env->new_short_array(env, stack, 100);

new_int_array_no_mortal

void* (*new_int_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);

Creates a new array of the int[] type given the length length, and returns it.

If its memory allocation failed, returns NULL.

This native API should not be used unless special purposes are intended. Normally, use "new_int_array" native API.

new_int_array

void* (*new_int_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);

Calls "new_int_array_no_mortal" native API and push its return value to the native mortal stack, and returns it.

Examples:

void* int_array = env->new_int_array(env, stack, 100);

new_long_array_no_mortal

void* (*new_long_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);

Creates a new array of the long[] type given the length length, and returns it.

If its memory allocation failed, returns NULL.

This native API should not be used unless special purposes are intended. Normally, use "new_long_array" native API.

new_long_array

void* (*new_long_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);

Calls "new_long_array_no_mortal" native API and push its return value to the native mortal stack, and returns it.

Examples:

void* long_array = env->new_long_array(env, stack, 100);

new_float_array_no_mortal

void* (*new_float_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);

Creates a new array of float[] type given the length length, and returns it.

If its memory allocation failed, returns NULL.

This native API should not be used unless special purposes are intended. Normally, use "new_float_array" native API.

new_float_array

void* (*new_float_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);

Calls "new_float_array_no_mortal" native API and push its return value to the native mortal stack, and returns it.

Examples:

void* float_array = env->new_float_array(env, stack, 100);

new_double_array_no_mortal

void* (*new_double_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);

Creates a new array of double[] type given the length length, and returns it.

If its memory allocation failed, returns NULL.

This native API should not be used unless special purposes are intended. Normally, use "new_double_array" native API.

new_double_array

void* (*new_double_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);

Calls "new_double_array_no_mortal" native API and push its return value to the native mortal stack, and returns it.

Examples:

void* double_array = env->new_double_array(env, stack, 100);

new_object_array_no_mortal

void* (*new_object_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, void* basic_type, int32_t length);

Creates a new array of an object type given the basic type basic_type and the array length length, and returns it.

If its memory allocation failed, returns NULL.

This native API should not be used unless special purposes are intended. Normally, use "new_object_array" native API.

new_object_array

void* (*new_object_array)(SPVM_ENV* env, SPVM_VALUE* stack, void* basic_type, int32_t length);

Calls "new_object_array_no_mortal" native API and push its return value to the 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);

new_object_array_by_name

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 basic_type_name and the array length length, and returns it.

The created array is pushed to the native mortal stack.

If the basic type given by basic_type_name is not found, an exception is thrown.

If the creation of the array failed, an exception is thrown.

The function name func_name, the file path file, and the line number line must be given for the exception stack trace.

If an exception is thrown, error_id is set to a non-zero value. Otherwise, it is set to 0.

new_string_array

void* (*new_string_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);

Calls "new_string_array_no_mortal" native API and calls "push_mortal" native API given the return value.

new_muldim_array_no_mortal

void* (*new_muldim_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, void* basic_type, int32_t type_dimension, int32_t length);

Creates a new multi-dimensional array given the basic type basic_type, the type dimension type_dimension, and the array length length, and returns it.

If its memory allocation failed, returns NULL.

type_dimension must be less than or equals to 255.

This native API should not be used unless special purposes are intended. Normally, use "new_muldim_array" native API.

new_muldim_array

void* (*new_muldim_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, void* basic_type, int32_t type_dimension, int32_t length);

Calls "new_muldim_array_no_mortal" native API and push its return value to the 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);

new_muldim_array_by_name

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 basic_type_name, the type dimension type_dimension, and the array length length, and returns it.

The created array is pushed to the native mortal stack.

The function name func_name, the file path file, and the line number line must be given for the exception stack trace.

If the basic type given by 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, error_id is set to a non-zero value. Otherwise, it is set to 0.

new_mulnum_array_no_mortal

void* (*new_mulnum_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, void* basic_type, int32_t length);

Creates a new multi-numeric array given the basic type basic_type and the array length length, and returns it.

If its memory allocation failed, returns NULL.

This native API should not be used unless special purposes are intended. Normally, use "new_mulnum_array" native API.

new_mulnum_array

void* (*new_mulnum_array)(SPVM_ENV* env, SPVM_VALUE* stack, void* basic_type, int32_t length);

Calls "new_mulnum_array_no_mortal" native API and push its return value to the 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);

new_mulnum_array_by_name

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 basic_type_name, the type dimension type_dimension, and the array length length, and returns it.

The created array is pushed to the native mortal stack.

The function name func_name, the file path file, and the line number line must be given for the exception stack trace.

If the basic type given by 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, error_id is set to a non-zero value. Otherwise, it is set to 0.

new_array_proto_no_mortal

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 array and the length length, and returns it.

If array is NULL, returns NULL.

If the type of array is not an array type, returns NULL.

If length is lower than 0, returns NULL.

This native API should not be used unless special purposes are intended. Normally, use "new_array_proto" native API.

new_array_proto

void* (*new_array_proto)(SPVM_ENV* env, SPVM_VALUE* stack, void* array, int32_t length);

Calls "new_array_proto_no_mortal" native API and push its return value to the native mortal stack, and returns it.

length

int32_t (*length)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

Returns the value of length member variable in "SPVM_OBJECT" struct given the object object.

object must be defined.

If object is an array, length is its array length.

If object is a string, length is its string length.

Otherwise length is 0.

Examples:

int32_t length = env->length(env, stack, object);

get_elems_byte

int8_t* (*get_elems_byte)(SPVM_ENV* env, SPVM_VALUE* stack, void* array);

Returns the pointer to the elements of the byte array array.

Examples:

int8_t* values = env->get_elems_byte(env, stack, array);
values[3] = 5;

get_elems_short

int16_t* (*get_elems_short)(SPVM_ENV* env, SPVM_VALUE* stack, void* array);

Returns the pointer to the elements of the short array array.

Examples:

int16_t* values = env->get_elems_short(env, stack, array);
values[3] = 5;

get_elems_int

int32_t* (*get_elems_int)(SPVM_ENV* env, SPVM_VALUE* stack, void* array);

Returns the pointer to the elements of the int array array.

Examples:

int32_t* values = env->get_elems_int(env, stack, array);
values[3] = 5;

get_elems_long

int64_t* (*get_elems_long)(SPVM_ENV* env, SPVM_VALUE* stack, void* array);

Returns the pointer to the elements of the long array array.

Examples:

int64_t* values = env->get_elems_long(env, stack, array);
values[3] = 5;

get_elems_float

float* (*get_elems_float)(SPVM_ENV* env, SPVM_VALUE* stack, void* array);

Returns the pointer to the elements of the float array array.

Examples:

float* values = env->get_elems_float(env, stack, array);
values[3] = 1.5f;

get_elems_double

double* (*get_elems_double)(SPVM_ENV* env, SPVM_VALUE* stack, void* array);

Returns the pointer to the elements of the double array array.

Examples:

double* values = env->get_elems_double(env, stack, array);
values[3] = 1.5;

get_elem_object

void* (*get_elem_object)(SPVM_ENV* env, SPVM_VALUE* stack, void* array, int32_t index);

Returns the element of the array array at the index index.

Examples:

void* object = env->get_elem_object(env, stack, array, 3);

get_elem_string

void* (*get_elem_string)(SPVM_ENV* env, SPVM_VALUE* stack, void* array, int32_t index);

Calls "get_elem_object" native API, and returns its return value.

set_elem_object

void (*set_elem_object)(SPVM_ENV* env, SPVM_VALUE* stack, void* array, int32_t index, void* object);

Sets object to the element of the array array at the index index.

Examples:

env->get_elem_object(env, stack, array, 3, object);

set_elem_string

void (*set_elem_string)(SPVM_ENV* env, SPVM_VALUE* stack, void* array, int32_t index, void* string);

Calls "set_elem_object" native API.

get_chars

const char* (*get_chars)(SPVM_ENV* env, SPVM_VALUE* stack, void* string_object);

Returns the pointer to the characters stored in the string string_object.

Examples:

const char* chars = env->get_chars(env, stack, obj_string);

get_bool_object_value

int32_t (*get_bool_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, void* bool_object);

Returns the value stored in Bool object bool_object.

bool_object must not be NULL.

Examples:

int32_t bool_value = env->get_bool_object_value(env, stack, bool_object);

concat_no_mortal

void* (*concat_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, void* string1, void* string2);

Creates a new string concating two strings string1 and string2, and returns it.

If its memory allocation failed, returns NULL.

This native API should not be used unless special purposes are intended. Normally, use "concat" native API.

concat

void* (*concat)(SPVM_ENV* env, SPVM_VALUE* stack, void* string1, void* string2);

Calls "concat_no_mortal" native API and push its return value to the native mortal stack, and returns it.

shorten

void (*shorten)(SPVM_ENV* env, SPVM_VALUE* stack, void* string, int32_t new_length);

Shorten the string string to the length length.

Characters whose index is greater than length are are filled with \0.

If the string string is NULL, nothing is performed.

If the type of string is not string type, nothing is performed.

If string is read-only, nothing is performed.

If length is not greater than or equal to 0, nothing is performed.

If length is less than the length of string, nothing is performed.

make_read_only

void (*make_read_only)(SPVM_ENV* env, SPVM_VALUE* stack, void* string)

Makes the string string read-only.

If string is NULL, no operation is performed.

is_read_only

void (*make_read_only)(SPVM_ENV* env, SPVM_VALUE* stack, void* string)

If the string string is not NULL and it is read-only, returns 1, otherwise returns 0.

print

void (*print)(SPVM_ENV* env, SPVM_VALUE* stack, void* string);

Prints the string string to SPVM's standard output.

void (*print_stderr)(SPVM_ENV* env, SPVM_VALUE* stack, void* string);

Prints the string string to SPVM's standard error.

If string is NULL, this method produces no output.

dump_no_mortal

void* (*dump_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

Performs the dump operation, and returns its return value.

This native API should not be used unless special purposes are intended. Normally, use "dump" native API.

dump

void* (*dump)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

Calls "dump_no_mortal" native API and push its return value to the native mortal stack, and returns it.

dumpc

const char* (*dumpc)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

Calls "dump" native API and calls "get_chars" native API given the return value of dump to string, and returns the return value of get_chars.

copy_no_mortal

void* (*copy_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

The type of the object object must be a string type, a numeric array type, or a multi-numeric array type.

If the type of the object object is string type, creates a string and copies the characters stored in object to the created string, and returns the created object.

If the type of the object object is a numeric array type or a multi-numeric array type, creates an array using type of object as a prototype and copies the elements stored in object to the created array, and returns the created array.

If object is NULL, returns NULL.

This native API should not be used unless special purposes are intended. Normally, use "copy" native API.

copy

void* (*copy)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

Calls "copy_no_mortal" native API and push its return value to the native mortal stack, and returns it.

get_spvm_version_string

const char* (*get_spvm_version_string)(SPVM_ENV* env, SPVM_VALUE* stack);

Returns the version string of the SPVM language.

get_spvm_version_number

double (*get_spvm_version_number)(SPVM_ENV* env, SPVM_VALUE* stack);

Calls "get_spvm_version_string" native API and converts its return value to a double value.

get_version_string

const char* (*get_version_string)(SPVM_ENV* env, SPVM_VALUE* stack, void* basic_type);

Returns the version string of the basic type basic_type.

If the version string is not defined, returns NULL.

get_version_number

double (*get_version_number)(SPVM_ENV* env, SPVM_VALUE* stack, void* basic_type);

Calls "get_version_string" native API and converts its return value to a double value.

If the version string is not defined, returns -1.

die

int32_t (*die)(SPVM_ENV* env, SPVM_VALUE* stack, const char* message, ...);

Creates a string from a sprintf formatted message 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 exception variable, and return the basic type ID of Error class.

Examples:

return env->die(env, stack, "The value must be %d.", 3, __func__, FILE_NAME, __LINE__);

get_exception

void* (*get_exception)(SPVM_ENV* env, SPVM_VALUE* stack);

Returns the value of the exception variable.

The return value is a SVPM string.

set_exception

void (*set_exception)(SPVM_ENV* env, SPVM_VALUE* stack, void* exception);

Sets exception to the exception variable.

exception is an SPVM string.

new_stack_trace_no_mortal

void* (*new_stack_trace_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, void* exception, void* method, int32_t line);

Creates a new string adding a string line of a stack trace given the file file and the line line to the end of the exception exception, and returns it.

If its memory allocation failed, returns NULL.

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 "new_stack_trace" native API.

new_stack_trace

void* (*new_stack_trace)(SPVM_ENV* env, SPVM_VALUE* stack, void* exception, void* method, int32_t line);

Calls "new_stack_trace_no_mortal" native API and push its return value to the native mortal stack, and returns it.

is_string

int32_t (*is_string)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

If the object object is not NULL and its type is string type, returns 1, otherwise returns 0.

is_class

int32_t (*is_class)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

If the object object is not NULL and its type is a class type, returns 1, otherwise returns 0.

is_pointer_class

int32_t (*is_pointer_class)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

If the object object is not NULL and the class of object has the pointer attribute, returns 1, otherwise returns 0.

is_array

int32_t (*is_array)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

If the object object is not NULL and its type is an array type, returns 1, otherwise returns 0.

is_object_array

int32_t (*is_object_array)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

If the object object is not NULL and its type is an object array type, returns 1, otherwise returns 0.

is_numeric_array

int32_t (*is_numeric_array)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

If the object object is not NULL and its type is a numeric array type, returns 1, otherwise returns 0.

is_mulnum_array

int32_t (*is_mulnum_array)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

If the object object is not NULL and its type is a multi-numeric array type, returns 1, otherwise returns 0.

isa

int32_t (*isa)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* basic_type, int32_t type_dimension);

If the object object satisfies the assignment requirement without data conversion to the type given by the basic type basic_type and the type dimension type_dimension, returns 1, otherwise returns 0.

isa_by_name

int32_t (*isa_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* basic_type_name, int32_t type_dimension);

If the basic type given by the basic type name basic_type_name is not found, returns 0.

If the object object satisfies the assignment requirement without data conversion to the type given by the basic type name basic_type_name and the type dimension type_dimension, returns 1, otherwise returns 0.

is_type

int32_t (*is_type)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* basic_type, int32_t type_dimension);

If the type of the object object is equal to the type given by the basic type basic_type and the type dimension type_dimension, returns 1, otherwise returns 0.

object must not be NULL.

is_type_by_name

int32_t (*is_type_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* basic_type_name, int32_t type_dimension);

If the basic type given by the basic type name basic_type_name is not found, returns 0.

If the object object is not NULL and its type of the object object is equal to the basic type given by the basic type name basic_type_name and the type dimension type_dimension, returns 1, otherwise returns 0.

elem_isa

int32_t (*elem_isa)(SPVM_ENV* env, SPVM_VALUE* stack, void* array, void* element);

If the element element satisfies the assignment requirement without data conversion to the element type of the array array, returns 1, otherwise returns 0.

get_elem_size

int32_t (*get_elem_size)(SPVM_ENV* env, SPVM_VALUE* stack, void* array);

Returns the byte size of the element of the array array.

get_type_name_no_mortal

void* (*get_type_name_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

Creates a new string that is the type name of the object object, and returns it.

If its memory allocation failed, returns NULL.

This native API should not be used unless special purposes are intended. Normally, use "get_type_name" native API.

get_type_name

void* (*get_type_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

Calls "get_type_name_no_mortal" native API and push its return value to the native mortal stack, and returns it.

get_compile_type_name_no_mortal

void* (*get_compile_type_name_no_mortal)(SPVM_ENV* env, SPVM_VALUE* 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 basic_type_name, the type dimension type_dimension, the type flag type_flag, and returns it.

If its memory allocation failed, returns NULL.

This native API should not be used unless special purposes are intended. Normally, use "get_compile_type_name" native API.

get_compile_type_name

void* (*get_compile_type_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, int32_t type_dimension, int32_t type_flag);

Calls "get_compile_type_name_no_mortal" native API and push its return value to the native mortal stack, and returns it.

enter_scope

int32_t (*enter_scope)(SPVM_ENV* env, SPVM_VALUE* stack);

Performs an enterring scope operation and returns the top position of the native mortal stack. This value is used as an argument to "leave_scope" native API.

leave_scope

void (*leave_scope)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t mortal_stack_top);

Performs a leaving scope operation given the top position of the native mortal stack mortal_stack_top.

Normally, mortal_stack_top is a return value from "enter_scope" native API.

push_mortal

int32_t (*push_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

Pushes the object object to the native mortal stack.

If object is NULL, no operation is performed.

If successful, returns 0. Otherwise, returns a non-zero value.

weaken

int32_t (*weaken)(SPVM_ENV* env, SPVM_VALUE* stack, void** ref);

Weakens the reference ref.

ref must not be NULL.

If the object referenced by ref is NULL, no operation is performed.

If ref is already weakened, no operation is performed.

See the doc of weak reference about weak references.

isweak

int32_t (*isweak()SPVM_ENV* env, void** ref);

If the reference ref is weakened, returns 1, otherwise returns 0.

ref must not be NULL.

If the object referenced by ref is NULL, returns 0.

See the doc of weak reference about weak references.

unweaken

void (*unweaken)(SPVM_ENV* env, SPVM_VALUE* stack, void** ref);

Unweakens the reference ref.

ref must not be NULL.

If the object referenced by ref is NULL, no operation is performed.

If ref is not weakened, no operation is performed.

See the doc of weak reference about weak references.

strerror_string

void* (*strerror_string)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t errno_value, int32_t length);

Calls the "strerror" function and push its return value to the native mortal stack, and returns it.

strerror_string_nolen

void* (*strerror_string_nolen)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t errno_value);

Calls the "strerror_string" function given 0 to length, and returns its return value.

strerror

const char* (*strerror)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t errno_value, int32_t length);

Returns the return value of the strerror function in the C language.

If the length is 0, the length is set to 128.

If the strerror function failed, errno is set to the a positive value.

This native API is thread-safe.

This native API is implemented by the following functions:

Windows:

strerror_s

Linux and UNIX:

strerror_r - XSI-compliant

strerror_nolen

const char* (*strerror_nolen)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t errno_value);

Calls the "strerror" function given 0 to length, and returns its return value.

is_binary_compatible_object

int32_t (*is_binary_compatible_object)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

If the object object is binary compatible with the runtime environment runtime and the runtime stack stack, returns 1, otherwise returns 0.

reserved195

void* reserved195;

Reserved for the future use.

new_stack

SPVM_VALUE* (*new_stack)(SPVM_ENV* env);

Creates a new runtime stack, and returns it.

free_stack

void (*free_stack)(SPVM_ENV* env, SPVM_VALUE* stack);

Frees the runtime stack stack.

get_field_object_defined_and_has_pointer_by_name

void* (*get_field_object_defined_and_has_pointer_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);

Calls "get_field_object_by_name" native API, and returns its return value.

If the return value is NULL, an exception is thrown.

If the pointer stored in the return value is NULL, an exception is thrown.

get_field_object_ref

void** (*get_field_object_ref)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, void* field);

Returns the address where the value of the field field is stored.

get_field_object_ref_by_name

void** (*get_field_object_ref_by_name)(SPVM_ENV* env, SPVM_VALUE* 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 object and the field name field_name.

If it is found, the address where the value of the field field is stored. Otherwise, an exception is thrown.

The function name func_name, the file path file, and the line number line must be given for the exception stack trace.

If the field given by field_name is not found, an exception is thrown.

If an excetpion is thrown, the value referenced by error_id is set to a non-zero value. Otherwise, set to 0.

is_binary_compatible_stack

int32_t (*is_binary_compatible_stack)(SPVM_ENV* env, SPVM_VALUE* stack);

If the runtime stack stack is binary compatible with the runtime environment runtime, returns 1, otherwise returns 0.

assign_object

void (*assign_object)(SPVM_ENV* env, SPVM_VALUE* stack, void** ref, void* object);

Assigns the object object to the place referenced by the reference ref.

This native API should not be used unless special purposes are intended.

new_string_array_no_mortal

void* (*new_string_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);

Creates a new string array given the length length, and returns it.

This native API should not be used unless special purposes are intended. Normally, use "new_string_array" native API.

new_memory_block

void* (*new_memory_block)(SPVM_ENV* env, SPVM_VALUE* stack, size_t size);

Creates a new memory block given the byte size size and returns its address.

If size is 0, retunrs NULL.

If size is greater than SIZE_MAX defined in the sysmte, returns NULL.

If the system memory allocation function returns NULL, this native API returns NULL.

The count of the memory blocks managed by this runtime is incremented by 1.

free_memory_block

void (*free_memory_block)(SPVM_ENV* env, SPVM_VALUE* stack, void* block);

Frees the memory block block.

If block is NULL, no operation is performed.

The count of the memory blocks managed by this runtime is decremented by 1.

get_memory_blocks_count

int32_t (*get_memory_blocks_count)(SPVM_ENV* env, SPVM_VALUE* stack);

Returns the count of the memory blocks managed by this runtime.

say

void (*say)(SPVM_ENV* env, SPVM_VALUE* stack, void* string);

Prints the string string and \n to SPVM's standard output.

warn

void (*warn)(SPVM_ENV* env, SPVM_VALUE* stack, void* string, const char* basic_type_name, const char* method_name, const char* file, int32_t line);

Performs the warn operation given the string string, the basic type name basic_type_name, the method name method_name, the file path file, and the line number line.

spvm_stdin

FILE* (*spvm_stdin)(SPVM_ENV* env, SPVM_VALUE* stack);

Returns SPVM's standard input.

spvm_stdout

FILE* (*spvm_stdout)(SPVM_ENV* env, SPVM_VALUE* stack);

Returns SPVM's standard output.

spvm_stderr

FILE* (*spvm_stderr)(SPVM_ENV* env, SPVM_VALUE* stack);

Returns SPVM's standard error.

check_bootstrap_method

int32_t (*check_bootstrap_method)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name);

Checks the definition of the bootstrap method.

If it is invalid, an exception is thrown.

If an exception is thrown, returns a non-zero value. Otherwise, returns 0.

new_array_proto_element_no_mortal

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 element and the length length, and returns it.

If element is NULL, returns NULL.

If the type of element must be an object type.

If length is lower than 0, returns NULL.

This native API should not be used unless special purposes are intended. Normally, use "new_array_proto_element" native API.

new_array_proto_element

void* (*new_array_proto_element)(SPVM_ENV* env, SPVM_VALUE* stack, void* element, int32_t length);

Calls "new_array_proto_element_no_mortal" native API and push its return value to the native mortal stack, and returns it.

get_byte_object_value

int32_t (*get_byte_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, void* byte_object);

Returns the value of the value field of Byte object byte_object.

byte_object must be a Byte object.

get_short_object_value

int32_t (*get_short_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, void* short_object);

Returns the value of the value field of Short object short_object.

short_object must be a Short object.

get_int_object_value

int32_t (*get_int_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, void* int_object);

Returns the value of the value field of Int object int_object.

int_object must be an Int object.

get_long_object_value

int64_t (*get_long_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, void* long_object);

Returns the value of the value field of Long object long_object.

long_object must be a Long object.

get_float_object_value

float (*get_float_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, void* float_object);

Returns the value of the value field of Float object float_object.

float_object must be a Float object.

get_double_object_value

double (*get_double_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, void* double_object);

Returns the value of the value field of Double object double_object.

double_object must be a Double object.

no_free

int32_t (*no_free)(SPVM_ENV* env, SPVM_VALUE* stack, void* object);

Retruns no_free flag of the object object.

This flag expects a boolean value.

set_no_free

void (*set_no_free)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, int32_t no_free);

Sets no_free flag of the object object to the value no_free.

This flag expects a boolean value.

get_stack_tmp_buffer

char* (*get_stack_tmp_buffer)(SPVM_ENV* env, SPVM_VALUE* stack);

Returns the temporary buffer on the runtime stack stack.

The byte size of the temporary buffer is "SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE".

void (*print_exception_to_stderr)(SPVM_ENV* env, SPVM_VALUE* stack);

Prints "[An exception is converted to a warning]\n" to SPVM's standard error.

And prints the current exception to SPVM's standard error.

And prints "\n" to SPVM's standard error.

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_base_time,
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

Constant Values

Basic Type IDs

IDNameDescription
0SPVM_NATIVE_C_BASIC_TYPE_ID_UNKNOWNThe basic type ID for unknown types
1SPVM_NATIVE_C_BASIC_TYPE_ID_UNDEFThe basic type ID of the undef type
2SPVM_NATIVE_C_BASIC_TYPE_ID_VOIDThe basic type ID of the void type
3SPVM_NATIVE_C_BASIC_TYPE_ID_BYTEThe basic type ID of byte type
4SPVM_NATIVE_C_BASIC_TYPE_ID_SHORTThe basic type ID of short type
5SPVM_NATIVE_C_BASIC_TYPE_ID_INTThe basic type ID of int type
6SPVM_NATIVE_C_BASIC_TYPE_ID_LONGThe basic type ID of long type
7SPVM_NATIVE_C_BASIC_TYPE_ID_FLOATThe basic type ID of float type
8SPVM_NATIVE_C_BASIC_TYPE_ID_DOUBLEThe basic type ID of double type
9SPVM_NATIVE_C_BASIC_TYPE_ID_STRINGThe basic type ID of string type
10SPVM_NATIVE_C_BASIC_TYPE_ID_ANY_OBJECTThe basic type ID of the any object type
11SPVM_NATIVE_C_BASIC_TYPE_ID_BYTE_CLASSThe basic type ID of the Byte class
12SPVM_NATIVE_C_BASIC_TYPE_ID_SHORT_CLASSThe basic type ID of the Short class
13SPVM_NATIVE_C_BASIC_TYPE_ID_INT_CLASSThe basic type ID of the Int class
14SPVM_NATIVE_C_BASIC_TYPE_ID_LONG_CLASSThe basic type ID of the Long class
15SPVM_NATIVE_C_BASIC_TYPE_ID_FLOAT_CLASSThe basic type ID of the Float class
16SPVM_NATIVE_C_BASIC_TYPE_ID_DOUBLE_CLASSThe basic type ID of the Double class
17SPVM_NATIVE_C_BASIC_TYPE_ID_BOOL_CLASSThe basic type ID of the Bool class
18SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASSThe basic type ID of the Error class
19SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_SYSTEM_CLASSThe basic type ID of the Error::System class
20SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_NOT_SUPPORTED_CLASSThe basic type ID of the Error::NotSupported class
21SPVM_NATIVE_C_BASIC_TYPE_ID_COMMAND_INFO_CLASSThe basic type ID of the CommandInfo class
22SPVM_NATIVE_C_BASIC_TYPE_ID_ADDRESS_CLASSThe basic type ID of the Address class
23SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_COMPILE_CLASSThe basic type ID of the Error::Compile class

Basic Type Category IDs

IDNameDescription
0SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_UNKNOWNThe basic type category for unknown types
1SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_UNDEFThe basic type category for the undef type
2SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_VOIDThe basic type category for the void type
3SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_NUMERICThe basic type category for numeric types
4SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_MULNUMThe basic type category for multi-numeric types
5SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_STRINGThe basic type category for string type
6SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_CLASSThe basic type category for class types
7SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_INTERFACEThe basic type category for interface types
8SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_ANY_OBJECTThe basic type category for the any object type

Type Flag IDs

IDNameDescription
1SPVM_NATIVE_C_TYPE_FLAG_REFA flag indicating that it is a reference type
2SPVM_NATIVE_C_TYPE_FLAG_MUTABLEA flag indicating that a mutable modifier is present

SPVM_NATIVE_VERSION_NUMBER

SPVM_NATIVE_VERSION_NUMBER

The version number of the SPVM language.

Examples:

// 0.989062
double spvm_version_number = SPVM_NATIVE_VERSION_NUMBER;

SPVM_NATIVE_VERSION_STRING

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;

SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE

SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE

The byte size of the temporary buffer in a runtime stack. This value is 512.

Macro Functions

spvm_warn

#define spvm_warn(format, ...)

Prints the formatted message format to stderr with the current function name, the current file name, and the current line number.

format must be the char* type.

Examples:

spvm_warn("Hello");
spvm_warn("Hello %s%d", "Foo", 3);

spvm_warnf

#define spvm_warnf(stream, format, ...)

Prints the formatted message format to the stream stream with the current function name, the current file name, and the current line number.

format must be the char* type.

stream must be FILE type.

Examples:

spvm_warnf(env->spvm_stderr(env, stack), "Hello");
spvm_warnf(env->spvm_stderr(env, stack), "Hello %s%d", "Foo", 3);

SPVM_NATIVE_GET_POINTER

#define SPVM_NATIVE_GET_POINTER(object)

Returns the pointer stored in the object object and returns it.

The return type is the void* type.

SPVM_NATIVE_SET_POINTER

#define SPVM_NATIVE_SET_POINTER(object, pointer)

Sets the pointer pointer of the object object.

Data Structures

SPVM_OBJECT

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;
};

See Also

Copyright & License

Copyright (c) 2023 Yuki Kimoto

MIT License