The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Changes for version 0.9610 - 2022-06-22

  • CHANGE
    • Add error_code operator
    • Add set_error_code operator
    • exception become stack variable from env variable.
    • native mortal stack become stack variable from env variable.
  • NON BACKWORD COMPATIBLE CHANGES
    • Change the definitions of the following native APIs
      • Before
        • int32_t (*call_class_method)(SPVM_ENV* env, int32_t method_id, SPVM_VALUE* args); int32_t (*call_class_method_by_name)(SPVM_ENV* env, const char* class_name, const char* method_name, const char* signature, SPVM_VALUE* stack_unused, const char* file, int32_t line); int32_t (*call_instance_method)(SPVM_ENV* env, int32_t method_id, SPVM_VALUE* args); int32_t (*call_instance_method_by_name)(SPVM_ENV* env, void* object, const char* method_name, const char* signature, SPVM_VALUE* stack_unused, const char* file, int32_t line); int32_t (*call_spvm_method)(SPVM_ENV* env, int32_t method_id, SPVM_VALUE* args);
      • After
        • int32_t (*call_class_method)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t method_id); int32_t (*call_class_method_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, const char* method_name, const char* signature, const char* file, int32_t line); int32_t (*call_instance_method)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t method_id); int32_t (*call_instance_method_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* method_name, const char* signature, const char* file, int32_t line); int32_t (*call_spvm_method)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t method_id);
    • Change the definitions of the following native API
      • Before
        • void (*call_init_blocks)(SPVM_ENV* env);
      • After
        • void (*call_init_blocks)(SPVM_ENV* env, SPVM_VALUE* stack);
    • Native API new_env don't call call_init_blocks.
    • Native API free_env and free_env_prepared don't call cleanup_global_vars.
    • The following depracated methods are removed. Fn->copy_array_byte is removed. Use Array->copy_byte instead Fn->copy_array_double is removed. Use Array->copy_double instead Fn->copy_array_float is removed. Use Array->copy_float instead Fn->copy_array_int is removed. Use Array->copy_int instead Fn->copy_array_long is removed. Use Array->copy_long instead Fn->copy_array_object is removed. Use Array->copy_object instead Fn->copy_array_range_byte is removed. Use Array->copy_range_byte instead Fn->copy_array_range_double is removed. Use Array->copy_range_double instead Fn->copy_array_range_float is removed. Use Array->copy_range_float instead Fn->copy_array_range_int is removed. Use Array->copy_range_int instead Fn->copy_array_range_long is removed. Use Array->copy_range_long instead Fn->copy_array_range_object is removed. Use Array->copy_range_object instead Fn->copy_array_range_short is removed. Use Array->copy_range_short instead Fn->copy_array_range_string is removed. Use Array->copy_range_string instead Fn->copy_array_string is removed. Use Array->copy_tring instead Fn->dump_array_byte is removed. Use Array->dump_byte instead Fn->dump_array_double is removed. Use Array->dump_double instead Fn->dump_array_float is removed. Use Array->dump_float instead Fn->dump_array_int is removed. Use Array->dump_int instead Fn->dump_array_long is removed. Use Array->dump_long instead Fn->dump_array_object is removed. Use Array->dump_object instead Fn->dump_array_short is removed. Use Array->dump_short instead Fn->dump_array_string is removed. Use Array->dump_string instead Fn->dump_array_unsigned_byte is removed. Use Array->dump_unsigned_byte instead Fn->dump_array_unsigned_int is removed. Use Array->dump_unsigned_int instead Fn->dump_array_unsigned_long is removed. Use Array->dump_unsigned_long instead Fn->dump_array_unsigned_short is removed. Use Array->dump_unsigned_short instead Fn->equals_array_byte is removed. Use Array->equals_byte instead Fn->equals_array_double is removed. Use Array->equals_double instead Fn->equals_array_float is removed. Use Array->equals_float instead Fn->equals_array_int is removed. Use Array->equals_int instead Fn->equals_array_long is removed. Use Array->equals_long instead Fn->equals_array_object is removed. Use Array->equals_object instead Fn->equals_array_short is removed. Use Array->equals_short instead Fn->equals_array_string is removed. Use Array->equals_string instead Fn->memcpy_byte is removed. Use Array->memcpy_byte instead Fn->memcpy_double is removed. Use Array->memcpy_double instead Fn->memcpy_float is removed. Use Array->memcpy_float instead Fn->memcpy_int is removed. Use Array->memcpy_int instead Fn->memcpy_long is removed. Use Array->memcpy_long instead Fn->memcpy_short is removed. Use Array->memcpy_short instead Fn->memmove_byte is removed. Use Array->memmove_byte instead Fn->memmove_double is removed. Use Array->memmove_double instead Fn->memmove_float is removed. Use Array->memmove_float instead Fn->memmove_int is removed. Use Array->memmove_int instead Fn->memmove_long is removed. Use Array->memmove_long instead Fn->memmove_short is removed. Use Array->memmove_short instead Fn->memset_byte is removed. Use Array->memset_byte instead Fn->memset_double is removed. Use Array->memset_double instead Fn->memset_float is removed. Use Array->memset_float instead Fn->memset_int is removed. Use Array->memset_int instead Fn->memset_long is removed. Use Array->memset_long instead Fn->memset_object is removed. Use Array->memset_object instead Fn->memset_short is removed. Use Array->memset_short instead Fn->new_array_proto is removed. Use Array->new_proto instead Fn->sprintf is removed. Use Format->sprintf instead
    • Change the definitions of the following native APIs
      • Before
        • int32_t (*check_runtime_assignability)(SPVM_ENV* env, int32_t cast_basic_type_id, int32_t cast_type_dimension, void* object); int32_t (*check_runtime_assignability_array_element)(SPVM_ENV* env, void* array, void* element); void* (*new_object_raw)(SPVM_ENV* env, int32_t basic_type_id); void* (*new_object)(SPVM_ENV* env, int32_t basic_type_id); void* (*new_byte_array_raw)(SPVM_ENV* env, int32_t length); void* (*new_byte_array)(SPVM_ENV* env, int32_t length); void* (*new_short_array_raw)(SPVM_ENV* env, int32_t length); void* (*new_short_array)(SPVM_ENV* env, int32_t length); void* (*new_int_array_raw)(SPVM_ENV* env, int32_t length); void* (*new_int_array)(SPVM_ENV* env, int32_t length); void* (*new_long_array_raw)(SPVM_ENV* env, int32_t length); void* (*new_long_array)(SPVM_ENV* env, int32_t length); void* (*new_float_array_raw)(SPVM_ENV* env, int32_t length); void* (*new_float_array)(SPVM_ENV* env, int32_t length); void* (*new_double_array_raw)(SPVM_ENV* env, int32_t length); void* (*new_double_array)(SPVM_ENV* env, int32_t length); void* (*new_object_array_raw)(SPVM_ENV* env, int32_t basic_type_id, int32_t length); void* (*new_object_array)(SPVM_ENV* env, int32_t basic_type_id, int32_t length); void* (*new_muldim_array_raw)(SPVM_ENV* env, int32_t basic_type_id, int32_t element_dimension, int32_t length); void* (*new_muldim_array)(SPVM_ENV* env, int32_t basic_type_id, int32_t element_dimension, int32_t length); void* (*new_mulnum_array_raw)(SPVM_ENV* env, int32_t basic_type_id, int32_t length); void* (*new_mulnum_array)(SPVM_ENV* env, int32_t basic_type_id, int32_t length); void* (*new_string_nolen_raw)(SPVM_ENV* env, const char* bytes); void* (*new_string_nolen)(SPVM_ENV* env, const char* bytes); void* (*new_string_raw)(SPVM_ENV* env, const char* bytes, int32_t length); void* (*new_string)(SPVM_ENV* env, const char* bytes, int32_t length); void* (*new_pointer_raw)(SPVM_ENV* env, int32_t basic_type_id, void* pointer); void* (*new_pointer)(SPVM_ENV* env, int32_t basic_type_id, void* pointer); void* (*concat_raw)(SPVM_ENV* env, void* string1, void* string2); void* (*concat)(SPVM_ENV* env, void* string1, void* string2); void* (*new_stack_trace_raw)(SPVM_ENV* env, void* exception, int32_t method_id, int32_t line); void* (*new_stack_trace)(SPVM_ENV* env, void* exception, int32_t method_id, int32_t line); int32_t (*length)(SPVM_ENV* env, void* array); int8_t* (*get_elems_byte)(SPVM_ENV* env, void* array); int16_t* (*get_elems_short)(SPVM_ENV* env, void* array); int32_t* (*get_elems_int)(SPVM_ENV* env, void* array); int64_t* (*get_elems_long)(SPVM_ENV* env, void* array); float* (*get_elems_float)(SPVM_ENV* env, void* array); double* (*get_elems_double)(SPVM_ENV* env, void* array); void* (*get_elem_object)(SPVM_ENV* env, void* array, int32_t index); void (*set_elem_object)(SPVM_ENV* env, void* array, int32_t index, void* value); int8_t (*get_field_byte)(SPVM_ENV* env, void* object, int32_t field_id); int16_t (*get_field_short)(SPVM_ENV* env, void* object, int32_t field_id); int32_t (*get_field_int)(SPVM_ENV* env, void* object, int32_t field_id); int64_t (*get_field_long)(SPVM_ENV* env, void* object, int32_t field_id); float (*get_field_float)(SPVM_ENV* env, void* object, int32_t field_id); double (*get_field_double)(SPVM_ENV* env, void* object, int32_t field_id); void* (*get_field_object)(SPVM_ENV* env, void* object, int32_t field_id); void (*set_field_byte)(SPVM_ENV* env, void* object, int32_t field_id, int8_t value); void (*set_field_short)(SPVM_ENV* env, void* object, int32_t field_id, int16_t value); void (*set_field_int)(SPVM_ENV* env, void* object, int32_t field_id, int32_t value); void (*set_field_long)(SPVM_ENV* env, void* object, int32_t field_id, int64_t value); void (*set_field_float)(SPVM_ENV* env, void* object, int32_t field_id, float value); void (*set_field_double)(SPVM_ENV* env, void* object, int32_t field_id, double value); void (*set_field_object)(SPVM_ENV* env, void* object, int32_t field_id, void* value); int8_t (*get_class_var_byte)(SPVM_ENV* env, int32_t pkgvar_id); int16_t (*get_class_var_short)(SPVM_ENV* env, int32_t pkgvar_id); int32_t (*get_class_var_int)(SPVM_ENV* env, int32_t pkgvar_id); int64_t (*get_class_var_long)(SPVM_ENV* env, int32_t pkgvar_id); float (*get_class_var_float)(SPVM_ENV* env, int32_t pkgvar_id); double (*get_class_var_double)(SPVM_ENV* env, int32_t pkgvar_id); void* (*get_class_var_object)(SPVM_ENV* env, int32_t pkgvar_id); void (*set_class_var_byte)(SPVM_ENV* env, int32_t pkgvar_id, int8_t value); void (*set_class_var_short)(SPVM_ENV* env, int32_t pkgvar_id, int16_t value); void (*set_class_var_int)(SPVM_ENV* env, int32_t pkgvar_id, int32_t value); void (*set_class_var_long)(SPVM_ENV* env, int32_t pkgvar_id, int64_t value); void (*set_class_var_float)(SPVM_ENV* env, int32_t pkgvar_id, float value); void (*set_class_var_double)(SPVM_ENV* env, int32_t pkgvar_id, double value); void (*set_class_var_object)(SPVM_ENV* env, int32_t pkgvar_id, void* value); void* (*get_pointer)(SPVM_ENV* env, void* pointer_object); void (*set_pointer)(SPVM_ENV* env, void* pointer_object, void* pointer); void* (*get_exception)(SPVM_ENV* env); int32_t (*set_exception)(SPVM_ENV* env, void* exception); int32_t (*get_ref_count)(SPVM_ENV* env, void* object); void (*inc_ref_count)(SPVM_ENV* env, void* object); void (*dec_ref_count)(SPVM_ENV* env, void* object); int32_t (*enter_scope)(SPVM_ENV* env); int32_t (*push_mortal)(SPVM_ENV* env, void* object); void (*leave_scope)(SPVM_ENV* env, int32_t scope_id); int32_t (*remove_mortal)(SPVM_ENV* env, int32_t scope_id, void* remove_object); int32_t (*is_type)(SPVM_ENV* env, void* object, int32_t basic_type_id, int32_t type_dimension); int32_t (*is_object_array)(SPVM_ENV* env, void* object); int32_t (*get_object_basic_type_id)(SPVM_ENV* env, void* object); int32_t (*get_object_type_dimension)(SPVM_ENV* env, void* object); int32_t (*weaken)(SPVM_ENV* env, void** object_address); int32_t (*isweak)(SPVM_ENV* env, void** object); void (*unweaken)(SPVM_ENV* env, void** object_address); void* (*get_type_name_raw)(SPVM_ENV* env, void* object); void* (*get_type_name)(SPVM_ENV* env, void* object); const char* (*get_chars)(SPVM_ENV* env, void* string_object); int32_t (*die)(SPVM_ENV* env, const char* message, ...); void* (*new_object_by_name)(SPVM_ENV* env, const char* class_name, int32_t* exception_flag, const char* file, int32_t line); void* (*new_pointer_by_name)(SPVM_ENV* env, const char* class_name, void* pointer, int32_t* exception_flag, const char* file, int32_t line); void (*set_field_byte_by_name)(SPVM_ENV* env, void* object, const char* class_name, const char* field_name, int8_t value, int32_t* exception_flag, const char* file, int32_t line); void (*set_field_short_by_name)(SPVM_ENV* env, void* object, const char* class_name, const char* field_name, int16_t value, int32_t* exception_flag, const char* file, int32_t line); void (*set_field_int_by_name)(SPVM_ENV* env, void* object, const char* class_name, const char* field_name, int32_t value, int32_t* exception_flag, const char* file, int32_t line); void (*set_field_long_by_name)(SPVM_ENV* env, void* object, const char* class_name, const char* field_name, int64_t value, int32_t* exception_flag, const char* file, int32_t line); void (*set_field_float_by_name)(SPVM_ENV* env, void* object, const char* class_name, const char* field_name, float value, int32_t* exception_flag, const char* file, int32_t line); void (*set_field_double_by_name)(SPVM_ENV* env, void* object, const char* class_name, const char* field_name, double value, int32_t* exception_flag, const char* file, int32_t line); void (*set_field_object_by_name)(SPVM_ENV* env, void* object, const char* class_name, const char* field_name, const char* signature, void* value, int32_t* exception_flag, const char* file, int32_t line); int8_t (*get_field_byte_by_name)(SPVM_ENV* env, void* object, const char* class_name, const char* field_name, int32_t* exception_flag, const char* file, int32_t line); int16_t (*get_field_short_by_name)(SPVM_ENV* env, void* object, const char* class_name, const char* field_name, int32_t* exception_flag, const char* file, int32_t line); int32_t (*get_field_int_by_name)(SPVM_ENV* env, void* object, const char* class_name, const char* field_name, int32_t* exception_flag, const char* file, int32_t line); int64_t (*get_field_long_by_name)(SPVM_ENV* env, void* object, const char* class_name, const char* field_name, int32_t* exception_flag, const char* file, int32_t line); float (*get_field_float_by_name)(SPVM_ENV* env, void* object, const char* class_name, const char* field_name, int32_t* exception_flag, const char* file, int32_t line); double (*get_field_double_by_name)(SPVM_ENV* env, void* object, const char* class_name, const char* field_name, int32_t* exception_flag, const char* file, int32_t line); void* (*get_field_object_by_name)(SPVM_ENV* env, void* object, const char* class_name, const char* field_name, const char* signature, int32_t* exception_flag, const char* file, int32_t line); void (*set_class_var_byte_by_name)(SPVM_ENV* env, const char* class_name, const char* class_var_name, int8_t value, int32_t* exception_flag, const char* file, int32_t line); void (*set_class_var_short_by_name)(SPVM_ENV* env, const char* class_name, const char* class_var_name, int16_t value, int32_t* exception_flag, const char* file, int32_t line); void (*set_class_var_int_by_name)(SPVM_ENV* env, const char* class_name, const char* class_var_name, int32_t value, int32_t* exception_flag, const char* file, int32_t line); void (*set_class_var_long_by_name)(SPVM_ENV* env, const char* class_name, const char* class_var_name, int64_t value, int32_t* exception_flag, const char* file, int32_t line); void (*set_class_var_float_by_name)(SPVM_ENV* env, const char* class_name, const char* class_var_name, float value, int32_t* exception_flag, const char* file, int32_t line); void (*set_class_var_double_by_name)(SPVM_ENV* env, const char* class_name, const char* class_var_name, double value, int32_t* exception_flag, const char* file, int32_t line); void (*set_class_var_object_by_name)(SPVM_ENV* env, const char* class_name, const char* class_var_name, const char* signature, void* value, int32_t* exception_flag, const char* file, int32_t line); int8_t (*get_class_var_byte_by_name)(SPVM_ENV* env, const char* class_name, const char* class_var_name, int32_t* exception_flag, const char* file, int32_t line); int16_t (*get_class_var_short_by_name)(SPVM_ENV* env, const char* class_name, const char* class_var_name, int32_t* exception_flag, const char* file, int32_t line); int32_t (*get_class_var_int_by_name)(SPVM_ENV* env, const char* class_name, const char* class_var_name, int32_t* exception_flag, const char* file, int32_t line); int64_t (*get_class_var_long_by_name)(SPVM_ENV* env, const char* class_name, const char* class_var_name, int32_t* exception_flag, const char* file, int32_t line); float (*get_class_var_float_by_name)(SPVM_ENV* env, const char* class_name, const char* class_var_name, int32_t* exception_flag, const char* file, int32_t line); double (*get_class_var_double_by_name)(SPVM_ENV* env, const char* class_name, const char* class_var_name, int32_t* exception_flag, const char* file, int32_t line); void* (*get_class_var_object_by_name)(SPVM_ENV* env, const char* class_name, const char* class_var_name, const char* signature, int32_t* exception_flag, const char* file, int32_t line); const char* (*get_field_string_chars_by_name)(SPVM_ENV* env, void* obj, const char* class_name, const char* field_name, int32_t* exception_flag, const char* file, int32_t line); void* (*dump_raw)(SPVM_ENV* env, void* object); void* (*dump)(SPVM_ENV* env, void* object); int32_t (*get_bool_object_value)(SPVM_ENV* env, void* bool_object); void (*cleanup_global_vars)(SPVM_ENV* env); void (*make_read_only)(SPVM_ENV* env, void* string); int32_t (*is_read_only)(SPVM_ENV* env, void* string); int32_t (*is_array)(SPVM_ENV* env, void* object); int32_t (*is_string)(SPVM_ENV* env, void* object); int32_t (*is_numeric_array)(SPVM_ENV* env, void* object); int32_t (*is_mulnum_array)(SPVM_ENV* env, void* object); int32_t (*get_elem_byte_size)(SPVM_ENV* env, void* array); void* (*new_array_proto_raw)(SPVM_ENV* env, void* array, int32_t length); void* (*new_array_proto)(SPVM_ENV* env, void* array, int32_t length); void* (*copy_raw)(SPVM_ENV* env, void* object); void* (*copy)(SPVM_ENV* env, void* object); void (*shorten)(SPVM_ENV* env, void* string, int32_t new_length); int32_t (*has_interface)(SPVM_ENV* env, void* object, int32_t interface_basic_type_id); void (*print)(SPVM_ENV* env, void* string); void (*print_stderr)(SPVM_ENV* env, void* string);
      • After
        • void* (*get_type_name_raw)(SPVM_ENV* env, SPVM_VALUE* stack, void* object); void* (*get_type_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object); int32_t (*check_runtime_assignability)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t cast_basic_type_id, int32_t cast_type_dimension, void* object); int32_t (*check_runtime_assignability_array_element)(SPVM_ENV* env, SPVM_VALUE* stack, void* array, void* element); void* (*new_object_raw)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id); void* (*new_object)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id); void* (*new_byte_array_raw)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length); void* (*new_byte_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length); void* (*new_short_array_raw)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length); void* (*new_short_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length); void* (*new_int_array_raw)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length); void* (*new_int_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length); void* (*new_long_array_raw)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length); void* (*new_long_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length); void* (*new_float_array_raw)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length); void* (*new_float_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length); void* (*new_double_array_raw)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length); void* (*new_double_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length); void* (*new_object_array_raw)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t length); void* (*new_object_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t length); void* (*new_muldim_array_raw)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t element_dimension, int32_t length); void* (*new_muldim_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t element_dimension, int32_t length); void* (*new_mulnum_array_raw)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t length); void* (*new_mulnum_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t length); void* (*new_string_nolen_raw)(SPVM_ENV* env, SPVM_VALUE* stack, const char* bytes); void* (*new_string_nolen)(SPVM_ENV* env, SPVM_VALUE* stack, const char* bytes); void* (*new_string_raw)(SPVM_ENV* env, SPVM_VALUE* stack, const char* bytes, int32_t length); void* (*new_string)(SPVM_ENV* env, SPVM_VALUE* stack, const char* bytes, int32_t length); void* (*new_pointer_raw)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, void* pointer); void* (*new_pointer)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, void* pointer); void* (*concat_raw)(SPVM_ENV* env, SPVM_VALUE* stack, void* string1, void* string2); void* (*concat)(SPVM_ENV* env, SPVM_VALUE* stack, void* string1, void* string2); void* (*new_stack_trace_raw)(SPVM_ENV* env, SPVM_VALUE* stack, void* exception, int32_t method_id, int32_t line); void* (*new_stack_trace)(SPVM_ENV* env, SPVM_VALUE* stack, void* exception, int32_t method_id, int32_t line); int32_t (*length)(SPVM_ENV* env, SPVM_VALUE* stack, void* array); int8_t* (*get_elems_byte)(SPVM_ENV* env, SPVM_VALUE* stack, void* array); int16_t* (*get_elems_short)(SPVM_ENV* env, SPVM_VALUE* stack, void* array); int32_t* (*get_elems_int)(SPVM_ENV* env, SPVM_VALUE* stack, void* array); int64_t* (*get_elems_long)(SPVM_ENV* env, SPVM_VALUE* stack, void* array); float* (*get_elems_float)(SPVM_ENV* env, SPVM_VALUE* stack, void* array); double* (*get_elems_double)(SPVM_ENV* env, SPVM_VALUE* stack, void* array); void* (*get_elem_object)(SPVM_ENV* env, SPVM_VALUE* stack, void* array, int32_t index); void (*set_elem_object)(SPVM_ENV* env, SPVM_VALUE* stack, void* array, int32_t index, void* value); int8_t (*get_field_byte)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, int32_t field_id); int16_t (*get_field_short)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, int32_t field_id); int32_t (*get_field_int)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, int32_t field_id); int64_t (*get_field_long)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, int32_t field_id); float (*get_field_float)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, int32_t field_id); double (*get_field_double)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, int32_t field_id); void* (*get_field_object)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, int32_t field_id); void (*set_field_byte)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, int32_t field_id, int8_t value); void (*set_field_short)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, int32_t field_id, int16_t value); void (*set_field_int)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, int32_t field_id, int32_t value); void (*set_field_long)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, int32_t field_id, int64_t value); void (*set_field_float)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, int32_t field_id, float value); void (*set_field_double)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, int32_t field_id, double value); void (*set_field_object)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, int32_t field_id, void* value); int8_t (*get_class_var_byte)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t pkgvar_id); int16_t (*get_class_var_short)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t pkgvar_id); int32_t (*get_class_var_int)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t pkgvar_id); int64_t (*get_class_var_long)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t pkgvar_id); float (*get_class_var_float)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t pkgvar_id); double (*get_class_var_double)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t pkgvar_id); void* (*get_class_var_object)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t pkgvar_id); void (*set_class_var_byte)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t pkgvar_id, int8_t value); void (*set_class_var_short)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t pkgvar_id, int16_t value); void (*set_class_var_int)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t pkgvar_id, int32_t value); void (*set_class_var_long)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t pkgvar_id, int64_t value); void (*set_class_var_float)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t pkgvar_id, float value); void (*set_class_var_double)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t pkgvar_id, double value); void (*set_class_var_object)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t pkgvar_id, void* value); void* (*get_pointer)(SPVM_ENV* env, SPVM_VALUE* stack, void* pointer_object); void (*set_pointer)(SPVM_ENV* env, SPVM_VALUE* stack, void* pointer_object, void* pointer); void* (*get_exception)(SPVM_ENV* env, SPVM_VALUE* stack); int32_t (*set_exception)(SPVM_ENV* env, SPVM_VALUE* stack, void* exception); int32_t (*get_ref_count)(SPVM_ENV* env, SPVM_VALUE* stack, void* object); void (*inc_ref_count)(SPVM_ENV* env, SPVM_VALUE* stack, void* object); void (*dec_ref_count)(SPVM_ENV* env, SPVM_VALUE* stack, void* object); int32_t (*enter_scope)(SPVM_ENV* env, SPVM_VALUE* stack); int32_t (*push_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, void* object); void (*leave_scope)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t scope_id); int32_t (*remove_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t scope_id, void* remove_object); int32_t (*is_type)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, int32_t basic_type_id, int32_t type_dimension); int32_t (*is_object_array)(SPVM_ENV* env, SPVM_VALUE* stack, void* object); int32_t (*get_object_basic_type_id)(SPVM_ENV* env, SPVM_VALUE* stack, void* object); int32_t (*get_object_type_dimension)(SPVM_ENV* env, SPVM_VALUE* stack, void* object); int32_t (*weaken)(SPVM_ENV* env, SPVM_VALUE* stack, void** object_address); int32_t (*isweak)(SPVM_ENV* env, SPVM_VALUE* stack, void** object); void (*unweaken)(SPVM_ENV* env, SPVM_VALUE* stack, void** object_address); const char* (*get_chars)(SPVM_ENV* env, SPVM_VALUE* stack, void* string_object); int32_t (*die)(SPVM_ENV* env, SPVM_VALUE* stack, const char* message, ...); void* (*new_object_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, int32_t* exception_flag, const char* file, int32_t line); void* (*new_pointer_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, void* pointer, int32_t* exception_flag, const char* file, int32_t line); void (*set_field_byte_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* class_name, const char* field_name, int8_t value, int32_t* exception_flag, const char* file, int32_t line); void (*set_field_short_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* class_name, const char* field_name, int16_t value, int32_t* exception_flag, const char* file, int32_t line); void (*set_field_int_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* class_name, const char* field_name, int32_t value, int32_t* exception_flag, const char* file, int32_t line); void (*set_field_long_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* class_name, const char* field_name, int64_t value, int32_t* exception_flag, const char* file, int32_t line); void (*set_field_float_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* class_name, const char* field_name, float value, int32_t* exception_flag, const char* file, int32_t line); void (*set_field_double_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* class_name, const char* field_name, double value, int32_t* exception_flag, const char* file, int32_t line); void (*set_field_object_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* class_name, const char* field_name, const char* signature, void* value, int32_t* exception_flag, const char* file, int32_t line); int8_t (*get_field_byte_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* class_name, const char* field_name, int32_t* exception_flag, const char* file, int32_t line); int16_t (*get_field_short_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* class_name, const char* field_name, int32_t* exception_flag, const char* file, int32_t line); int32_t (*get_field_int_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* class_name, const char* field_name, int32_t* exception_flag, const char* file, int32_t line); int64_t (*get_field_long_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* class_name, const char* field_name, int32_t* exception_flag, const char* file, int32_t line); float (*get_field_float_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* class_name, const char* field_name, int32_t* exception_flag, const char* file, int32_t line); double (*get_field_double_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* class_name, const char* field_name, int32_t* exception_flag, const char* file, int32_t line); void* (*get_field_object_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* class_name, const char* field_name, const char* signature, int32_t* exception_flag, const char* file, int32_t line); void (*set_class_var_byte_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, const char* class_var_name, int8_t value, int32_t* exception_flag, const char* file, int32_t line); void (*set_class_var_short_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, const char* class_var_name, int16_t value, int32_t* exception_flag, const char* file, int32_t line); void (*set_class_var_int_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, const char* class_var_name, int32_t value, int32_t* exception_flag, const char* file, int32_t line); void (*set_class_var_long_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, const char* class_var_name, int64_t value, int32_t* exception_flag, const char* file, int32_t line); void (*set_class_var_float_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, const char* class_var_name, float value, int32_t* exception_flag, const char* file, int32_t line); void (*set_class_var_double_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, const char* class_var_name, double value, int32_t* exception_flag, const char* file, int32_t line); void (*set_class_var_object_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, const char* class_var_name, const char* signature, void* value, int32_t* exception_flag, const char* file, int32_t line); int8_t (*get_class_var_byte_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, const char* class_var_name, int32_t* exception_flag, const char* file, int32_t line); int16_t (*get_class_var_short_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, const char* class_var_name, int32_t* exception_flag, const char* file, int32_t line); int32_t (*get_class_var_int_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, const char* class_var_name, int32_t* exception_flag, const char* file, int32_t line); int64_t (*get_class_var_long_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, const char* class_var_name, int32_t* exception_flag, const char* file, int32_t line); float (*get_class_var_float_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, const char* class_var_name, int32_t* exception_flag, const char* file, int32_t line); double (*get_class_var_double_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, const char* class_var_name, int32_t* exception_flag, const char* file, int32_t line); void* (*get_class_var_object_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, const char* class_var_name, const char* signature, int32_t* exception_flag, const char* file, int32_t line); const char* (*get_field_string_chars_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* obj, const char* class_name, const char* field_name, int32_t* exception_flag, const char* file, int32_t line); void* (*dump_raw)(SPVM_ENV* env, SPVM_VALUE* stack, void* object); void* (*dump)(SPVM_ENV* env, SPVM_VALUE* stack, void* object); int32_t (*get_bool_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, void* bool_object); void (*cleanup_global_vars)(SPVM_ENV* env, SPVM_VALUE* stack); void (*make_read_only)(SPVM_ENV* env, SPVM_VALUE* stack, void* string); int32_t (*is_read_only)(SPVM_ENV* env, SPVM_VALUE* stack, void* string); int32_t (*is_array)(SPVM_ENV* env, SPVM_VALUE* stack, void* object); int32_t (*is_string)(SPVM_ENV* env, SPVM_VALUE* stack, void* object); int32_t (*is_numeric_array)(SPVM_ENV* env, SPVM_VALUE* stack, void* object); int32_t (*is_mulnum_array)(SPVM_ENV* env, SPVM_VALUE* stack, void* object); int32_t (*get_elem_byte_size)(SPVM_ENV* env, SPVM_VALUE* stack, void* array); void* (*new_array_proto_raw)(SPVM_ENV* env, SPVM_VALUE* stack, void* array, int32_t length); void* (*new_array_proto)(SPVM_ENV* env, SPVM_VALUE* stack, void* array, int32_t length); void* (*copy_raw)(SPVM_ENV* env, SPVM_VALUE* stack, void* object); void* (*copy)(SPVM_ENV* env, SPVM_VALUE* stack, void* object); void (*shorten)(SPVM_ENV* env, SPVM_VALUE* stack, void* string, int32_t new_length); int32_t (*has_interface)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, int32_t interface_basic_type_id); void (*print)(SPVM_ENV* env, SPVM_VALUE* stack, void* string); void (*print_stderr)(SPVM_ENV* env, SPVM_VALUE* stack, void* string);
    • Native API exception_object is renamed to reserved16
    • Native API native_mortal_stack is renamed to reserved17
    • Native API native_mortal_stack_top is renamed to reserved18
    • Native API native_mortal_stack_capacity is renamed to reserved19

Documentation

SPVM compiler to create exe file
Generating SPVM Distribution

Modules

SPVM Language
Array Utilities
Blessed object base class
Array based blessed object
Class based blessed object
String based blessed object
Bool object
Build SPVM program
SPVM Builder Public APIs
Compiler and Linker of Native Sources
Configurations of Compile and Link of Native Sources
Configurations of creating excutable files.
Create a Executable File
Object file information
Object file information
Resourceurations of Compile and Link of Native Sources
Build Utilities
Public APIs of the utility of SPVM Builder
Byte object
Dynamic Byte Array
A Interface Type to Clone a Object
Interface Type for the Callback to Clone a Object
Interface Type for Object Comparation Callback
Interface Type for byte Comparation Callback
Interface Type for double Comparation Callback
Interface Type for float Comparation Callback
Interface Type for int Comparation Callback
Interface Type for long Comparation Callback
Interface Type for short Comparation Callback
Interface Type for String Comparation Callback
double complex type
float complex type
$class_name is a SPVM module
SPVM Performance Benchmark
SPVM Exchange API
SPVM Language Specification
SPVM Standard Modules
SPVM Native APIs
SPVM Allocator Native APIs
SPVM Compiler Native APIs
SPVM Precompile Native APIs
SPVM Runtime Native APIs
SPVM String Buffer Native APIs
How to write the native module
How to write the resource module
SPVM Performance Tutorial
Double object
Dynamic double array
Interface Type for Object Equality Checking Callback
a callback implementation of EqualityChecker to check if the memory addresses of the two objects are equal.
SPVM Exchange API
Float object
Dynamic float array
SPVM Starndard Functions
Format Utilities
Hash Data Structure
Hash entry
Int object
Dynamic int array
Dynamic object array
Long object
Dynamic long array
Point
Short object
Dynamic short array
Sorting Functions
String buffer
Dynamic string array
A Interface Type to Stringify a Object
Interface Type for Stringing Callback
Time Manipulation
Time information

Examples