Changes for version 0.989010 - 2023-06-22

  • New Features
    • The following Native Runtime APIs were added. +int32_t SPVM_API_RUNTIME_get_class_var_address_id(SPVM_RUNTIME* runtime, SPVM_RUNTIME_METHOD* class_var); +int32_t SPVM_API_RUNTIME_get_class_var_index(SPVM_RUNTIME* runtime, SPVM_RUNTIME_METHOD* class_var); +int32_t SPVM_API_RUNTIME_get_field_address_id(SPVM_RUNTIME* runtime, SPVM_RUNTIME_METHOD* field); +int32_t SPVM_API_RUNTIME_get_field_index(SPVM_RUNTIME* runtime, SPVM_RUNTIME_METHOD* field);
    • The following Native APIs were added.
      • void* (*new_stack_trace_raw_v2)(SPVM_ENV* env, SPVM_VALUE* stack, void* exception, void* method, int32_t line);
      • void* (*new_stack_trace_v2)(SPVM_ENV* env, SPVM_VALUE* stack, void* exception, void* method, int32_t line);
      • int8_t (*get_class_var_byte_v2)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t class_var_index); int16_t (*get_class_var_short_v2)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t class_var_index); int32_t (*get_class_var_int_v2)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t class_var_index); int64_t (*get_class_var_long_v2)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t class_var_index); float (*get_class_var_float_v2)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t class_var_index); double (*get_class_var_double_v2)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t class_var_index); void* (*get_class_var_object_v2)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t class_var_index); void (*set_class_var_byte_v2)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t class_var_index, int8_t value); void (*set_class_var_short_v2)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t class_var_index, int16_t value); void (*set_class_var_int_v2)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t class_var_index, int32_t value); void (*set_class_var_long_v2)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t class_var_index, int64_t value); void (*set_class_var_float_v2)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t class_var_index, float value); void (*set_class_var_double_v2)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t class_var_index, double value); void (*set_class_var_object_v2)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, int32_t class_var_index, void* value);
  • Warnings
    • The beheivior of the following Native APIs were deprecated and will be replaced with version 2 APIs.
      • void* (*new_stack_trace_raw)(SPVM_ENV* env, SPVM_VALUE* stack, void* exception, int32_t method_address_id, int32_t line);
      • void* (*new_stack_trace)(SPVM_ENV* env, SPVM_VALUE* stack, void* exception, int32_t method_address_id, int32_t line);
      • int8_t (*get_class_var_byte)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id); int16_t (*get_class_var_short)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id); int32_t (*get_class_var_int)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id); int64_t (*get_class_var_long)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id); float (*get_class_var_float)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id); double (*get_class_var_double)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id); void* (*get_class_var_object)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id); void (*set_class_var_byte)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id, int8_t value); void (*set_class_var_short)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id, int16_t value); void (*set_class_var_int)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id, int32_t value); void (*set_class_var_long)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id, int64_t value); void (*set_class_var_float)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id, float value); void (*set_class_var_double)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id, double value); void (*set_class_var_object)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id, void* value);
  • Incompatibe Changes
    • The following Native Runtime APIs were changed.
      • int32_t (*get_basic_type_name_id)(void* runtime, void* basic_type);
      • int32_t (*get_basic_type_name_id)(void* runtime, int32_t basic_type_id);
      • int32_t (*get_basic_type_category)(void* runtime, void* basic_type);
      • int32_t (*get_basic_type_category)(void* runtime, int32_t basic_type_id);
      • int32_t (*get_basic_type_module_rel_file_id)(void* runtime, void* basic_type);
      • int32_t (*get_basic_type_module_dir_id)(void* runtime, void* basic_type);
      • int32_t (*get_basic_type_is_anon)(void* runtime, void* basic_type);
      • int32_t (*get_basic_type_fields_base_address_id)(void* runtime, void* basic_type);
      • int32_t (*get_basic_type_fields_length)(void* runtime, void* basic_type);
      • int32_t (*get_basic_type_methods_base_address_id)(void* runtime, void* basic_type);
      • int32_t (*get_basic_type_methods_length)(void* runtime, void* basic_type);
      • int32_t (*get_basic_type_class_vars_base_address_id)(void* runtime, void* basic_type);
      • int32_t (*get_basic_type_class_vars_length)(void* runtime, void* basic_type);
      • int32_t (*get_basic_type_module_rel_file_id)(void* runtime, int32_t basic_type_id);
      • int32_t (*get_basic_type_module_dir_id)(void* runtime, int32_t basic_type_id);
      • int32_t (*get_basic_type_is_anon)(void* runtime, int32_t basic_type_id);
      • int32_t (*get_basic_type_fields_base_address_id)(void* runtime, int32_t basic_type_id);
      • int32_t (*get_basic_type_fields_length)(void* runtime, int32_t basic_type_id);
      • int32_t (*get_basic_type_methods_base_address_id)(void* runtime, int32_t basic_type_id);
      • int32_t (*get_basic_type_methods_length)(void* runtime, int32_t basic_type_id);
      • int32_t (*get_basic_type_class_vars_base_address_id)(void* runtime, int32_t basic_type_id);
      • int32_t (*get_basic_type_class_vars_length)(void* runtime, int32_t basic_type_id);
      • int32_t (*get_basic_type_parent_id)(void* runtime, void* basic_type);
      • int32_t (*get_basic_type_version_string_id)(void* runtime, void* basic_type);
      • int32_t (*get_basic_type_parent_id)(void* runtime, int32_t basic_type_id);
      • int32_t (*get_basic_type_version_string_id)(void* runtime, int32_t basic_type_id);
    • The following Native APIs were changed.
      • int32_t (*call_method_raw)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t method_id, int32_t args_stack_length);
      • int32_t (*call_method_raw)(SPVM_ENV* env, SPVM_VALUE* stack, void* method, int32_t args_stack_length);
      • int32_t (*call_method)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t method_id, int32_t args_stack_length);
      • int32_t (*call_method)(SPVM_ENV* env, SPVM_VALUE* stack, void* method, int32_t args_stack_length);
      • void* (*new_stack_trace_raw)(SPVM_ENV* env, SPVM_VALUE* stack, void* exception, int32_t method_address_id, int32_t line);
      • void* (*new_stack_trace)(SPVM_ENV* env, SPVM_VALUE* stack, void* exception, int32_t method_address_id, int32_t line);
      • void* (*new_stack_trace_raw)(SPVM_ENV* env, SPVM_VALUE* stack, void* exception, void* method, int32_t line);
      • void* (*new_stack_trace)(SPVM_ENV* env, SPVM_VALUE* stack, void* exception, void* method, int32_t line);0.989009 2023-06-21
      • int32_t (*get_class_method_id)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* method_name);
      • void* (*get_class_method)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, const char* method_name);
      • int32_t (*get_instance_method_id_static)(SPVM_ENV* env, const char* basic_type_name, const char* method_name);
      • void* (*get_instance_method_static)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, const char* method_name);
      • int32_t (*get_instance_method_id)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* method_name);
      • void* (*get_instance_method)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* method_name);
      • int32_t (*get_method_id)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* method_name);
      • void* (*get_method)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, const char* method_name);
      • int32_t (*get_class_var_id)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* class_var_name);
      • void* (*get_class_var)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id, const char* class_var_name);
      • int8_t (*get_class_var_byte)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id);
      • int16_t (*get_class_var_short)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id);
      • int32_t (*get_class_var_int)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id);
      • int64_t (*get_class_var_long)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id);
      • float (*get_class_var_float)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id);
      • double (*get_class_var_double)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id);
      • void* (*get_class_var_object)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id);
      • void (*set_class_var_byte)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id, int8_t value);
      • void (*set_class_var_short)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id, int16_t value);
      • void (*set_class_var_int)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id, int32_t value);
      • void (*set_class_var_long)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id, int64_t value);
      • void (*set_class_var_float)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id, float value);
      • void (*set_class_var_double)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id, double value);
      • void (*set_class_var_object)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t class_var_address_id, void* value);
      • int8_t (*get_class_var_byte)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var);
      • int16_t (*get_class_var_short)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var);
      • int32_t (*get_class_var_int)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var);
      • int64_t (*get_class_var_long)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var);
      • float (*get_class_var_float)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var);
      • double (*get_class_var_double)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var);
      • void* (*get_class_var_object)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var);
      • void (*set_class_var_byte)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var, int8_t value);
      • void (*set_class_var_short)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var, int16_t value);
      • void (*set_class_var_int)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var, int32_t value);
      • void (*set_class_var_long)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var, int64_t value);
      • void (*set_class_var_float)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var, float value);
      • void (*set_class_var_double)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var, double value);
      • void (*set_class_var_object)(SPVM_ENV* env, SPVM_VALUE* stack, void* class_var, void* value);
    • The following Native Runtime APIs were changed.
      • void* (*get_field)(void* runtime, void* basic_type, int32_t field_index);
      • void* (*get_class_var)(void* runtime, void* basic_type, int32_t class_var_index);
      • void* (*get_method)(void* runtime, void* basic_type, int32_t method_index);
      • void* (*get_field)(void* runtime, int32_t basic_type_id, int32_t field_index);
      • void* (*get_class_var)(void* runtime, int32_t basic_type_id, int32_t class_var_index);
      • void* (*get_method)(void* runtime, int32_t basic_type_id, int32_t method_index);
      • int32_t (*get_method_is_static)(void* runtime, void* method);
      • int32_t (*get_method_is_class_method)(void* runtime, void* method);
      • void* (*get_basic_type_by_id)(void* runtime, int32_t basic_type_id);
      • void* (*get_basic_type)(void* runtime, int32_t basic_type_id);
    • The following Native Runtime APIs were removed.
      • int32_t (*get_method_address_id_by_index)(void* runtime, int32_t basic_type_id, int32_t method_index);
      • int32_t (*get_method_address_id_by_name)(void* runtime, const char* basic_type_name, const char* method_name);
  • New Features
    • The following Native Runtime APIs were added.
      • void* (*get_instance_method)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* method_name);
    • The following Native Runtime APIs were added.
      • void* (*get_class_var_by_name)(void* runtime, int32_t basic_type_id, const char* class_var_name); void* (*get_field_by_name)(void* runtime, int32_t basic_type_id, const char* field_name); void* (*get_method_by_name)(void* runtime, int32_t basic_type_id, const char* method_name); int32_t (*get_method_address_id)(void* runtime, void* method); int32_t (*get_method_index)(void* runtime, void* method);
  • Bug Fix
    • The following bug was fixed. Cached symbol IDs in the precompile code does not work well in some cases.

Documentation

Generating Excutable File
Generating SPVM Distribution

Modules

SPVM Language
Address
Array Utilities
SPVM object
Bool object
Build Dynamic Libraries for SPVM Distribution
Defining Public Functions of SPVM::Builder
Compilation and Link of Native Module
Compilation Information
SPVM Builder Compiler
Configurations of creating excutable files.
SPVM Builder Environment
Creating Executable File
Library Information
Link Information
Object File Information
SPVM Builder Runtime
SPVM Builder Stack
Builder Utilities
Defining Public Functions of SPVM::Builder::Util
The byte Object
Dynamic byte Array
Interface Type to Clone Object
Interface Type for the Callback to Clone a Object
Command Line Information
Interface Type for Object 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 String Comparation Callback
Compiler
double Complex Type
float Complex Type
SPVM Exchange API
SPVM Language Specification
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
Document of Native Class
How to write the resource class
The double Object
Dynamic double Array
Execution Environment
Interface Type for Object Equality Checking Callback
a callback implementation of EqualityChecker to check if the memory addresses of the two objects are equal.
Error
Not Supported Error
System Error
SPVM Exchange API
The float Object
Dynamic float Array
SPVM Starndard Functions
Format Utilities
SPVM Global Instance for Perl Interpreter
Hash Data Structure
Hash entry
Immutable byte Array
Immutable double Array
Immutable float Array
Immutable int Array
Immutable long Array
Immutable short Array
Immutable string array
The int Object
Dynamic int Array
Dynamic Object Array
The long Object
Dynamic long Array
Point
Point 3D
Runtime
Executing Handler at End of Scope
Handler of Scope::Guard
The short Class
Dynamic short Array
Sorting Functions
Call Stack
String Buffer
Dynamic string array
A Interface Type to Stringify a Object
Interface Type for Stringing Callback
Time Manipulation (Removed)
struct tm in C language (Removed)

Provides

in lib/SPVM/Dist.pm

Examples