Changes for version 0.9632_01 - 2022-08-02

  • New Features
    • Add optional argument feature.
    • Add the following native APIs. The length of the arguments can be got in the native module. int32_t (*get_args_stack_length)(SPVM_ENV* env, SPVM_VALUE* stack); void (*set_args_stack_length)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t args_length);
    • Add the following runtime native APIs. int32_t (*get_method_required_args_length)(void* runtime, int32_t method_id);
  • Improve Exception Messages
    • Improve exception messages in native APIs.
  • Incompatible Changes
    • All the implementations, the fields, the arguments, native APIs, documents about the concept of "signature" are removed.
    • The definitions of the following native APIs are changed.
      • Before
        • int32_t (*get_field_id)(SPVM_ENV* env, const char* class_name, const char* field_name, const char* signature); int32_t (*get_class_var_id)(SPVM_ENV* env, const char* class_name, const char* class_var_name, const char* signature); int32_t (*get_class_method_id)(SPVM_ENV* env, const char* class_name, const char* method_name, const char* signature); int32_t (*get_instance_method_id)(SPVM_ENV* env, void* object, const char* method_name, const char* signature); 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* error, 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* error, 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* error, 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* error, const char* file, int32_t line); 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_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 (*get_instance_method_id_static)(SPVM_ENV* env, const char* class_name, const char* method_name, const char* signature); int32_t (*get_instance_method_id_super)(SPVM_ENV* env, void* object, const char* method_name, const char* signature);
    • After
      • int32_t (*get_field_id)(SPVM_ENV* env, const char* class_name, const char* field_name); int32_t (*get_class_var_id)(SPVM_ENV* env, const char* class_name, const char* class_var_name); int32_t (*get_class_method_id)(SPVM_ENV* env, const char* class_name, const char* method_name); int32_t (*get_instance_method_id)(SPVM_ENV* env, void* object, const char* method_name); void (*set_field_object_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* class_name, const char* field_name, void* value, int32_t* error, 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, int32_t* error, 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, void* value, int32_t* error, 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, int32_t* error, const char* file, int32_t line); int32_t (*call_class_method_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, const char* method_name, const char* file, int32_t line); int32_t (*call_instance_method_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* method_name, const char* file, int32_t line); int32_t (*get_instance_method_id_static)(SPVM_ENV* env, const char* class_name, const char* method_name); int32_t (*get_instance_method_id_super)(SPVM_ENV* env, void* object, const char* method_name);
      • The definitions of the following runtime native APIs are removed. int32_t (*get_class_var_signature_id)(void* runtime, int32_t class_var_id); int32_t (*get_field_signature_id)(void* runtime, int32_t field_id); int32_t (*get_method_signature_id)(void* runtime, int32_t method_id);
      • The precompiled methods don't use get_field_id_cache, get_class_var_id_cache, get_method_id_cache.
      • The definitions of the following runtime native APIs are changed.
        • Before
          • int32_t (*get_type_width)(void* runtime, int32_t type_id);
        • After
          • int32_t (*get_type_stack_length)(void* runtime, int32_t type_id);
      • The definitions of the following native APIs are changed.
        • Before
          • int32_t (*call_spvm_method)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t method_id, int32_t args_stack_length); int32_t (*call_class_method_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, const char* method_name, const char* file, int32_t line); int32_t (*call_instance_method_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* method_name, const char* file, int32_t line); int32_t (*call_class_method)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t method_id); int32_t (*call_instance_method)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t method_id);
        • After
          • int32_t (*call_spvm_method)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t method_id, int32_t args_stack_length); int32_t (*call_class_method_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* class_name, const char* method_name, int32_t args_stack_length, const char* file, int32_t line); int32_t (*call_instance_method_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* object, const char* method_name, int32_t args_stack_length, const char* file, int32_t line); int32_t (*call_class_method)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t method_id, int32_t args_stack_length); int32_t (*call_instance_method)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t method_id, int32_t args_stack_length);
      • The definitions of the following native APIs are removed. int32_t (*get_method_id_cache)(SPVM_ENV* env, const char* method_cache_name, int32_t method_cache_name_length); int32_t (*get_field_id_cache)(SPVM_ENV* env, const char* field_cache_name, int32_t field_cache_name_length); int32_t (*get_class_var_id_cache)(SPVM_ENV* env, const char* class_var_cache_name, int32_t class_var_cache_name_length);
  • Internal Ineffective Changes
    • Rename the opcode SPVM_OPCODE_C_ID_CALL_INSTANCE_METHOD_BY_SIGNATURE to SPVM_OPCODE_C_ID_CALL_INSTANCE_METHOD_BY_NAME.
    • Remove signature_id fields in spvm_runtime_class_var, spvm_runtime_field, spvm_runtime_method.
    • Add args_length field to spvm_call_method.h.
    • Rename width of spvm_runtime_type to stack_length.
    • Rename width of spvm_type to stack_length.
    • Rename SPVM_TYPE_get_width to SPVM_TYPE_get_stack_length.

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
Link Information
Configurations of Compile and Link of Native Sources
Configurations of creating excutable files.
Create a Executable File
Library Information
Link 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
Command Line Information
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.
Error
System Error
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
Point 3D
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