/* This file is auto-generated by SPVM::Builder::Util::build_precompile_header_content_c_source */
static const char* spvm_precompile_header_content = 
      "/* Minimal definitions for standard types and functions */\012#define NULL ((void*)0)\012struct _iobuf;\012ty"
      "pedef struct _iobuf FILE;\012\012typedef signed char int8_t;\012typedef short int16_t;\012typedef int int32_t;\012t"
      "ypedef unsigned char uint8_t;\012typedef unsigned short uint16_t;\012typedef unsigned int uint32_t;\012\012#if d"
      "efined(__LP64__)\012  /* LP64 System (Linux, macOS, etc.) */\012  typedef long int64_t;\012  typedef unsigned"
      " long uint64_t;\012  typedef long intptr_t;\012  typedef unsigned long size_t;\012  #define PRId64 \"ld\"\012#else"
      "\012  /* LLP64 System (Windows 64-bit) */\012  typedef long long int64_t;\012  typedef unsigned long long uin"
      "t64_t;\012  typedef long long intptr_t;\012  typedef unsigned long long size_t;\012  #define PRId64 \"lld\"\012#en"
      "dif\012\012#define PRId8 \"d\"\012#define PRId16 \"d\"\012#define PRId32 \"d\"\012#define INT8_MIN (-128)\012#define INT8_MA"
      "X 127\012#define INT16_MIN (-32768)\012#define INT16_MAX 32767\012#define INT32_MIN (-2147483647 - 1)\012#define"
      " INT32_MAX 2147483647\012\012#define INT64_MIN (-9223372036854775807LL - 1)\012#define INT64_MAX 922337203685"
      "4775807LL\012#define EOF (-1)\012\012/* spvm_native.h (headers-stripped) */\012// Copyright (c) 2023 Yuki Kimoto"
      "\012// MIT License\012\012#ifndef SPVM_NATIVE_H\012#define SPVM_NATIVE_H\012\012\012struct spvm_native_allocator;\012typedef"
      " struct spvm_native_allocator SPVM_NATIVE_ALLOCATOR;\012\012struct spvm_native_string_buffer;\012typedef stru"
      "ct spvm_native_string_buffer SPVM_NATIVE_STRING_BUFFER;\012\012struct spvm_native_compiler;\012typedef struct"
      " spvm_native_compiler SPVM_NATIVE_COMPILER;\012\012struct spvm_native_class_file;\012typedef struct spvm_nati"
      "ve_class_file SPVM_NATIVE_CLASS_FILE;\012\012struct spvm_native_runtime;\012typedef struct spvm_native_runtim"
      "e SPVM_NATIVE_RUNTIME;\012\012struct spvm_native_basic_type;\012typedef struct spvm_native_basic_type SPVM_NA"
      "TIVE_BASIC_TYPE;\012\012struct spvm_native_class_var;\012typedef struct spvm_native_class_var SPVM_NATIVE_CLA"
      "SS_VAR;\012\012struct spvm_native_field;\012typedef struct spvm_native_field SPVM_NATIVE_FIELD;\012\012struct spvm_"
      "native_method;\012typedef struct spvm_native_method SPVM_NATIVE_METHOD;\012\012struct spvm_native_arg;\012typede"
      "f struct spvm_native_arg SPVM_NATIVE_ARG;\012\012struct spvm_native_mutex;\012typedef struct spvm_native_mute"
      "x SPVM_NATIVE_MUTEX;\012\012struct spvm_native_opcode;\012typedef struct spvm_native_opcode SPVM_NATIVE_OPCOD"
      "E;\012\012struct spvm_obj;\012typedef struct spvm_obj SPVM_OBJ;\012\012struct spvm_ref;\012typedef struct spvm_ref SPV"
      "M_REF;\012\012#define SPVM_NATIVE_GET_POINTER(object) (*(void**)object)\012\012#define SPVM_NATIVE_SET_POINTER(o"
      "bject, pointer) (*(void**)object = pointer)\012\012#define spvm_warnf(stream, format, ...) fprintf(stream,"
      " format \"\\n  %s at %s line %d\\n\", ##__VA_ARGS__, __func__, __FILE__, __LINE__)\012\012#define spvm_warn(fo"
      "rmat, ...) spvm_warnf(stderr, format, ##__VA_ARGS__)\012\012typedef union spvm_value SPVM_VALUE;\012\012struct s"
      "pvm_env;\012typedef struct spvm_env SPVM_ENV;\012\012struct spvm_env_api;\012typedef struct spvm_env_api SPVM_EN"
      "V_API;\012\012struct spvm_api_allocator;\012typedef struct spvm_api_allocator SPVM_API_ALLOCATOR;\012\012struct spv"
      "m_api_string_buffer;\012typedef struct spvm_api_string_buffer SPVM_API_STRING_BUFFER;\012\012struct spvm_api_"
      "compiler;\012typedef struct spvm_api_compiler SPVM_API_COMPILER;\012\012struct spvm_api_class_file;\012typedef s"
      "truct spvm_api_class_file SPVM_API_CLASS_FILE;\012\012struct spvm_api_runtime;\012typedef struct spvm_api_run"
      "time SPVM_API_RUNTIME;\012\012struct spvm_api_basic_type;\012typedef struct spvm_api_basic_type SPVM_API_BASI"
      "C_TYPE;\012\012struct spvm_api_class_var;\012typedef struct spvm_api_class_var SPVM_API_CLASS_VAR;\012\012struct sp"
      "vm_api_field;\012typedef struct spvm_api_field SPVM_API_FIELD;\012\012struct spvm_api_method;\012typedef struct "
      "spvm_api_method SPVM_API_METHOD;\012\012struct spvm_api_arg;\012typedef struct spvm_api_arg SPVM_API_ARG;\012\012st"
      "ruct spvm_api_mutex;\012typedef struct spvm_api_mutex SPVM_API_MUTEX;\012\012struct spvm_api_type;\012typedef st"
      "ruct spvm_api_type SPVM_API_TYPE;\012\012struct spvm_api_internal;\012typedef struct spvm_api_internal SPVM_A"
      "PI_INTERNAL;\012\012union spvm_value {\012  int8_t bval;\012  int16_t sval;\012  int32_t ival;\012  int64_t lval;\012  fl"
      "oat fval;\012  double dval;\012  SPVM_OBJ* oval;\012  SPVM_REF* ref;\012  void* address;\012  int8_t* bref;\012  int16"
      "_t* sref;\012  int32_t* iref;\012  int64_t* lref;\012  float* fref;\012  double* dref;\012};\012\012\012\012\012\012\012\012struct spvm_env"
      " {\012  SPVM_NATIVE_RUNTIME* runtime;\012  SPVM_ENV_API* api;\012  SPVM_ENV* (*new_env)(void);\012  void (*free_"
      "env)(SPVM_ENV* env);\012  int32_t (*call_init_methods)(SPVM_ENV* env, SPVM_VALUE* stack);\012  int32_t (*s"
      "et_command_info_program_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* obj_program_name);\012  int32"
      "_t (*set_command_info_argv)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* obj_argv);\012  int32_t (*set_c"
      "ommand_info_basetime)(SPVM_ENV* env, SPVM_VALUE* stack, int64_t base_time);\012  void (*destroy_class_v"
      "ars)(SPVM_ENV* env, SPVM_VALUE* stack);\012  int32_t (*args_width)(SPVM_ENV* env, SPVM_VALUE* stack);\012 "
      " SPVM_NATIVE_BASIC_TYPE* (*get_object_basic_type)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object"
      ");\012  int32_t (*get_object_basic_type_id)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  cons"
      "t char* (*get_object_basic_type_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int32_t"
      " (*get_object_type_dimension)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  SPVM_NATIVE_BAS"
      "IC_TYPE* (*get_basic_type)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name);\012  SPVM_NA"
      "TIVE_BASIC_TYPE* (*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);\012  SPVM_NATIVE_BASIC"
      "_TYPE* (*get_basic_type_by_id)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id);\012  int32_t ("
      "*get_basic_type_id)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name);\012  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);\012  SPVM_NATIVE_CLASS_VAR* (*get_class_va"
      "r)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* class_var_name);\012  int"
      "8_t (*get_class_var_byte)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var);\012  int"
      "16_t (*get_class_var_short)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var);\012  i"
      "nt32_t (*get_class_var_int)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var);\012  i"
      "nt64_t (*get_class_var_long)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var);\012  "
      "float (*get_class_var_float)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var);\012  "
      "double (*get_class_var_double)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var);\012"
      "  SPVM_OBJ* (*get_class_var_object)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_v"
      "ar);\012  SPVM_OBJ* (*get_class_var_string)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* cl"
      "ass_var);\012  void (*set_class_var_byte)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* clas"
      "s_var, int8_t value);\012  void (*set_class_var_short)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CL"
      "ASS_VAR* class_var, int16_t value);\012  void (*set_class_var_int)(SPVM_ENV* env, SPVM_VALUE* stack, SP"
      "VM_NATIVE_CLASS_VAR* class_var, int32_t value);\012  void (*set_class_var_long)(SPVM_ENV* env, SPVM_VAL"
      "UE* stack, SPVM_NATIVE_CLASS_VAR* class_var, int64_t value);\012  void (*set_class_var_float)(SPVM_ENV*"
      " env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var, float value);\012  void (*set_class_var_doub"
      "le)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var, double value);\012  void (*set_"
      "class_var_object)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var, SPVM_OBJ* valu"
      "e);\012  void (*set_class_var_string)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_va"
      "r, SPVM_OBJ* value);\012  SPVM_OBJ** (*get_class_var_object_ref)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM"
      "_NATIVE_CLASS_VAR* class_var);\012  int8_t (*get_class_var_byte_by_name)(SPVM_ENV* env, SPVM_VALUE* sta"
      "ck, const char* basic_type_name, const char* class_var_name, int32_t* error_id, const char* func_nam"
      "e, const char* file, int32_t line);\012  int16_t (*get_class_var_short_by_name)(SPVM_ENV* env, SPVM_VAL"
      "UE* stack, const char* basic_type_name, const char* class_var_name, int32_t* error_id, const char* f"
      "unc_name, const char* file, int32_t line);\012  int32_t (*get_class_var_int_by_name)(SPVM_ENV* env, SPV"
      "M_VALUE* stack, const char* basic_type_name, const char* class_var_name, int32_t* error_id, const ch"
      "ar* func_name, const char* file, int32_t line);\012  int64_t (*get_class_var_long_by_name)(SPVM_ENV* en"
      "v, SPVM_VALUE* stack, const char* basic_type_name, const char* class_var_name, int32_t* error_id, co"
      "nst char* func_name, const char* file, int32_t line);\012  float (*get_class_var_float_by_name)(SPVM_EN"
      "V* env, SPVM_VALUE* stack, const char* basic_type_name, const char* class_var_name, int32_t* error_i"
      "d, const char* func_name, const char* file, int32_t line);\012  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);\012  SPVM_OBJ* (*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);\012  SPVM_OBJ* (*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);\012  void (*set_c"
      "lass_var_byte_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* cl"
      "ass_var_name, int8_t value, int32_t* error_id, const char* func_name, const char* file, int32_t line"
      ");\012  void (*set_class_var_short_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_na"
      "me, const char* class_var_name, int16_t value, int32_t* error_id, const char* func_name, const char*"
      " file, int32_t line);\012  void (*set_class_var_int_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const ch"
      "ar* 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);\012  void (*set_class_var_long_by_name)(SPVM_ENV* env, SPVM_VALU"
      "E* 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);\012  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, i"
      "nt32_t* error_id, const char* func_name, const char* file, int32_t line);\012  void (*set_class_var_dou"
      "ble_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* class_var_na"
      "me, double value, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  void "
      "(*set_class_var_object_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const"
      " char* class_var_name, SPVM_OBJ* value, int32_t* error_id, const char* func_name, const char* file, "
      "int32_t line);\012  void (*set_class_var_string_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* "
      "basic_type_name, const char* class_var_name, SPVM_OBJ* value, int32_t* error_id, const char* func_na"
      "me, const char* file, int32_t line);\012  SPVM_NATIVE_FIELD* (*get_field)(SPVM_ENV* env, SPVM_VALUE* st"
      "ack, SPVM_OBJ* object, const char* field_name);\012  SPVM_NATIVE_FIELD* (*get_field_static)(SPVM_ENV* e"
      "nv, SPVM_VALUE* stack, const char* basic_type_name, const char* field_name);\012  int8_t (*get_field_by"
      "te)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field);\012  int16_t (*get_f"
      "ield_short)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field);\012  int32_t"
      " (*get_field_int)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field);\012  i"
      "nt64_t (*get_field_long)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* fiel"
      "d);\012  float (*get_field_float)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD"
      "* field);\012  double (*get_field_double)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATI"
      "VE_FIELD* field);\012  SPVM_OBJ* (*get_field_object)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object"
      ", SPVM_NATIVE_FIELD* field);\012  SPVM_OBJ* (*get_field_string)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_"
      "OBJ* object, SPVM_NATIVE_FIELD* field);\012  void (*set_field_byte)(SPVM_ENV* env, SPVM_VALUE* stack, S"
      "PVM_OBJ* object, SPVM_NATIVE_FIELD* field, int8_t value);\012  void (*set_field_short)(SPVM_ENV* env, S"
      "PVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field, int16_t value);\012  void (*set_field_int"
      ")(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field, int32_t value);\012  vo"
      "id (*set_field_long)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field, i"
      "nt64_t value);\012  void (*set_field_float)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NA"
      "TIVE_FIELD* field, float value);\012  void (*set_field_double)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_O"
      "BJ* object, SPVM_NATIVE_FIELD* field, double value);\012  void (*set_field_object)(SPVM_ENV* env, SPVM_"
      "VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field, SPVM_OBJ* value);\012  void (*set_field_strin"
      "g)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field, SPVM_OBJ* value);\012 "
      " int8_t (*get_field_byte_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* fi"
      "eld_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  int16_t (*get"
      "_field_short_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, in"
      "t32_t* error_id, const char* func_name, const char* file, int32_t line);\012  int32_t (*get_field_int_b"
      "y_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, int32_t* error_i"
      "d, const char* func_name, const char* file, int32_t line);\012  int64_t (*get_field_long_by_name)(SPVM_"
      "ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, int32_t* error_id, const char"
      "* func_name, const char* file, int32_t line);\012  float (*get_field_float_by_name)(SPVM_ENV* env, SPVM"
      "_VALUE* stack, SPVM_OBJ* object, const char* field_name, int32_t* error_id, const char* func_name, c"
      "onst char* file, int32_t line);\012  double (*get_field_double_by_name)(SPVM_ENV* env, SPVM_VALUE* stac"
      "k, SPVM_OBJ* object, const char* field_name, int32_t* error_id, const char* func_name, const char* f"
      "ile, int32_t line);\012  SPVM_OBJ* (*get_field_object_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_O"
      "BJ* object, const char* field_name, int32_t* error_id, const char* func_name, const char* file, int3"
      "2_t line);\012  SPVM_OBJ* (*get_field_string_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* objec"
      "t, const char* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line)"
      ";\012  void (*set_field_byte_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* f"
      "ield_name, int8_t value, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012"
      "  void (*set_field_short_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* fi"
      "eld_name, int16_t value, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012"
      "  void (*set_field_int_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* fiel"
      "d_name, int32_t value, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  "
      "void (*set_field_long_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field"
      "_name, int64_t value, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  v"
      "oid (*set_field_float_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field"
      "_name, float value, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  voi"
      "d (*set_field_double_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_"
      "name, double value, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  voi"
      "d (*set_field_object_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_"
      "name, SPVM_OBJ* value, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  "
      "void (*set_field_string_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* fie"
      "ld_name, SPVM_OBJ* value, int32_t* error_id, const char* func_name, const char* file, int32_t line);"
      "\012  const char* (*get_field_string_chars_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object,"
      " const char* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012"
      "  SPVM_NATIVE_METHOD* (*get_method)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, c"
      "onst char* method_name);\012  SPVM_NATIVE_METHOD* (*get_class_method)(SPVM_ENV* env, SPVM_VALUE* stack,"
      " const char* basic_type_name, const char* method_name);\012  SPVM_NATIVE_METHOD* (*get_instance_method_"
      "static)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* method_name);\012  S"
      "PVM_NATIVE_METHOD* (*get_instance_method)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const "
      "char* method_name);\012  int32_t (*call_method_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE"
      "_METHOD* method, int32_t args_width, const char* func_name, const char* file, int32_t line);\012  int32"
      "_t (*call_method)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_METHOD* method, int32_t args_width, "
      "const char* func_name, const char* file, int32_t line);\012  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);\012  void (*call_instance_me"
      "thod_static_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* meth"
      "od_name, int32_t args_width, int32_t* error_id, const char* func_name, const char* file, int32_t lin"
      "e);\012  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);\012  S"
      "PVM_OBJ* (*new_object_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic_typ"
      "e);\012  SPVM_OBJ* (*new_object)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic_type);"
      "\012  SPVM_OBJ* (*new_object_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, in"
      "t32_t* error_id, const char* func_name, const char* file, int32_t line);\012  SPVM_OBJ* (*new_pointer_o"
      "bject_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic_type, void* pointer"
      ");\012  SPVM_OBJ* (*new_pointer_object)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic"
      "_type, void* pointer);\012  SPVM_OBJ* (*new_pointer_object_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, c"
      "onst char* basic_type_name, void* pointer, int32_t* error_id, const char* func_name, const char* fil"
      "e, int32_t line);\012  void* (*get_pointer)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  void"
      " (*set_pointer)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, void* pointer);\012  SPVM_OBJ* (*ne"
      "w_string_nolen_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, const char* bytes);\012  SPVM_OBJ* (*new_st"
      "ring_nolen)(SPVM_ENV* env, SPVM_VALUE* stack, const char* bytes);\012  SPVM_OBJ* (*new_string_no_mortal"
      ")(SPVM_ENV* env, SPVM_VALUE* stack, const char* bytes, int32_t length);\012  SPVM_OBJ* (*new_string)(SP"
      "VM_ENV* env, SPVM_VALUE* stack, const char* bytes, int32_t length);\012  SPVM_OBJ* (*new_byte_array_no_"
      "mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);\012  SPVM_OBJ* (*new_byte_array)(SPVM_ENV* e"
      "nv, SPVM_VALUE* stack, int32_t length);\012  SPVM_OBJ* (*new_short_array_no_mortal)(SPVM_ENV* env, SPVM"
      "_VALUE* stack, int32_t length);\012  SPVM_OBJ* (*new_short_array)(SPVM_ENV* env, SPVM_VALUE* stack, int"
      "32_t length);\012  SPVM_OBJ* (*new_int_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t lengt"
      "h);\012  SPVM_OBJ* (*new_int_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);\012  SPVM_OBJ* (*ne"
      "w_long_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);\012  SPVM_OBJ* (*new_long_ar"
      "ray)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);\012  SPVM_OBJ* (*new_float_array_no_mortal)(SPV"
      "M_ENV* env, SPVM_VALUE* stack, int32_t length);\012  SPVM_OBJ* (*new_float_array)(SPVM_ENV* env, SPVM_V"
      "ALUE* stack, int32_t length);\012  SPVM_OBJ* (*new_double_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* s"
      "tack, int32_t length);\012  SPVM_OBJ* (*new_double_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t len"
      "gth);\012  SPVM_OBJ* (*new_object_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_"
      "TYPE* basic_type, int32_t length);\012  SPVM_OBJ* (*new_object_array)(SPVM_ENV* env, SPVM_VALUE* stack,"
      " SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t length);\012  SPVM_OBJ* (*new_object_array_by_name)(SPVM_E"
      "NV* env, SPVM_VALUE* stack, const char* basic_type_name, int32_t length, int32_t* error_id, const ch"
      "ar* func_name, const char* file, int32_t line);\012  SPVM_OBJ* (*new_string_array)(SPVM_ENV* env, SPVM_"
      "VALUE* stack, int32_t length);\012  SPVM_OBJ* (*new_muldim_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* "
      "stack, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t type_dimension, int32_t length);\012  SPVM_OBJ* (*ne"
      "w_muldim_array)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t type_d"
      "imension, int32_t length);\012  SPVM_OBJ* (*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);\012  SPVM_OBJ* (*new_mulnum_array_no_mortal)(SPVM_ENV* env"
      ", SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t length);\012  SPVM_OBJ* (*new_mulnum_a"
      "rray)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t length);\012  SPVM_"
      "OBJ* (*new_mulnum_array_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, int3"
      "2_t length, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  SPVM_OBJ* ("
      "*new_array_proto_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t length);\012  SP"
      "VM_OBJ* (*new_array_proto)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t length);\012  int"
      "32_t (*length)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int8_t* (*get_elems_byte)(SPVM"
      "_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array);\012  int16_t* (*get_elems_short)(SPVM_ENV* env, SPVM_VA"
      "LUE* stack, SPVM_OBJ* array);\012  int32_t* (*get_elems_int)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ"
      "* array);\012  int64_t* (*get_elems_long)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array);\012  float* "
      "(*get_elems_float)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array);\012  double* (*get_elems_double)"
      "(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array);\012  SPVM_OBJ* (*get_elem_object)(SPVM_ENV* env, S"
      "PVM_VALUE* stack, SPVM_OBJ* array, int32_t index);\012  SPVM_OBJ* (*get_elem_string)(SPVM_ENV* env, SPV"
      "M_VALUE* stack, SPVM_OBJ* array, int32_t index);\012  void (*set_elem_object)(SPVM_ENV* env, SPVM_VALUE"
      "* stack, SPVM_OBJ* array, int32_t index, SPVM_OBJ* object);\012  void (*set_elem_string)(SPVM_ENV* env,"
      " SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, SPVM_OBJ* string);\012  const char* (*get_chars)(SP"
      "VM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* string_object);\012  int32_t (*get_bool_object_value)(SPVM_EN"
      "V* env, SPVM_VALUE* stack, SPVM_OBJ* bool_object);\012  SPVM_OBJ* (*concat_no_mortal)(SPVM_ENV* env, SP"
      "VM_VALUE* stack, SPVM_OBJ* string1, SPVM_OBJ* string2);\012  SPVM_OBJ* (*concat)(SPVM_ENV* env, SPVM_VA"
      "LUE* stack, SPVM_OBJ* string1, SPVM_OBJ* string2);\012  void (*shorten)(SPVM_ENV* env, SPVM_VALUE* stac"
      "k, SPVM_OBJ* string, int32_t new_length);\012  void (*make_read_only)(SPVM_ENV* env, SPVM_VALUE* stack,"
      " SPVM_OBJ* string);\012  int32_t (*is_read_only)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* string);\012 "
      " void (*print)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* string);\012  void (*print_stderr)(SPVM_ENV*"
      " env, SPVM_VALUE* stack, SPVM_OBJ* string);\012  SPVM_OBJ* (*dump_no_mortal)(SPVM_ENV* env, SPVM_VALUE*"
      " stack, SPVM_OBJ* object);\012  SPVM_OBJ* (*dump)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012"
      "  const char* (*dumpc)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  SPVM_OBJ* (*copy_no_mo"
      "rtal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  SPVM_OBJ* (*copy)(SPVM_ENV* env, SPVM_V"
      "ALUE* stack, SPVM_OBJ* object);\012  const char* (*get_spvm_version_string)(SPVM_ENV* env, SPVM_VALUE* "
      "stack);\012  double (*get_spvm_version_number)(SPVM_ENV* env, SPVM_VALUE* stack);\012  const char* (*get_v"
      "ersion_string)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  double (*get"
      "_version_number)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  int32_t (*"
      "die)(SPVM_ENV* env, SPVM_VALUE* stack, const char* exception_format, const char* func_name, const ch"
      "ar* file, int32_t line, ...);\012  SPVM_OBJ* (*get_exception)(SPVM_ENV* env, SPVM_VALUE* stack);\012  int3"
      "2_t (*set_exception)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* exception);\012  SPVM_OBJ* (*new_stack"
      "_trace_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* exception, SPVM_NATIVE_METHOD* method,"
      " int32_t line);\012  SPVM_OBJ* (*new_stack_trace)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* exception"
      ", SPVM_NATIVE_METHOD* method, int32_t line);\012  int32_t (*is_string)(SPVM_ENV* env, SPVM_VALUE* stack"
      ", SPVM_OBJ* object);\012  int32_t (*is_class)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  in"
      "t32_t (*is_pointer_class)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int32_t (*is_array)"
      "(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int32_t (*is_object_array)(SPVM_ENV* env, SP"
      "VM_VALUE* stack, SPVM_OBJ* object);\012  int32_t (*is_numeric_array)(SPVM_ENV* env, SPVM_VALUE* stack, "
      "SPVM_OBJ* object);\012  int32_t (*is_mulnum_array)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);"
      "\012  int32_t (*isa)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_BASIC_TYPE* basic_"
      "type, int32_t type_dimension);\012  int32_t (*isa_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* "
      "object, const char* basic_type_name, int32_t type_dimension);\012  int32_t (*is_type)(SPVM_ENV* env, SP"
      "VM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t type_dimension);\012  in"
      "t32_t (*is_type_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* basic_type_"
      "name, int32_t type_dimension);\012  int32_t (*elem_isa)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* arr"
      "ay, SPVM_OBJ* element);\012  int32_t (*get_elem_size)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array"
      ");\012  SPVM_OBJ* (*get_type_name_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  SPV"
      "M_OBJ* (*get_type_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  SPVM_OBJ* (*get_compi"
      "le_type_name_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, int32_t type_"
      "dimension, int32_t type_flag);\012  SPVM_OBJ* (*get_compile_type_name)(SPVM_ENV* env, SPVM_VALUE* stack"
      ", const char* basic_type_name, int32_t type_dimension, int32_t type_flag);\012  int32_t (*enter_scope)("
      "SPVM_ENV* env, SPVM_VALUE* stack);\012  void (*leave_scope)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t m"
      "ortal_stack_top);\012  int32_t (*push_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  in"
      "t32_t (*weaken)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** object_address);\012  int32_t (*isweak)(SP"
      "VM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** object);\012  void (*unweaken)(SPVM_ENV* env, SPVM_VALUE* st"
      "ack, SPVM_OBJ** object_address);\012  SPVM_OBJ* (*strerror_string)(SPVM_ENV* env, SPVM_VALUE* stack, in"
      "t32_t errno_value, int32_t length);\012  SPVM_OBJ* (*strerror_string_nolen)(SPVM_ENV* env, SPVM_VALUE* "
      "stack, int32_t errno_value);\012  const char* (*strerror)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t err"
      "no_value, int32_t length);\012  const char* (*strerror_nolen)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t"
      " errno_value);\012  int32_t (*is_binary_compatible_object)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* "
      "object);\012  int32_t (*is_binary_compatible_stack)(SPVM_ENV* env, SPVM_VALUE* stack);\012  SPVM_VALUE* (*"
      "new_stack)(SPVM_ENV* env);\012  void (*free_stack)(SPVM_ENV* env, SPVM_VALUE* stack);\012  SPVM_OBJ* (*get"
      "_field_object_defined_and_has_pointer_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, c"
      "onst char* field_name, int32_t* error_id, const char* func_name, const char* file_name, int32_t line"
      ");\012  SPVM_OBJ** (*get_field_object_ref)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NAT"
      "IVE_FIELD* field);\012  SPVM_OBJ** (*get_field_object_ref_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SP"
      "VM_OBJ* object, const char* field_name, int32_t* error_id, const char* func_name, const char* file, "
      "int32_t line);\012  int32_t (*check_bootstrap_method)(SPVM_ENV* env, SPVM_VALUE* stack, const char* bas"
      "ic_type_name);\012  void (*assign_object)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** dist_ref, SPVM_O"
      "BJ* object);\012  SPVM_OBJ* (*new_string_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t len"
      "gth);\012  void* (*new_memory_block)(SPVM_ENV* env, SPVM_VALUE* stack, size_t size);\012  void (*free_memo"
      "ry_block)(SPVM_ENV* env, SPVM_VALUE* stack, void* block);\012  int32_t (*get_memory_blocks_count)(SPVM_"
      "ENV* env, SPVM_VALUE* stack);\012  void (*say)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* string);\012  v"
      "oid (*warn)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* string, const char* func_name, const char* f"
      "ile, int32_t line);\012  FILE* (*spvm_stdin)(SPVM_ENV* env, SPVM_VALUE* stack);\012  FILE* (*spvm_stdout)("
      "SPVM_ENV* env, SPVM_VALUE* stack);\012  FILE* (*spvm_stderr)(SPVM_ENV* env, SPVM_VALUE* stack);\012  SPVM_"
      "OBJ* (*new_array_proto_element_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* element, int32"
      "_t length);\012  SPVM_OBJ* (*new_array_proto_element)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* eleme"
      "nt, int32_t length);\012  int32_t (*get_byte_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* "
      "byte_object);\012  int32_t (*get_short_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* short_"
      "object);\012  int32_t (*get_int_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* int_object);\012"
      "  int64_t (*get_long_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* long_object);\012  float"
      " (*get_float_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* float_object);\012  double (*get"
      "_double_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* double_object);\012  int32_t (*no_fre"
      "e)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  void (*set_no_free)(SPVM_ENV* env, SPVM_VA"
      "LUE* stack, SPVM_OBJ* object, int32_t no_free);\012  char* (*get_stack_tmp_buffer)(SPVM_ENV* env, SPVM_"
      "VALUE* stack);\012  void (*print_exception_to_stderr)(SPVM_ENV* env, SPVM_VALUE* stack);\012  SPVM_OBJ* (*"
      "dump_object_internal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int32_t (*get_seed)(SPV"
      "M_ENV* env, SPVM_VALUE* stack);\012  void (*set_seed)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t seed);\012"
      "  int32_t (*seed_initialized)(SPVM_ENV* env, SPVM_VALUE* stack);\012  const char* (*get_basic_type_name"
      "_in_version_from)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  int32_t ("
      "*set_command_info_warning)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t warning);\012  void (*destroy_cach"
      "e_class_vars)(SPVM_ENV* env, SPVM_VALUE* stack);\012  SPVM_VALUE* (*new_stack_with_all_method_call_perm"
      "itted)(SPVM_ENV* env);\012  int32_t (*call_instance_method_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack,"
      " const char* method_name, int32_t args_width);\012  int32_t (*call_instance_method)(SPVM_ENV* env, SPVM"
      "_VALUE* stack, const char* method_name, int32_t args_width);\012  int32_t (*call_method_no_mortal_no_ch"
      "eck_args)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_METHOD* method, int32_t args_width, const ch"
      "ar* func_name, const char* file_name, int32_t line);\012  int32_t (*call_instance_method_no_mortal_less"
      "_check_args)(SPVM_ENV* env, SPVM_VALUE* stack, const char* method_name, int32_t args_width, const ch"
      "ar* decl_args_signature, const char* func_name, const char* file_name, int32_t line);\012  void (*enabl"
      "e_options)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  void (*disable_options)(SPVM_ENV* "
      "env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int32_t (*is_options)(SPVM_ENV* env, SPVM_VALUE* stack,"
      " SPVM_OBJ* object);\012  int32_t (*is_any_object_array)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* obj"
      "ect);\012  int32_t (*exists_field)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIEL"
      "D* field);\012  int32_t (*exists_field_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, con"
      "st char* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  vo"
      "id (*delete_field)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field);\012  "
      "void (*delete_field_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_n"
      "ame, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  void (*make_fixed_"
      "length)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int32_t (*is_fixed_length)(SPVM_ENV* "
      "env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int32_t (*set_length)(SPVM_ENV* env, SPVM_VALUE* stack,"
      " SPVM_OBJ* object, int32_t length);\012  int32_t (*capacity)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ"
      "* object);\012  int32_t (*set_capacity)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t cap"
      "acity);\012  int8_t (*numeric_object_to_byte)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32"
      "_t* error_id);\012  int16_t (*numeric_object_to_short)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* obje"
      "ct, int32_t* error_id);\012  int32_t (*numeric_object_to_int)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OB"
      "J* object, int32_t* error_id);\012  int64_t (*numeric_object_to_long)(SPVM_ENV* env, SPVM_VALUE* stack,"
      " SPVM_OBJ* object, int32_t* error_id);\012  float (*numeric_object_to_float)(SPVM_ENV* env, SPVM_VALUE*"
      " stack, SPVM_OBJ* object, int32_t* error_id);\012  double (*numeric_object_to_double)(SPVM_ENV* env, SP"
      "VM_VALUE* stack, SPVM_OBJ* object, int32_t* error_id);\012  SPVM_OBJ* (*numeric_object_to_string_no_mor"
      "tal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t* error_id);\012  SPVM_OBJ* (*numeric_o"
      "bject_to_string)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t* error_id);\012  int32_t ("
      "*is_numeric_object)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  void (*say_stderr)(SPVM_E"
      "NV* env, SPVM_VALUE* stack, SPVM_OBJ* string);\012  int32_t (*get_call_depth)(SPVM_ENV* env, SPVM_VALUE"
      "* stack);\012  SPVM_VALUE* (*get_caller_info_stack)(SPVM_ENV* env, SPVM_VALUE* stack);\012  int32_t (*get_"
      "caller_info_stack_record_size)(SPVM_ENV* env, SPVM_VALUE* stack);\012  SPVM_NATIVE_METHOD* (*get_curren"
      "t_method)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t level, int32_t* error_id);\012  SPVM_OBJ* (*caller_"
      "no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t level, int32_t* error_id);\012  SPVM_OBJ* (*caller"
      ")(SPVM_ENV* env, SPVM_VALUE* stack, int32_t level, int32_t* error_id);\012  int32_t (*die_with_string)("
      "SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* obj_exception, const char* func_name, const char* file, "
      "int32_t line);\012  SPVM_OBJ* (*build_exception_message_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, in"
      "t32_t level);\012  SPVM_OBJ* (*build_exception_message)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t level"
      ");\012  int32_t (*call_end_methods)(SPVM_ENV* env, SPVM_VALUE* stack);\012  int32_t (*is_utf8)(SPVM_ENV* e"
      "nv, SPVM_VALUE* stack, SPVM_OBJ* obj_string, int32_t* error_id);\012  void (*set_byte_object_value)(SPV"
      "M_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* byte_object, int8_t value);\012  void (*set_short_object_value"
      ")(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* short_object, int16_t value);\012  void (*set_int_object_"
      "value)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* int_object, int32_t value);\012  void (*set_long_obj"
      "ect_value)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* long_object, int64_t value);\012  void (*set_flo"
      "at_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* float_object, float value);\012  void (*se"
      "t_double_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* double_object, double value);\012};\012"
      "\012struct spvm_env_api {\012  SPVM_API_ALLOCATOR* allocator;\012  SPVM_API_STRING_BUFFER* string_buffer;\012  S"
      "PVM_API_COMPILER* compiler;\012  SPVM_API_CLASS_FILE* class_file;\012  SPVM_API_RUNTIME* runtime;\012  SPVM_A"
      "PI_BASIC_TYPE* basic_type;\012  SPVM_API_CLASS_VAR* class_var;\012  SPVM_API_FIELD* field;\012  SPVM_API_METH"
      "OD* method;\012  SPVM_API_ARG* arg;\012  SPVM_API_TYPE* type;\012  SPVM_API_INTERNAL* internal;\012  SPVM_API_MU"
      "TEX* mutex;\012};\012\012struct spvm_api_allocator {\012  SPVM_NATIVE_ALLOCATOR* (*new_instance)(void);\012  void ("
      "*free_instance)(SPVM_NATIVE_ALLOCATOR* allocator);\012};\012\012struct spvm_api_arg {\012  const char* (*get_nam"
      "e)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_ARG* arg);\012  int32_t (*get_index)(SPVM_NATIVE_RUNTIME* "
      "runtime, SPVM_NATIVE_ARG* arg);\012  SPVM_NATIVE_BASIC_TYPE* (*get_basic_type)(SPVM_NATIVE_RUNTIME* run"
      "time, SPVM_NATIVE_ARG* arg);\012  int32_t (*get_type_dimension)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATI"
      "VE_ARG* arg);\012  int32_t (*get_type_flag)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_ARG* arg);\012  int3"
      "2_t (*get_stack_index)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_ARG* arg);\012  SPVM_NATIVE_METHOD* (*"
      "get_current_method)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_ARG* arg);\012  int32_t (*is_optional)(SP"
      "VM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_ARG* arg);\012  SPVM_VALUE (*get_default_value)(SPVM_NATIVE_RUN"
      "TIME* runtime, SPVM_NATIVE_ARG* arg);\012};\012\012struct spvm_api_basic_type {\012  const char* (*get_name)(SPV"
      "M_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  int32_t (*get_id)(SPVM_NATIVE_RUNT"
      "IME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  int32_t (*get_category)(SPVM_NATIVE_RUNTIME* ru"
      "ntime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  SPVM_NATIVE_BASIC_TYPE* (*get_parent)(SPVM_NATIVE_RUNT"
      "IME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  const char* (*get_version_string)(SPVM_NATIVE_R"
      "UNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  const char* (*get_class_dir)(SPVM_NATIVE_RUN"
      "TIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  const char* (*get_class_rel_file)(SPVM_NATIVE_"
      "RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  int32_t (*is_pointer)(SPVM_NATIVE_RUNTIME* "
      "runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  int32_t (*is_anon)(SPVM_NATIVE_RUNTIME* runtime, SPV"
      "M_NATIVE_BASIC_TYPE* basic_type);\012  SPVM_NATIVE_CLASS_VAR* (*get_class_var_by_index)(SPVM_NATIVE_RUN"
      "TIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t class_var_index);\012  SPVM_NATIVE_CLASS_VAR"
      "* (*get_class_var_by_name)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type, const c"
      "har* class_var_name);\012  int32_t (*get_class_vars_length)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_B"
      "ASIC_TYPE* basic_type);\012  SPVM_NATIVE_FIELD* (*get_field_by_index)(SPVM_NATIVE_RUNTIME* runtime, SPV"
      "M_NATIVE_BASIC_TYPE* basic_type, int32_t field_index);\012  SPVM_NATIVE_FIELD* (*get_field_by_name)(SPV"
      "M_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type, const char* field_name);\012  int32_t (*"
      "get_fields_length)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  SPVM_NATIVE_"
      "METHOD* (*get_method_by_index)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type, int"
      "32_t method_index);\012  SPVM_NATIVE_METHOD* (*get_method_by_name)(SPVM_NATIVE_RUNTIME* runtime, SPVM_N"
      "ATIVE_BASIC_TYPE* basic_type, const char* method_name);\012  int32_t (*get_methods_length)(SPVM_NATIVE_"
      "RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  SPVM_NATIVE_BASIC_TYPE* (*get_anon_basic_ty"
      "pe_by_index)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t anon_basic_ty"
      "pe_index);\012  int32_t (*get_anon_basic_types_length)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_"
      "TYPE* basic_type);\012  int32_t (*has_interface)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* "
      "basic_type, SPVM_NATIVE_BASIC_TYPE* interface_basic_type);\012  int32_t (*is_super_class)(SPVM_NATIVE_R"
      "UNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* dist_basic_type, SPVM_NATIVE_BASIC_TYPE* src_basic_type);\012 "
      " const char* (*get_file)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  SPVM_N"
      "ATIVE_RUNTIME* (*get_current_runtime)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_ty"
      "pe);\012  SPVM_NATIVE_BASIC_TYPE* (*get_basic_type_in_version_from)(SPVM_NATIVE_RUNTIME* runtime, SPVM_"
      "NATIVE_BASIC_TYPE* basic_type);\012  int32_t (*get_fields_size)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATI"
      "VE_BASIC_TYPE* basic_type);\012  int32_t (*get_monitor_var_type)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NAT"
      "IVE_BASIC_TYPE* basic_type, int32_t* ret_basic_type_id, int32_t* ret_dimension, int32_t* ret_flag);\012"
      "  int32_t (*has_monitor_var)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  in"
      "t32_t (*is_generated_from_anon_method)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_t"
      "ype);\012};\012\012struct spvm_api_class_file {\012  const char* (*get_class_name)(SPVM_NATIVE_COMPILER* compile"
      "r, SPVM_NATIVE_CLASS_FILE* class_file);\012  const char* (*get_file)(SPVM_NATIVE_COMPILER* compiler, SP"
      "VM_NATIVE_CLASS_FILE* class_file);\012  void (*set_file)(SPVM_NATIVE_COMPILER* compiler, SPVM_NATIVE_CL"
      "ASS_FILE* class_file, const char* file);\012  const char* (*get_dir)(SPVM_NATIVE_COMPILER* compiler, SP"
      "VM_NATIVE_CLASS_FILE* class_file);\012  void (*set_dir)(SPVM_NATIVE_COMPILER* compiler, SPVM_NATIVE_CLA"
      "SS_FILE* class_file, const char* dir);\012  const char* (*get_rel_file)(SPVM_NATIVE_COMPILER* compiler,"
      " SPVM_NATIVE_CLASS_FILE* class_file);\012  void (*set_rel_file)(SPVM_NATIVE_COMPILER* compiler, SPVM_NA"
      "TIVE_CLASS_FILE* class_file, const char* rel_file);\012  const char* (*get_content)(SPVM_NATIVE_COMPILE"
      "R* compiler, SPVM_NATIVE_CLASS_FILE* class_file);\012  void (*set_content)(SPVM_NATIVE_COMPILER* compil"
      "er, SPVM_NATIVE_CLASS_FILE* class_file, const char* content);\012  int32_t (*get_content_length)(SPVM_N"
      "ATIVE_COMPILER* compiler, SPVM_NATIVE_CLASS_FILE* class_file);\012  void (*set_content_length)(SPVM_NAT"
      "IVE_COMPILER* compiler, SPVM_NATIVE_CLASS_FILE* class_file, int32_t content_length);\012};\012\012struct spvm"
      "_api_class_var {\012  const char* (*get_name)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_CLASS_VAR* clas"
      "s_var);\012  int32_t (*get_index)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_CLASS_VAR* class_var);\012  SP"
      "VM_NATIVE_BASIC_TYPE* (*get_basic_type)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_CLASS_VAR* class_v"
      "ar);\012  int32_t (*get_type_dimension)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_CLASS_VAR* class_var)"
      ";\012  int32_t (*get_type_flag)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_CLASS_VAR* class_var);\012  SPVM"
      "_NATIVE_BASIC_TYPE* (*get_current_basic_type)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_CLASS_VAR* c"
      "lass_var);\012  int32_t (*is_cache)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_CLASS_VAR* class_var);\012};"
      "\012\012struct spvm_api_compiler {\012  SPVM_NATIVE_COMPILER* (*new_instance)(void);\012  void (*free_instance)("
      "SPVM_NATIVE_COMPILER* compiler);\012  int32_t (*get_start_line)(SPVM_NATIVE_COMPILER* compiler);\012  void"
      " (*set_start_line)(SPVM_NATIVE_COMPILER* compiler, int32_t start_line);\012  const char* (*get_start_fi"
      "le)(SPVM_NATIVE_COMPILER* compiler);\012  void (*set_start_file)(SPVM_NATIVE_COMPILER* compiler, const "
      "char* start_file);\012  int32_t (*get_include_dirs_length )(SPVM_NATIVE_COMPILER* compiler);\012  const ch"
      "ar* (*get_include_dir )(SPVM_NATIVE_COMPILER* compiler, int32_t index);\012  void (*add_include_dir)(SP"
      "VM_NATIVE_COMPILER* compiler, const char* include_dir);\012  void (*clear_include_dirs)(SPVM_NATIVE_COM"
      "PILER* compiler);\012  void (*add_class_file)(SPVM_NATIVE_COMPILER* compiler, const char* class_name);\012"
      "  void (*delete_class_file)(SPVM_NATIVE_COMPILER* compiler, const char* class_name);\012  SPVM_NATIVE_C"
      "LASS_FILE* (*get_class_file)(SPVM_NATIVE_COMPILER* compiler, const char* class_name);\012  int32_t (*co"
      "mpile)(SPVM_NATIVE_COMPILER* compiler, const char* basic_type_name);\012  const char* (*get_error_messa"
      "ge)(SPVM_NATIVE_COMPILER* compiler, int32_t index);\012  int32_t (*get_error_messages_length)(SPVM_NATI"
      "VE_COMPILER* compiler);\012  SPVM_NATIVE_RUNTIME* (*get_runtime)(SPVM_NATIVE_COMPILER* compiler);\012  voi"
      "d (*prepend_include_dir)(SPVM_NATIVE_COMPILER* compiler, const char* include_dir);\012  int32_t (*compi"
      "le_anon_class)(SPVM_NATIVE_COMPILER* compiler, const char* source, const char** anon_basic_type_name"
      "_ptr);\012  int32_t (*compile_script)(SPVM_NATIVE_COMPILER* compiler, const char* source, const char** "
      "anon_basic_type_name_ptr);\012};\012\012struct spvm_api_field {\012  const char* (*get_name)(SPVM_NATIVE_RUNTIME"
      "* runtime, SPVM_NATIVE_FIELD* field);\012  int32_t (*get_index)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATI"
      "VE_FIELD* field);\012  int32_t (*get_offset)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_FIELD* field);\012 "
      " SPVM_NATIVE_BASIC_TYPE* (*get_basic_type)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_FIELD* field);\012"
      "  int32_t (*get_type_dimension)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_FIELD* field);\012  int32_t ("
      "*get_type_flag)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_FIELD* field);\012  SPVM_NATIVE_BASIC_TYPE* ("
      "*get_current_basic_type)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_FIELD* field);\012  int32_t (*get_ex"
      "ists_offset)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_FIELD* field);\012  int32_t (*get_exists_bit)(SP"
      "VM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_FIELD* field);\012};\012\012struct spvm_api_method {\012  const char* (*"
      "get_name)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_index)(SPVM_NAT"
      "IVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  SPVM_NATIVE_BASIC_TYPE* (*get_return_basic_type"
      ")(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_return_type_dimension)("
      "SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_return_type_flag)(SPVM_NA"
      "TIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  SPVM_NATIVE_ARG* (*get_arg_by_index)(SPVM_NATI"
      "VE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method, int32_t arg_index);\012  int32_t (*get_args_length)(SP"
      "VM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_required_args_length)(SPVM_"
      "NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  SPVM_NATIVE_BASIC_TYPE* (*get_current_basic_"
      "type)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  SPVM_NATIVE_OPCODE* (*get_opcode_"
      "by_index)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method, int32_t opcode_index);\012  int32_t"
      " (*get_opcodes_length)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*is_cla"
      "ss_method)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*is_anon)(SPVM_NATI"
      "VE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*is_native)(SPVM_NATIVE_RUNTIME* runtim"
      "e, SPVM_NATIVE_METHOD* method);\012  int32_t (*is_precompile)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE"
      "_METHOD* method);\012  int32_t (*is_enum)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  "
      "int32_t (*get_byte_vars_width)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t "
      "(*get_short_vars_width)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_i"
      "nt_vars_width)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_long_vars_"
      "width)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_float_vars_width)("
      "SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_double_vars_width)(SPVM_N"
      "ATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_object_vars_width)(SPVM_NATIVE_"
      "RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_ref_vars_width)(SPVM_NATIVE_RUNTIME* "
      "runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_mortal_stack_length)(SPVM_NATIVE_RUNTIME* runt"
      "ime, SPVM_NATIVE_METHOD* method);\012  void* (*get_native_address)(SPVM_NATIVE_RUNTIME* runtime, SPVM_N"
      "ATIVE_METHOD* method);\012  void (*set_native_address)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD"
      "* method, void* address);\012  void* (*get_precompile_address)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIV"
      "E_METHOD* method);\012  void (*set_precompile_address)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD"
      "* method, void* address);\012  int32_t (*is_precompile_fallback)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NAT"
      "IVE_METHOD* method);\012  void (*set_is_precompile_fallback)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_"
      "METHOD* method, int32_t is_precompile_fallback);\012  const char* (*get_args_signature)(SPVM_NATIVE_RUN"
      "TIME* runtime, SPVM_NATIVE_METHOD* method);\012  const char* (*get_abs_name)(SPVM_NATIVE_RUNTIME* runti"
      "me, SPVM_NATIVE_METHOD* method);\012};\012\012struct spvm_api_runtime {\012  int32_t (*get_object_data_offset)(S"
      "PVM_NATIVE_RUNTIME* runtime);\012  int32_t (*get_object_ref_count_offset)(SPVM_NATIVE_RUNTIME* runtime)"
      ";\012  int32_t (*get_object_length_offset)(SPVM_NATIVE_RUNTIME* runtime);\012  SPVM_NATIVE_BASIC_TYPE* (*g"
      "et_basic_type_by_id)(SPVM_NATIVE_RUNTIME* runtime, int32_t basic_type_id);\012  SPVM_NATIVE_BASIC_TYPE*"
      " (*get_basic_type_by_name)(SPVM_NATIVE_RUNTIME* runtime, const char* basic_type_name);\012  int32_t (*g"
      "et_basic_types_length)(SPVM_NATIVE_RUNTIME* runtime);\012  void (*build_precompile_class_source)(SPVM_N"
      "ATIVE_RUNTIME* runtime, SPVM_NATIVE_STRING_BUFFER* string_buffer, SPVM_NATIVE_BASIC_TYPE* module_bas"
      "ic_type);\012  void (*build_precompile_method_source)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_STRING_"
      "BUFFER* string_buffer, SPVM_NATIVE_METHOD* method);\012  SPVM_NATIVE_COMPILER* (*get_compiler)(SPVM_NAT"
      "IVE_RUNTIME* runtime);\012  void (*set_compiler)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_COMPILER* co"
      "mpiler);\012  FILE* (*get_spvm_stdin)(SPVM_NATIVE_RUNTIME* runtime);\012  FILE* (*get_spvm_stdout)(SPVM_NA"
      "TIVE_RUNTIME* runtime);\012  FILE* (*get_spvm_stderr)(SPVM_NATIVE_RUNTIME* runtime);\012  SPVM_ENV* (*get_"
      "env)(SPVM_NATIVE_RUNTIME* runtime);\012  int32_t (*get_object_capacity_offset)(SPVM_NATIVE_RUNTIME* run"
      "time);\012  void* method_begin_cb;\012  void* method_end_cb;\012  void* object_data_offset;\012  void* object_le"
      "ngth_offset;\012  void* object_capacity_offset;\012  void* stack_index_call_depth;\012  void* stack_index_cal"
      "ler_info_stack;\012  void* stack_index_caller_info_stack_record_size;\012};\012\012struct spvm_api_mutex {\012  SPV"
      "M_NATIVE_MUTEX* (*new_instance)(SPVM_ENV* env, SPVM_VALUE* stack);\012  void (*free_instance)(SPVM_ENV*"
      " env, SPVM_VALUE* stack, SPVM_NATIVE_MUTEX* mutex);\012  void (*lock)(SPVM_ENV* env, SPVM_VALUE* stack,"
      " SPVM_NATIVE_MUTEX* mutex);\012  void (*unlock)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_MUTEX* mu"
      "tex);\012  void (*reader_lock)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_MUTEX* mutex);\012  void (*re"
      "ader_unlock)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_MUTEX* mutex);\012};\012\012struct spvm_api_string"
      "_buffer {\012  SPVM_NATIVE_STRING_BUFFER* (*new_instance)(SPVM_NATIVE_ALLOCATOR* allocator, int32_t cap"
      "acity);\012  void (*free_instance)(SPVM_NATIVE_STRING_BUFFER* string_buffer);\012  const char* (*get_strin"
      "g)(SPVM_NATIVE_STRING_BUFFER* string_buffer);\012  int32_t (*get_length)(SPVM_NATIVE_STRING_BUFFER* str"
      "ing_buffer);\012};\012\012struct spvm_api_internal {\012  int32_t (*get_ref_count)(SPVM_ENV* env, SPVM_VALUE* st"
      "ack, SPVM_OBJ* object);\012  void (*inc_ref_count)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);"
      "\012  void (*dec_ref_count)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  char* (*get_stack_tm"
      "p_buffer)(SPVM_ENV* env, SPVM_VALUE* stack);\012  void (*leave_scope_local)(SPVM_ENV* env, SPVM_VALUE* "
      "stack, SPVM_OBJ** object_vars, int32_t* mortal_stack_typed_var_index, int32_t* mortal_stack_top_ptr,"
      " int32_t* mortal_stack_tops, int32_t mortal_stack_tops_index);\012  size_t (*c_strlen)(SPVM_ENV* env, S"
      "PVM_VALUE* stack, const char* str);\012  void* (*c_memcpy)(SPVM_ENV* env, SPVM_VALUE* stack, void* dest"
      ", const void* src, size_t n);\012  void* (*c_memset)(SPVM_ENV* env, SPVM_VALUE* stack, void* s, int c, "
      "size_t n);\012  int (*c_memcmp)(SPVM_ENV* env, SPVM_VALUE* stack, const void* s1, const void* s2, size_"
      "t n);\012  long long (*c_strtoll)(SPVM_ENV* env, SPVM_VALUE* stack, const char* str, char** endptr, int"
      " base);\012  float (*c_strtof)(SPVM_ENV* env, SPVM_VALUE* stack, const char* str, char** endptr);\012  dou"
      "ble (*c_strtod)(SPVM_ENV* env, SPVM_VALUE* stack, const char* str, char** endptr);\012  int (*c_fputs)("
      "SPVM_ENV* env, SPVM_VALUE* stack, const char* s, void* stream);\012  int (*c_fgetc)(SPVM_ENV* env, SPVM"
      "_VALUE* stack, void* stream);\012  int (*c_snprintf_len)(SPVM_ENV* env, SPVM_VALUE* stack, char* str, s"
      "ize_t size, const char* format, SPVM_VALUE* args, int32_t args_length);\012};\012\012struct spvm_api_type {\012 "
      " int32_t (*can_assign)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* dist_basic_type, int32_"
      "t dist_type_dimension, int32_t dist_type_flag, SPVM_NATIVE_BASIC_TYPE* src_basic_type, int32_t src_t"
      "ype_dimension, int32_t src_type_flag);\012  int32_t (*get_type_width)(SPVM_NATIVE_RUNTIME* runtime, SPV"
      "M_NATIVE_BASIC_TYPE* basic_type, int32_t type_dimension, int32_t type_flag);\012  int32_t (*is_object_t"
      "ype)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t type_dimension, int32"
      "_t type_flag);\012  int32_t (*is_any_object_type)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE*"
      " basic_type, int32_t type_dimension, int32_t type_flag);\012  int32_t (*is_object_array_type)(SPVM_NATI"
      "VE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t type_dimension, int32_t type_flag);"
      "\012  int32_t (*is_any_object_array_type)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_t"
      "ype, int32_t type_dimension, int32_t type_flag);\012  int32_t (*is_numeric_type)(SPVM_NATIVE_RUNTIME* r"
      "untime, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t type_dimension, int32_t type_flag);\012  int32_t (*"
      "is_class_type)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t type_dimens"
      "ion, int32_t type_flag);\012};\012\012enum {\012  SPVM_NATIVE_C_BASIC_TYPE_ID_UNKNOWN,\012  SPVM_NATIVE_C_BASIC_TYP"
      "E_ID_UNDEF,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_VOID,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_BYTE,\012  SPVM_NATIVE_C_"
      "BASIC_TYPE_ID_SHORT,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_INT,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_LONG,\012  SPVM_N"
      "ATIVE_C_BASIC_TYPE_ID_FLOAT,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_DOUBLE,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_STR"
      "ING,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_ANY_OBJECT,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_BYTE_CLASS,\012  SPVM_NATI"
      "VE_C_BASIC_TYPE_ID_SHORT_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_INT_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_"
      "ID_LONG_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_FLOAT_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_DOUBLE_CLASS"
      ",\012  SPVM_NATIVE_C_BASIC_TYPE_ID_BOOL_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS,\012  SPVM_NATIVE"
      "_C_BASIC_TYPE_ID_ERROR_SYSTEM_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_NOT_SUPPORTED_CLASS,\012  SPVM"
      "_NATIVE_C_BASIC_TYPE_ID_COMMAND_INFO_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_ADDRESS_CLASS,\012  SPVM_NATI"
      "VE_C_BASIC_TYPE_ID_ERROR_COMPILE_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_SPVM_CLASS,\012  SPVM_NATIVE_C_BA"
      "SIC_TYPE_ID_ERROR_METHOD_CALL_NOT_PERMITTED_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_STRINGABLE_CLASS,\012 "
      " SPVM_NATIVE_C_BASIC_TYPE_ID_COUNTABLE_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_CALLER_INFO_CLASS,\012  SPV"
      "M_NATIVE_C_BASIC_TYPE_ID_CLONEABLE_CLASS,\012};\012\012enum {\012  SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_UNKNOWN,\012  "
      "SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_UNDEF,\012  SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_VOID,\012  SPVM_NATIVE_C_B"
      "ASIC_TYPE_CATEGORY_NUMERIC,\012  SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_MULNUM,\012  SPVM_NATIVE_C_BASIC_TYPE_C"
      "ATEGORY_STRING,\012  SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_INTER"
      "FACE,\012  SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_ANY_OBJECT,\012};\012\012enum {\012  SPVM_NATIVE_C_TYPE_FLAG_REF = 1,\012"
      "  SPVM_NATIVE_C_TYPE_FLAG_MUTABLE = 2,\012  SPVM_NATIVE_C_TYPE_FLAG_VARARGS = 4,\012};\012\012enum {\012  SPVM_NATI"
      "VE_C_STACK_TMP_BUFFER_SIZE = 512,\012};\012\012// These functions are linked only by SPVM itself,\012// so nativ"
      "e classes cannot use these functions.\012SPVM_ENV* SPVM_NATIVE_new_env(void);\012\012#endif\012\012/* spvm_implemen"
      "t.h (headers-stripped) */\012// Copyright (c) 2023 Yuki Kimoto\012// MIT License\012\012#ifndef SPVM_IMPLEMENT_H"
      "\012#define SPVM_IMPLEMENT_H\012\012// Do not include any header files.\012// SPVM precompiled code will be exec"
      "uted in a security sandbox via JIT in the future.\012\012\012\012\012\012\012\012\012\012\012enum {\012  SPVM_IMPLEMENT_C_EXCEPTION_ASSI"
      "GN_NOT_SATISFY_ASSIGNMENT_REQUIREMENT,\012  SPVM_IMPLEMENT_C_EXCEPTION_ASSIGN_READ_ONLY_STRING_TO_MUTAB"
      "LE_TYPE,\012  SPVM_IMPLEMENT_C_EXCEPTION_DIVIDE_ZERO,\012  SPVM_IMPLEMENT_C_EXCEPTION_STRING_CONCAT_LEFT_U"
      "NDEFINED,\012  SPVM_IMPLEMENT_C_EXCEPTION_STRING_CONCAT_RIGHT_UNDEFINED,\012  SPVM_IMPLEMENT_C_EXCEPTION_N"
      "EW_OBJECT_FAILED,\012  SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRAY_FAILED,\012  SPVM_IMPLEMENT_C_EXCEPTION_NEW_AR"
      "RRAY_LENGTH_SMALL,\012  SPVM_IMPLEMENT_C_EXCEPTION_NEW_STRING_FAILED,\012  SPVM_IMPLEMENT_C_EXCEPTION_NEW_"
      "STRING_LEN_FAILED,\012  SPVM_IMPLEMENT_C_EXCEPTION_NEW_STRING_LEN_LENGTH_SMALL,\012  SPVM_IMPLEMENT_C_EXCE"
      "PTION_ARRAY_UNDEFINED,\012  SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE,\012  SPVM_IMPLEM"
      "ENT_C_EXCEPTION_ELEMENT_ASSIGN_NOT_SATISFY_ASSIGNMENT_REQUIREMENT,\012  SPVM_IMPLEMENT_C_EXCEPTION_FIEL"
      "D_ACCESS_INVOCANT_UNDEFINED,\012  SPVM_IMPLEMENT_C_EXCEPTION_WEAKEN_BACK_REFERENCE_ALLOCATION_FAILED,\012 "
      " SPVM_IMPLEMENT_C_EXCEPTION_ERROR_BASIC_TYPE_NOT_FOUND,\012  SPVM_IMPLEMENT_C_EXCEPTION_ERROR_FIELD_NOT"
      "_FOUND,\012  SPVM_IMPLEMENT_C_EXCEPTION_ERROR_CLASS_VAR_NOT_FOUND,\012  SPVM_IMPLEMENT_C_EXCEPTION_ERROR_M"
      "ETHOD_NOT_FOUND,\012  SPVM_IMPLEMENT_C_EXCEPTION_CALL_INSTANCE_METHOD_INVOCANT_UNDEF,\012  SPVM_IMPLEMENT_"
      "C_EXCEPTION_CALL_INSTANCE_METHOD_IMPLEMENT_NOT_FOUND,\012  SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED,\012};"
      "\012\012\012\012static const char* SPVM_IMPLEMENT_STRING_LITERALS[] = {\012  \"An assignment failed. %s type cannot "
      "be assigned to %s type.\",\012  \"A read-only string cannnot be cast to mutable string type.\",\012  \"A value"
      " of an integer type cannnot be divided by 0.\",\012  \"The left operand of . operator must be defined.\",\012"
      "  \"The right operand of . operator must be defined.\",\012  \"A new operator failed. Memory allocation fa"
      "iled.\",\012  \"A new operator to create an array failed. Memory allocation failed.\",\012  \"A new operator t"
      "o create an array failed. The length must be a non-negative integer.\",\012  \"A string creation failed. "
      "Memory allocation failed.\",\012  \"The new_string_len operator failed. Memory allocation failed.\",\012  \"Th"
      "e new_string_len operator failed. The length of the string must be a non-negative integer.\",\012  \"An a"
      "rray access failed. The array must be defined.\",\012  \"An array access failed. The index is out of rang"
      "e.\",\012  \"An array element set failed. %s type cannot be assigned to %s type.\",\012  \"An field access fai"
      "led. The invocant must be defined.\",\012  \"The weaken operator failed. The memory allocation for the we"
      "aken back reference failed.\",\012  \"%s basic type is not found.\",\012  \"%s#%s field is not found.\",\012  \"%s#"
      "%s class variable is not found.\",\012  \"%s#%s method is not found.\",\012  \"Can't call %s method on undefin"
      "ed value.\",\012  \"An instance method call failed. %s#%s method is not found.\",\012  \"An reference access f"
      "ailed. The reference must be defined.\",\012};\012\012enum {\012  SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_EQ,\012  SPV"
      "M_IMPLEMENT_C_EXCEPTION_COMPARISON_NE,\012  SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_GT,\012  SPVM_IMPLEMENT_"
      "C_EXCEPTION_COMPARISON_GE,\012  SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_LT,\012  SPVM_IMPLEMENT_C_EXCEPTION_"
      "COMPARISON_LE,\012  SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_CMP,\012};\012\012#define GET_DATA_ADDRESS(env, stack,"
      " object) ((intptr_t)*(void**)((intptr_t)(SPVM_OBJ*)object + (intptr_t)env->api->runtime->object_data"
      "_offset))\012#define GET_LENGTH(env, stack, object) (*(int32_t*)((intptr_t)(SPVM_OBJ*)object + (intptr_"
      "t)env->api->runtime->object_length_offset))\012#define GET_CAPACITY(env, stack, object) (*(int32_t*)((i"
      "ntptr_t)(SPVM_OBJ*)object + (intptr_t)env->api->runtime->object_capacity_offset))\012\012static inline SPV"
      "M_NATIVE_BASIC_TYPE* SPVM_IMPLEMENT_GET_BASIC_TYPE_BY_NAME(SPVM_ENV* env, SPVM_VALUE* stack, const c"
      "har* basic_type_name, int32_t* error_id) {\012  \012  char* tmp_buffer = env->api->internal->get_stack_tmp"
      "_buffer(env, stack);\012  \012  SPVM_NATIVE_BASIC_TYPE* basic_type = env->api->runtime->get_basic_type_by_"
      "name(env->runtime, basic_type_name);\012  \012  if (!basic_type) {\012    SPVM_VALUE args[1];\012    args[0].add"
      "ress = (void*)basic_type_name;\012    env->api->internal->c_snprintf_len(env, stack, tmp_buffer, SPVM_N"
      "ATIVE_C_STACK_TMP_BUFFER_SIZE, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ERROR_BASIC"
      "_TYPE_NOT_FOUND], args, 1);\012    \012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stac"
      "k, tmp_buffer);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_T"
      "YPE_ID_ERROR_CLASS;\012  }\012  \012  return basic_type;\012}\012\012static inline SPVM_NATIVE_FIELD* SPVM_IMPLEMENT_G"
      "ET_FIELD_BY_NAME(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* field_na"
      "me, int32_t* error_id) {\012  \012  char* tmp_buffer = env->api->internal->get_stack_tmp_buffer(env, stack"
      ");\012  \012  SPVM_NATIVE_FIELD* field = env->get_field_static(env, stack, basic_type_name, field_name);\012 "
      " \012  if (!field) {\012    SPVM_VALUE args[2];\012    args[0].address = (void*)basic_type_name;\012    args[1]."
      "address = (void*)field_name;\012    env->api->internal->c_snprintf_len(env, stack, tmp_buffer, SPVM_NAT"
      "IVE_C_STACK_TMP_BUFFER_SIZE, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ERROR_FIELD_N"
      "OT_FOUND], args, 2);\012    \012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, tmp_"
      "buffer);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_"
      "ERROR_CLASS;\012    return NULL;\012  }\012  \012  return field;\012}\012\012static inline int32_t SPVM_IMPLEMENT_GET_FIE"
      "LD_OFFSET_BY_NAME(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* field_n"
      "ame, int32_t* error_id) {\012  \012  char* tmp_buffer = env->api->internal->get_stack_tmp_buffer(env, stac"
      "k);\012  \012  SPVM_NATIVE_FIELD* field = env->get_field_static(env, stack, basic_type_name, field_name);\012"
      "  \012  if (!field) {\012    SPVM_VALUE args[2];\012    args[0].address = (void*)basic_type_name;\012    args[1]"
      ".address = (void*)field_name;\012    env->api->internal->c_snprintf_len(env, stack, tmp_buffer, SPVM_NA"
      "TIVE_C_STACK_TMP_BUFFER_SIZE, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ERROR_FIELD_"
      "NOT_FOUND], args, 2);\012    \012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, tmp"
      "_buffer);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID"
      "_ERROR_CLASS;\012    return -1;\012  }\012  \012  int32_t field_offset = env->api->field->get_offset(env->runtim"
      "e, field);\012  \012  return field_offset;\012}\012\012static inline int32_t SPVM_IMPLEMENT_GET_FIELD_EXISTS_OFFSET"
      "_BY_NAME(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* field_name, int3"
      "2_t* error_id) {\012  \012  char* tmp_buffer = env->api->internal->get_stack_tmp_buffer(env, stack);\012  \012  "
      "SPVM_NATIVE_FIELD* field = env->get_field_static(env, stack, basic_type_name, field_name);\012  \012  if ("
      "!field) {\012    SPVM_VALUE args[2];\012    args[0].address = (void*)basic_type_name;\012    args[1].address "
      "= (void*)field_name;\012    env->api->internal->c_snprintf_len(env, stack, tmp_buffer, SPVM_NATIVE_C_ST"
      "ACK_TMP_BUFFER_SIZE, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ERROR_FIELD_NOT_FOUND"
      "], args, 2);\012    \012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, tmp_buffer);"
      "\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CL"
      "ASS;\012    return -1;\012  }\012  \012  int32_t field_exists_offset = env->api->field->get_exists_offset(env->r"
      "untime, field);\012  \012  return field_exists_offset;\012}\012\012static inline int32_t SPVM_IMPLEMENT_GET_FIELD_E"
      "XISTS_BIT_BY_NAME(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* field_n"
      "ame, int32_t* error_id) {\012  \012  char* tmp_buffer = env->api->internal->get_stack_tmp_buffer(env, stac"
      "k);\012  \012  SPVM_NATIVE_FIELD* field = env->get_field_static(env, stack, basic_type_name, field_name);\012"
      "  \012  if (!field) {\012    SPVM_VALUE args[2];\012    args[0].address = (void*)basic_type_name;\012    args[1]"
      ".address = (void*)field_name;\012    env->api->internal->c_snprintf_len(env, stack, tmp_buffer, SPVM_NA"
      "TIVE_C_STACK_TMP_BUFFER_SIZE, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ERROR_FIELD_"
      "NOT_FOUND], args, 2);\012    \012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, tmp"
      "_buffer);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID"
      "_ERROR_CLASS;\012    return -1;\012  }\012  \012  int32_t field_exists_bit = env->api->field->get_exists_bit(env"
      "->runtime, field);\012  \012  return field_exists_bit;\012}\012\012static inline SPVM_NATIVE_CLASS_VAR* SPVM_IMPLEM"
      "ENT_GET_CLASS_VAR_BY_NAME(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char*"
      " class_var_name, int32_t* error_id) {\012  \012  char* tmp_buffer = env->api->internal->get_stack_tmp_buff"
      "er(env, stack);\012  \012  SPVM_NATIVE_CLASS_VAR* class_var = env->get_class_var(env, stack, basic_type_na"
      "me, class_var_name);\012  \012  if (!class_var) {\012    SPVM_VALUE args[2];\012    args[0].address = (void*)bas"
      "ic_type_name;\012    args[1].address = (void*)class_var_name;\012    env->api->internal->c_snprintf_len(en"
      "v, stack, tmp_buffer, SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLE"
      "MENT_C_EXCEPTION_ERROR_CLASS_VAR_NOT_FOUND], args, 2);\012    \012    SPVM_OBJ* exception = env->new_strin"
      "g_nolen_no_mortal(env, stack, tmp_buffer);\012    env->set_exception(env, stack, exception);\012    *error"
      "_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  \012  return class_var;\012}\012\012static inline SPVM_NATI"
      "VE_METHOD* SPVM_IMPLEMENT_GET_METHOD_BY_NAME(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_typ"
      "e_name, const char* method_name, int32_t* error_id) {\012  \012  char* tmp_buffer = env->api->internal->ge"
      "t_stack_tmp_buffer(env, stack);\012  \012  SPVM_NATIVE_METHOD* method = env->get_method(env, stack, basic_"
      "type_name, method_name);\012  \012  if (!method) {\012    SPVM_VALUE args[2];\012    args[0].address = (void*)ba"
      "sic_type_name;\012    args[1].address = (void*)method_name;\012    env->api->internal->c_snprintf_len(env,"
      " stack, tmp_buffer, SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEME"
      "NT_C_EXCEPTION_ERROR_METHOD_NOT_FOUND], args, 2);\012    \012    SPVM_OBJ* exception = env->new_string_nol"
      "en_no_mortal(env, stack, tmp_buffer);\012    env->set_exception(env, stack, exception);\012    *error_id ="
      " SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  \012  return method;\012}\012\012static inline void SPVM_IMPLEME"
      "NT_MOVE_OBJECT_UNDEF(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** dist_address) {\012  env->assign_obje"
      "ct(env, stack, dist_address, NULL);\012}\012\012static inline void SPVM_IMPLEMENT_ENABLE_EXISTS_FLAG(SPVM_ENV"
      "* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t exists_offset, int32_t exists_bit) {\012  \012  uint8_"
      "t* block = (uint8_t*)(GET_DATA_ADDRESS(env, stack, object) + exists_offset);\012  \012  *block |= (1 << ex"
      "ists_bit);\012}\012\012static inline void SPVM_IMPLEMENT_DISABLE_EXISTS_FLAG(SPVM_ENV* env, SPVM_VALUE* stack"
      ", SPVM_OBJ* object, int32_t exists_offset, int32_t exists_bit) {\012  \012  uint8_t* block = (uint8_t*)(GE"
      "T_DATA_ADDRESS(env, stack, object) + exists_offset);\012  \012  *block &= ~(1 << exists_bit);\012}\012\012static in"
      "line int32_t SPVM_IMPLEMENT_GET_EXISTS_FLAG(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int3"
      "2_t exists_offset, int32_t exists_bit) {\012  \012  uint8_t* block = (uint8_t*)(GET_DATA_ADDRESS(env, stac"
      "k, object) + exists_offset);\012  \012  int32_t flag = !!(*block & (1 << exists_bit));\012  \012  return flag;\012}"
      "\012\012#define SPVM_IMPLEMENT_DROP_TAG_POINTERS(address) ((SPVM_OBJ*)((intptr_t)address & ~(intptr_t)1))\012"
      "\012#define SPVM_IMPLEMENT_ENTER_SCOPE(mortal_stack, mortal_stack_top, mortal_stack_tops, mortal_stack_"
      "tops_index) (mortal_stack_tops[mortal_stack_tops_index] = mortal_stack_top)\012\012#define SPVM_IMPLEMENT_"
      "PUSH_MORTAL(mortal_stack_typed_var_index, mortal_stack_top, object_vars_index) (mortal_stack_typed_v"
      "ar_index[mortal_stack_top++] = object_vars_index)\012\012static inline void SPVM_IMPLEMENT_LEAVE_SCOPE(SPV"
      "M_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** object_vars, int32_t* mortal_stack_typed_var_index, int32_"
      "t* mortal_stack_top_ptr, int32_t* mortal_stack_tops, int32_t mortal_stack_tops_index) {\012  if (*morta"
      "l_stack_top_ptr > mortal_stack_tops[mortal_stack_tops_index]) {\012    env->api->internal->leave_scope_"
      "local(env, stack, (SPVM_OBJ**)object_vars, mortal_stack_typed_var_index, mortal_stack_top_ptr, morta"
      "l_stack_tops, mortal_stack_tops_index);\012  }\012}\012\012#define SPVM_IMPLEMENT_ADD_INT(out, in1, in2) (out = "
      "in1 + in2)\012#define SPVM_IMPLEMENT_ADD_LONG(out, in1, in2) (out = in1 + in2)\012#define SPVM_IMPLEMENT_A"
      "DD_FLOAT(out, in1, in2) (out = in1 + in2)\012#define SPVM_IMPLEMENT_ADD_DOUBLE(out, in1, in2) (out = in"
      "1 + in2)\012\012#define SPVM_IMPLEMENT_SUBTRACT_INT(out, in1, in2) (out = in1 - in2)\012#define SPVM_IMPLEMEN"
      "T_SUBTRACT_LONG(out, in1, in2) (out = in1 - in2)\012#define SPVM_IMPLEMENT_SUBTRACT_FLOAT(out, in1, in2"
      ") (out = in1 - in2)\012#define SPVM_IMPLEMENT_SUBTRACT_DOUBLE(out, in1, in2) (out = in1 - in2)\012\012#define"
      " SPVM_IMPLEMENT_MULTIPLY_INT(out, in1, in2) (out = in1 * in2)\012#define SPVM_IMPLEMENT_MULTIPLY_LONG(o"
      "ut, in1, in2) (out = in1 * in2)\012#define SPVM_IMPLEMENT_MULTIPLY_FLOAT(out, in1, in2) (out = in1 * in"
      "2)\012#define SPVM_IMPLEMENT_MULTIPLY_DOUBLE(out, in1, in2) (out = in1 * in2)\012\012#define SPVM_IMPLEMENT_D"
      "IVIDE_FLOAT(out, in1, in2) (out = in1 / in2)\012#define SPVM_IMPLEMENT_DIVIDE_DOUBLE(out, in1, in2) (ou"
      "t = in1 / in2)\012\012static inline void SPVM_IMPLEMENT_DIVIDE_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32"
      "_t* out, int32_t in1, int32_t in2, int32_t* error_id) {\012  if (__builtin_expect(in2 == 0, 0)) {\012    S"
      "PVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM"
      "_IMPLEMENT_C_EXCEPTION_DIVIDE_ZERO]);\012    env->set_exception(env, stack, exception);\012    *error_id ="
      " SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = in1 / in2;\012  }\012}\012\012static inline vo"
      "id SPVM_IMPLEMENT_DIVIDE_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* out, int64_t in1, int64_t i"
      "n2, int32_t* error_id) {\012  if (__builtin_expect(in2 == 0, 0)) {\012    SPVM_OBJ* exception = env->new_s"
      "tring_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_DIVIDE_Z"
      "ERO]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ER"
      "ROR_CLASS;\012  }\012  else {\012    *out = in1 / in2;\012  }\012}\012\012// (\222\206\227\252: DIVIDE_FLOAT, DOUBLE \202\315\202\273\202\314\202\334\202\334)\012\012sta"
      "tic inline void SPVM_IMPLEMENT_DIVIDE_UNSIGNED_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, i"
      "nt32_t in1, int32_t in2, int32_t* error_id) {\012  if (__builtin_expect(in2 == 0, 0)) {\012    SPVM_OBJ* e"
      "xception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT"
      "_C_EXCEPTION_DIVIDE_ZERO]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATI"
      "VE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = (uint32_t)in1 / (uint32_t)in2;\012  }\012}\012\012static"
      " inline void SPVM_IMPLEMENT_DIVIDE_UNSIGNED_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* out, int"
      "64_t in1, int64_t in2, int32_t* error_id) {\012  if (__builtin_expect(in2 == 0, 0)) {\012    SPVM_OBJ* exc"
      "eption = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C"
      "_EXCEPTION_DIVIDE_ZERO]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE"
      "_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = (uint64_t)in1 / (uint64_t)in2;\012  }\012}\012\012static i"
      "nline void SPVM_IMPLEMENT_MODULO_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, int32_t in1, in"
      "t32_t in2, int32_t* error_id) {\012  if (__builtin_expect(in2 == 0, 0)) {\012    SPVM_OBJ* exception = env"
      "->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_D"
      "IVIDE_ZERO]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYP"
      "E_ID_ERROR_CLASS;\012  }\012  else {\012    int32_t ret = in1 % in2;\012    if ((in1 < 0) != (in2 < 0) && ret) {"
      " ret += in2; }\012    *out = ret;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_MODULO_LONG(SPVM_ENV* env, S"
      "PVM_VALUE* stack, int64_t* out, int64_t in1, int64_t in2, int32_t* error_id) {\012  if (__builtin_expec"
      "t(in2 == 0, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEME"
      "NT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_DIVIDE_ZERO]);\012    env->set_exception(env, stack, exce"
      "ption);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    int64_t ret = in1 "
      "% in2;\012    if ((in1 < 0) != (in2 < 0) && ret) { ret += in2; }\012    *out = ret;\012  }\012}\012\012static inline v"
      "oid SPVM_IMPLEMENT_MODULO_UNSIGNED_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, int32_t in1, "
      "int32_t in2, int32_t* error_id) {\012  if (__builtin_expect(in2 == 0, 0)) {\012    SPVM_OBJ* exception = e"
      "nv->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION"
      "_DIVIDE_ZERO]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_T"
      "YPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = (uint32_t)in1 % (uint32_t)in2;\012  }\012}\012\012static inline void"
      " SPVM_IMPLEMENT_MODULO_UNSIGNED_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* out, int64_t in1, in"
      "t64_t in2, int32_t* error_id) {\012  if (__builtin_expect(in2 == 0, 0)) {\012    SPVM_OBJ* exception = env"
      "->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_D"
      "IVIDE_ZERO]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYP"
      "E_ID_ERROR_CLASS;\012  }\012  else {\012    *out = (uint64_t)in1 % (uint64_t)in2;\012  }\012}\012\012#define SPVM_IMPLEME"
      "NT_LEFT_SHIFT_INT(out, in1, in2) (out = in1 << in2)\012#define SPVM_IMPLEMENT_LEFT_SHIFT_LONG(out, in1,"
      " in2) (out = in1 << in2)\012\012#define SPVM_IMPLEMENT_RIGHT_ARITHMETIC_SHIFT_INT(out, in1, in2) (out = in"
      "1 >> in2)\012#define SPVM_IMPLEMENT_RIGHT_ARITHMETIC_SHIFT_LONG(out, in1, in2) (out = in1 >> in2)\012\012#def"
      "ine SPVM_IMPLEMENT_RIGHT_LOGICAL_SHIFT_INT(out, in1, in2) (out = (int32_t)((uint32_t)in1 >> in2))\012#d"
      "efine SPVM_IMPLEMENT_RIGHT_LOGICAL_SHIFT_LONG(out, in1, in2) (out = (int64_t)((uint64_t)in1 >> in2))"
      "\012\012#define SPVM_IMPLEMENT_BIT_AND_INT(out, in1, in2) (out = in1 & in2)\012#define SPVM_IMPLEMENT_BIT_AND"
      "_LONG(out, in1, in2) (out = in1 & in2)\012\012#define SPVM_IMPLEMENT_BIT_OR_INT(out, in1, in2) (out = in1 "
      "| in2)\012#define SPVM_IMPLEMENT_BIT_OR_LONG(out, in1, in2) (out = in1 | in2)\012\012#define SPVM_IMPLEMENT_B"
      "IT_XOR_INT(out, in1, in2) (out = in1 ^ in2)\012#define SPVM_IMPLEMENT_BIT_XOR_LONG(out, in1, in2) (out "
      "= in1 ^ in2)\012\012#define SPVM_IMPLEMENT_MOVE_BYTE_ZERO(out) (out = 0)\012#define SPVM_IMPLEMENT_MOVE_SHORT"
      "_ZERO(out) (out = 0)\012#define SPVM_IMPLEMENT_MOVE_INT_ZERO(out) (out = 0)\012#define SPVM_IMPLEMENT_MOVE"
      "_LONG_ZERO(out) (out = 0)\012#define SPVM_IMPLEMENT_MOVE_FLOAT_ZERO(out) (out = 0)\012#define SPVM_IMPLEME"
      "NT_MOVE_DOUBLE_ZERO(out) (out = 0)\012\012static inline void SPVM_IMPLEMENT_MOVE_MULNUM_BYTE_ZERO(SPVM_ENV"
      "* env, SPVM_VALUE* stack, int8_t* out, int32_t fields_length) {\012  for (int32_t field_index = 0; fiel"
      "d_index < fields_length; field_index++) {\012    *(out + field_index) = 0;\012  }\012}\012\012static inline void SP"
      "VM_IMPLEMENT_MOVE_MULNUM_SHORT_ZERO(SPVM_ENV* env, SPVM_VALUE* stack, int16_t* out, int32_t fields_l"
      "ength) {\012  for (int32_t field_index = 0; field_index < fields_length; field_index++) {\012    *(out + f"
      "ield_index) = 0;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_MOVE_MULNUM_INT_ZERO(SPVM_ENV* env, SPVM_V"
      "ALUE* stack, int32_t* out, int32_t fields_length) {\012  for (int32_t field_index = 0; field_index < fi"
      "elds_length; field_index++) {\012    *(out + field_index) = 0;\012  }\012}\012\012static inline void SPVM_IMPLEMENT"
      "_MOVE_MULNUM_LONG_ZERO(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* out, int32_t fields_length) {\012  fo"
      "r (int32_t field_index = 0; field_index < fields_length; field_index++) {\012    *(out + field_index) ="
      " 0;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_MOVE_MULNUM_FLOAT_ZERO(SPVM_ENV* env, SPVM_VALUE* stack"
      ", float* out, int32_t fields_length) {\012  for (int32_t field_index = 0; field_index < fields_length; "
      "field_index++) {\012    *(out + field_index) = 0;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_MOVE_MULNUM_"
      "DOUBLE_ZERO(SPVM_ENV* env, SPVM_VALUE* stack, double* out, int32_t fields_length) {\012  for (int32_t f"
      "ield_index = 0; field_index < fields_length; field_index++) {\012    *(out + field_index) = 0;\012  }\012}\012\012#"
      "define SPVM_IMPLEMENT_MOVE_CONSTANT_BYTE(out, in) (out = in)\012#define SPVM_IMPLEMENT_MOVE_CONSTANT_IN"
      "T(out, in) (out = in)\012#define SPVM_IMPLEMENT_MOVE_CONSTANT_LONG(out, in) (out = in)\012#define SPVM_IMP"
      "LEMENT_MOVE_CONSTANT_FLOAT(out, in) (out = in)\012#define SPVM_IMPLEMENT_MOVE_CONSTANT_DOUBLE(out, in) "
      "(out = in)\012\012#define SPVM_IMPLEMENT_MOVE_BYTE(out, in) (out = in)\012#define SPVM_IMPLEMENT_MOVE_SHORT(o"
      "ut, in) (out = in)\012#define SPVM_IMPLEMENT_MOVE_INT(out, in) (out = in)\012#define SPVM_IMPLEMENT_MOVE_L"
      "ONG(out, in) (out = in)\012#define SPVM_IMPLEMENT_MOVE_FLOAT(out, in) (out = in)\012#define SPVM_IMPLEMENT"
      "_MOVE_DOUBLE(out, in) (out = in)\012#define SPVM_IMPLEMENT_MOVE_OBJECT(env, stack, out, in) (env->assig"
      "n_object(env, stack, out, in))\012\012static inline void SPVM_IMPLEMENT_MOVE_OBJECT_WITH_TYPE_CHECK(SPVM_E"
      "NV* env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_OBJ* in, SPVM_NATIVE_BASIC_TYPE* dist_basic_type, i"
      "nt32_t dist_type_dimension, int32_t* error_id) {\012  SPVM_OBJ* object = in;\012  int32_t isa = env->isa(e"
      "nv, stack, object, dist_basic_type, dist_type_dimension);\012  if (isa) {\012    env->assign_object(env, s"
      "tack, out, in);\012  }\012  else {\012    int32_t scope_id = env->enter_scope(env, stack);\012    \012    SPVM_OBJ*"
      " obj_src_type_name = env->get_type_name(env, stack, object);\012    const char* src_type_name = env->ge"
      "t_chars(env, stack, obj_src_type_name);\012    const char* dist_basic_type_name = env->api->basic_type-"
      ">get_name(env->runtime, dist_basic_type);\012    SPVM_OBJ* obj_dist_type_name = env->get_compile_type_n"
      "ame(env, stack, dist_basic_type_name, dist_type_dimension, 0);\012    const char* dist_type_name = env-"
      ">get_chars(env, stack, obj_dist_type_name);\012    \012    char* tmp_buffer = env->api->internal->get_stac"
      "k_tmp_buffer(env, stack);\012    \012    SPVM_VALUE args[2];\012    args[0].address = (void*)src_type_name;\012 "
      "   args[1].address = (void*)dist_type_name;\012    int32_t string_length = env->api->internal->c_snprin"
      "tf_len(env, stack, tmp_buffer, SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE, SPVM_IMPLEMENT_STRING_LITERALS[S"
      "PVM_IMPLEMENT_C_EXCEPTION_ASSIGN_NOT_SATISFY_ASSIGNMENT_REQUIREMENT], args, 2);\012    \012    SPVM_OBJ* e"
      "xception = env->new_string_no_mortal(env, stack, tmp_buffer, string_length);\012    env->set_exception("
      "env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    \012    env->leave"
      "_scope(env, stack, scope_id);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_MOVE_OBJECT_CHECK_READ_ONLY_S"
      "TRING(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_OBJ* in, int32_t* error_id) {\012  \012  SPVM"
      "_OBJ* string = in;\012  if (string && env->is_read_only(env, stack, string)) {\012    SPVM_OBJ* exception "
      "= env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPT"
      "ION_ASSIGN_READ_ONLY_STRING_TO_MUTABLE_TYPE]);\012    env->set_exception(env, stack, exception);\012    *e"
      "rror_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    env->assign_object(env, stack, o"
      "ut, string);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_ANY_OBJECT_TO_STRING(SPVM_ENV*"
      " env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_OBJ* in, int32_t is_mutable, int32_t* error_id) {\012  \012 "
      " SPVM_OBJ* object = in;\012  if (!object) {\012    env->assign_object(env, stack, out, object);\012  }\012  else"
      " if (is_mutable && env->is_read_only(env, stack, object)) {\012    SPVM_OBJ* exception = env->new_strin"
      "g_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ASSIGN_READ_"
      "ONLY_STRING_TO_MUTABLE_TYPE]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_N"
      "ATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else if (env->is_numeric_object(env, stack, object)) {\012    "
      "env->assign_object(env, stack, out, env->numeric_object_to_string_no_mortal(env, stack, object, erro"
      "r_id));\012  }\012  else if (!env->is_string(env, stack, object)) {\012    int32_t scope_id = env->enter_scop"
      "e(env, stack);\012    \012    SPVM_OBJ* obj_src_type_name = env->get_type_name(env, stack, object);\012    co"
      "nst char* src_type_name = env->get_chars(env, stack, obj_src_type_name);\012    const char* dist_basic_"
      "type_name = \"string\";\012    SPVM_OBJ* obj_dist_type_name = env->get_compile_type_name(env, stack, dist"
      "_basic_type_name, 0, 0);\012    const char* dist_type_name = env->get_chars(env, stack, obj_dist_type_n"
      "ame);\012    \012    char* tmp_buffer = env->api->internal->get_stack_tmp_buffer(env, stack);\012    \012    SPV"
      "M_VALUE args[2];\012    args[0].address = (void*)src_type_name;\012    args[1].address = (void*)dist_type_"
      "name;\012    int32_t string_length = env->api->internal->c_snprintf_len(env, stack, tmp_buffer, SPVM_NA"
      "TIVE_C_STACK_TMP_BUFFER_SIZE, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ASSIGN_NOT_S"
      "ATISFY_ASSIGNMENT_REQUIREMENT], args, 2);\012    \012    SPVM_OBJ* exception = env->new_string_no_mortal(e"
      "nv, stack, tmp_buffer, string_length);\012    env->set_exception(env, stack, exception);\012    *error_id "
      "= SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    \012    env->leave_scope(env, stack, scope_id);\012  }\012  el"
      "se {\012    env->assign_object(env, stack, out, object);\012  }\012}\012\012#define SPVM_IMPLEMENT_MOVE_REF(out, in"
      ") (out = (SPVM_REF*)in)\012#define SPVM_IMPLEMENT_MOVE_REF_UNDEF(out) (out = (SPVM_REF*)NULL)\012\012#define "
      "SPVM_IMPLEMENT_BIT_NOT_INT(out, in) (out = ~in)\012#define SPVM_IMPLEMENT_BIT_NOT_LONG(out, in) (out = "
      "~in)\012#define SPVM_IMPLEMENT_NEGATE_INT(out, in) (out = -in)\012#define SPVM_IMPLEMENT_NEGATE_LONG(out, "
      "in) (out = -in)\012#define SPVM_IMPLEMENT_NEGATE_FLOAT(out, in) (out = -in)\012#define SPVM_IMPLEMENT_NEGA"
      "TE_DOUBLE(out, in) (out = -in)\012\012static inline void SPVM_IMPLEMENT_STRING_CONCAT(SPVM_ENV* env, SPVM_"
      "VALUE* stack, SPVM_OBJ** out, SPVM_OBJ* in1, SPVM_OBJ* in2, int32_t* error_id) {\012  SPVM_OBJ* string1"
      " = in1;\012  SPVM_OBJ* string2 = in2;\012  if (string1 == NULL) {\012    SPVM_OBJ* exception = env->new_strin"
      "g_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_STRING_CONCA"
      "T_LEFT_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BAS"
      "IC_TYPE_ID_ERROR_CLASS;\012  }\012  else if (string2 == NULL) {\012    SPVM_OBJ* exception = env->new_string_"
      "nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_STRING_CONCAT_"
      "RIGHT_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASI"
      "C_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    SPVM_OBJ* string3 = env->concat_no_mortal(env, stack, string"
      "1, string2);\012    env->assign_object(env, stack, out, string3);\012  }\012}\012\012#define SPVM_IMPLEMENT_CONDITI"
      "ON_EVALUATION_INT(out, in) (out = in)\012#define SPVM_IMPLEMENT_CONDITION_EVALUATION_LONG(out, in) (out"
      " = !!in)\012#define SPVM_IMPLEMENT_CONDITION_EVALUATION_FLOAT(out, in) (out = !!in)\012#define SPVM_IMPLEM"
      "ENT_CONDITION_EVALUATION_DOUBLE(out, in) (out = !!in)\012#define SPVM_IMPLEMENT_CONDITION_EVALUATION_OB"
      "JECT(out, in) (out = !!(SPVM_OBJ*)in)\012#define SPVM_IMPLEMENT_CONDITION_EVALUATION_REF(out, in) (out "
      "= !!(SPVM_OBJ*)in)\012#define SPVM_IMPLEMENT_CONDITION_EVALUATION_BOOL_OBJECT(env, stack, out, in) (out"
      " = !!env->get_bool_object_value(env, stack, (SPVM_OBJ*)in))\012\012#define SPVM_IMPLEMENT_NUMERIC_COMPARIS"
      "ON_EQ_INT(out, in1, in2) (out = (in1 == in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_EQ_LONG(out,"
      " in1, in2) (out = (in1 == in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_EQ_FLOAT(out, in1, in2) (o"
      "ut = (in1 == in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_EQ_DOUBLE(out, in1, in2) (out = (in1 =="
      " in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_EQ_OBJECT(out, in1, in2) (out = ((SPVM_OBJ*)in1 == "
      "(SPVM_OBJ*)in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_EQ_REF(out, in1, in2) (out = ((SPVM_OBJ*)"
      "in1 == (SPVM_OBJ*)in2))\012\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_NE_INT(out, in1, in2) (out = (in1"
      " != in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_NE_LONG(out, in1, in2) (out = (in1 != in2))\012#def"
      "ine SPVM_IMPLEMENT_NUMERIC_COMPARISON_NE_FLOAT(out, in1, in2) (out = (in1 != in2))\012#define SPVM_IMPL"
      "EMENT_NUMERIC_COMPARISON_NE_DOUBLE(out, in1, in2) (out = (in1 != in2))\012#define SPVM_IMPLEMENT_NUMERI"
      "C_COMPARISON_NE_OBJECT(out, in1, in2) (out = ((SPVM_OBJ*)in1 != (SPVM_OBJ*)in2))\012#define SPVM_IMPLEM"
      "ENT_NUMERIC_COMPARISON_NE_REF(out, in1, in2) (out = ((SPVM_OBJ*)in1 != (SPVM_OBJ*)in2))\012\012#define SPV"
      "M_IMPLEMENT_NUMERIC_COMPARISON_GT_INT(out, in1, in2) (out = (in1 > in2))\012#define SPVM_IMPLEMENT_NUME"
      "RIC_COMPARISON_GT_LONG(out, in1, in2) (out = (in1 > in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_"
      "GT_FLOAT(out, in1, in2) (out = (in1 > in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_GT_DOUBLE(out,"
      " in1, in2) (out = (in1 > in2))\012\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_GE_INT(out, in1, in2) (out"
      " = (in1 >= in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_GE_LONG(out, in1, in2) (out = (in1 >= in2"
      "))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_GE_FLOAT(out, in1, in2) (out = (in1 >= in2))\012#define SP"
      "VM_IMPLEMENT_NUMERIC_COMPARISON_GE_DOUBLE(out, in1, in2) (out = (in1 >= in2))\012\012#define SPVM_IMPLEMEN"
      "T_NUMERIC_COMPARISON_LT_INT(out, in1, in2) (out = (in1 < in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPAR"
      "ISON_LT_LONG(out, in1, in2) (out = (in1 < in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_LT_FLOAT(o"
      "ut, in1, in2) (out = (in1 < in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_LT_DOUBLE(out, in1, in2)"
      " (out = (in1 < in2))\012\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_LE_INT(out, in1, in2) (out = (in1 <="
      " in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_LE_LONG(out, in1, in2) (out = (in1 <= in2))\012#define"
      " SPVM_IMPLEMENT_NUMERIC_COMPARISON_LE_FLOAT(out, in1, in2) (out = (in1 <= in2))\012#define SPVM_IMPLEME"
      "NT_NUMERIC_COMPARISON_LE_DOUBLE(out, in1, in2) (out = (in1 <= in2))\012\012#define SPVM_IMPLEMENT_NUMERIC_"
      "COMPARISON_CMP_INT(out, in1, in2) (out = in1 > in2 ? 1 : in1 < in2 ? -1 : 0)\012#define SPVM_IMPLEMENT_"
      "NUMERIC_COMPARISON_CMP_LONG(out, in1, in2) (out = in1 > in2 ? 1 : in1 < in2 ? -1 : 0)\012#define SPVM_I"
      "MPLEMENT_NUMERIC_COMPARISON_CMP_FLOAT(out, in1, in2) (out = in1 > in2 ? 1 : in1 < in2 ? -1 : 0)\012#def"
      "ine SPVM_IMPLEMENT_NUMERIC_COMPARISON_CMP_DOUBLE(out, in1, in2) (out = in1 > in2 ? 1 : in1 < in2 ? -"
      "1 : 0)\012\012#define SPVM_IMPLEMENT_IS_UNDEF_OBJECT(out, in) (out = ((SPVM_OBJ*)in == NULL))\012#define SPVM"
      "_IMPLEMENT_IS_UNDEF_REF(out, in) (out = ((SPVM_OBJ*)in == NULL))\012#define SPVM_IMPLEMENT_IS_NOT_UNDEF"
      "_OBJECT(out, in) (out = ((SPVM_OBJ*)in != NULL))\012#define SPVM_IMPLEMENT_IS_NOT_UNDEF_REF(out, in) (o"
      "ut = ((SPVM_OBJ*)in != NULL))\012\012static inline void SPVM_IMPLEMENT_STRING_COMPARISON(SPVM_ENV* env, SP"
      "VM_VALUE* stack, int32_t comparison_op_id, int32_t* out, SPVM_OBJ* in1, SPVM_OBJ* in2) {\012  SPVM_OBJ*"
      " object1 = in1;\012  SPVM_OBJ* object2 = in2;\012  \012  int32_t cmp = 0;\012  if (object1 == NULL && object2 =="
      " NULL) {\012    cmp = 0;\012  }\012  else if (object1 != NULL && object2 == NULL) {\012    cmp = 1;\012  }\012  else i"
      "f (object1 == NULL && object2 != NULL) {\012    cmp = -1;\012  }\012  else {\012    int32_t length1 = GET_LENGTH"
      "(env, stack, object1);\012    int32_t length2 = GET_LENGTH(env, stack, object2);\012    \012    const char* b"
      "ytes1 = env->get_chars(env, stack, object1);\012    const char* bytes2 = env->get_chars(env, stack, obj"
      "ect2);\012    \012    int32_t short_string_length = length1 < length2 ? length1 : length2;\012    int32_t ret"
      "val = env->api->internal->c_memcmp(env, stack, bytes1, bytes2, short_string_length);\012    if (retval)"
      " {\012      cmp = retval < 0 ? -1 : 1;\012    }\012    else if (length1 == length2) {\012      cmp = 0;\012    }\012  "
      "  else {\012      cmp = length1 < length2 ? -1 : 1;\012    }\012  }\012  \012  int32_t flag;\012  switch (comparison_o"
      "p_id) {\012    case SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_EQ: {\012      flag = cmp == 0;\012      break;\012   "
      " }\012    case SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_NE: {\012      flag = cmp != 0;\012      break;\012    }\012  "
      "  case SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_GT: {\012      flag = cmp > 0;\012      break;\012    }\012    case"
      " SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_GE: {\012      flag = cmp >= 0;\012      break;\012    }\012    case SPVM"
      "_IMPLEMENT_C_EXCEPTION_COMPARISON_LT: {\012      flag = cmp < 0;\012      break;\012    }\012    case SPVM_IMPLE"
      "MENT_C_EXCEPTION_COMPARISON_LE: {\012      flag = cmp <= 0;\012      break;\012    }\012    case SPVM_IMPLEMENT_"
      "C_EXCEPTION_COMPARISON_CMP: {\012      flag = cmp;\012      break;\012    }\012    default: {\012      // Unexpecte"
      "d Error\012      flag = 0;\012    }\012  }\012  \012  *out = flag;\012}\012\012#define SPVM_IMPLEMENT_STRING_COMPARISON_EQ(e"
      "nv, stack, out, in1, in2) (SPVM_IMPLEMENT_STRING_COMPARISON(env, stack, SPVM_IMPLEMENT_C_EXCEPTION_C"
      "OMPARISON_EQ, out, in1, in2))\012#define SPVM_IMPLEMENT_STRING_COMPARISON_NE(env, stack, out, in1, in2)"
      " (SPVM_IMPLEMENT_STRING_COMPARISON(env, stack, SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_NE, out, in1, i"
      "n2))\012#define SPVM_IMPLEMENT_STRING_COMPARISON_GT(env, stack, out, in1, in2) (SPVM_IMPLEMENT_STRING_C"
      "OMPARISON(env, stack, SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_GT, out, in1, in2))\012#define SPVM_IMPLEME"
      "NT_STRING_COMPARISON_GE(env, stack, out, in1, in2) (SPVM_IMPLEMENT_STRING_COMPARISON(env, stack, SPV"
      "M_IMPLEMENT_C_EXCEPTION_COMPARISON_GE, out, in1, in2))\012#define SPVM_IMPLEMENT_STRING_COMPARISON_LT(e"
      "nv, stack, out, in1, in2) (SPVM_IMPLEMENT_STRING_COMPARISON(env, stack, SPVM_IMPLEMENT_C_EXCEPTION_C"
      "OMPARISON_LT, out, in1, in2))\012#define SPVM_IMPLEMENT_STRING_COMPARISON_LE(env, stack, out, in1, in2)"
      " (SPVM_IMPLEMENT_STRING_COMPARISON(env, stack, SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_LE, out, in1, i"
      "n2))\012#define SPVM_IMPLEMENT_STRING_COMPARISON_CMP(env, stack, out, in1, in2) (SPVM_IMPLEMENT_STRING_"
      "COMPARISON(env, stack, SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_CMP, out, in1, in2))\012\012static inline voi"
      "d SPVM_IMPLEMENT_NEW_OBJECT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_NATIVE_BASIC_TYPE"
      "* basic_type, int32_t* error_id) {\012  SPVM_OBJ* object = env->new_object_no_mortal(env, stack, basic_"
      "type);\012  if (object == NULL) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack,"
      " SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_OBJECT_FAILED]);\012    env->set_excepti"
      "on(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012   "
      " // Push object\012    env->assign_object(env, stack, out, object);\012  }\012}\012\012static inline void SPVM_IMPL"
      "EMENT_NEW_OBJECT_ARRAY(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_NATIVE_BASIC_TYPE* bas"
      "ic_type, int32_t length, int32_t* error_id) {\012  if (length >= 0) {\012    SPVM_OBJ* object = env->new_o"
      "bject_array_no_mortal(env, stack, basic_type, length);\012    if (object == NULL) {\012      SPVM_OBJ* exc"
      "eption = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C"
      "_EXCEPTION_NEW_ARRAY_FAILED]);\012      env->set_exception(env, stack, exception);\012      *error_id = SP"
      "VM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      env->assign_object(env, stack, out, ob"
      "ject);\012    }\012  }\012  else {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM"
      "_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRRAY_LENGTH_SMALL]);\012    env->set_except"
      "ion(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012}\012\012static i"
      "nline void SPVM_IMPLEMENT_NEW_MULDIM_ARRAY(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_NA"
      "TIVE_BASIC_TYPE* basic_type, int32_t type_dimension, int32_t length, int32_t* error_id) {\012  if (leng"
      "th >= 0) {\012    SPVM_OBJ* object = env->new_muldim_array_no_mortal(env, stack, basic_type, type_dimen"
      "sion, length);\012    if (object == NULL) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal"
      "(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRAY_FAILED]);\012      env"
      "->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012 "
      "   }\012    else {\012      env->assign_object(env, stack, out, object);\012    }\012  }\012  else {\012    SPVM_OBJ* "
      "exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMEN"
      "T_C_EXCEPTION_NEW_ARRRAY_LENGTH_SMALL]);\012    env->set_exception(env, stack, exception);\012    *error_i"
      "d = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_NEW_MULNUM_ARR"
      "AY(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t len"
      "gth, int32_t* error_id) {\012  if (length >= 0) {\012    SPVM_OBJ* object = env->new_mulnum_array_no_morta"
      "l(env, stack, basic_type, length);\012    if (object == NULL) {\012      SPVM_OBJ* exception = env->new_st"
      "ring_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRAY"
      "_FAILED]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TY"
      "PE_ID_ERROR_CLASS;\012    }\012    else {\012      env->assign_object(env, stack, out, object);\012    }\012  }\012  e"
      "lse {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LI"
      "TERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRRAY_LENGTH_SMALL]);\012    env->set_exception(env, stack, exce"
      "ption);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012}\012\012static inline void SPVM_IMPL"
      "EMENT_NEW_BYTE_ARRAY(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int32_t length, int32_t* erro"
      "r_id) {\012  if (length >= 0) {\012    SPVM_OBJ* object = env->new_byte_array_no_mortal(env, stack, length"
      ");\012    if (object == NULL) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack,"
      " SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRAY_FAILED]);\012      env->set_except"
      "ion(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    els"
      "e {\012      env->assign_object(env, stack, out, object);\012    }\012  }\012  else {\012    SPVM_OBJ* exception = "
      "env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTIO"
      "N_NEW_ARRRAY_LENGTH_SMALL]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NAT"
      "IVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_NEW_SHORT_ARRAY(SPVM_ENV* "
      "env, SPVM_VALUE* stack, SPVM_OBJ** out, int32_t length, int32_t* error_id) {\012  if (length >= 0) {\012  "
      "  SPVM_OBJ* object = env->new_short_array_no_mortal(env, stack, length);\012    if (object == NULL) {\012 "
      "     SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERAL"
      "S[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRAY_FAILED]);\012      env->set_exception(env, stack, exception);\012  "
      "    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      env->assign_object(e"
      "nv, stack, out, object);\012    }\012  }\012  else {\012    SPVM_OBJ* exception = env->new_string_nolen_no_morta"
      "l(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRRAY_LENGTH_SMALL]);\012 "
      "   env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLAS"
      "S;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_NEW_INT_ARRAY(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ"
      "** out, int32_t length, int32_t* error_id) {\012  if (length >= 0) {\012    SPVM_OBJ* object = env->new_in"
      "t_array_no_mortal(env, stack, length);\012    if (object == NULL) {\012      SPVM_OBJ* exception = env->ne"
      "w_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_A"
      "RRAY_FAILED]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASI"
      "C_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      env->assign_object(env, stack, out, object);\012    }\012  }"
      "\012  else {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRIN"
      "G_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRRAY_LENGTH_SMALL]);\012    env->set_exception(env, stack, "
      "exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012}\012\012static inline void SPVM_"
      "IMPLEMENT_NEW_LONG_ARRAY(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int32_t length, int32_t* "
      "error_id) {\012  if (length >= 0) {\012    SPVM_OBJ* object = env->new_long_array_no_mortal(env, stack, le"
      "ngth);\012    if (object == NULL) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, st"
      "ack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRAY_FAILED]);\012      env->set_ex"
      "ception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012   "
      " else {\012      env->assign_object(env, stack, out, object);\012    }\012  }\012  else {\012    SPVM_OBJ* exceptio"
      "n = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCE"
      "PTION_NEW_ARRRAY_LENGTH_SMALL]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM"
      "_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_NEW_FLOAT_ARRAY(SPVM_E"
      "NV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int32_t length, int32_t* error_id) {\012  if (length >= 0) "
      "{\012    SPVM_OBJ* object = env->new_float_array_no_mortal(env, stack, length);\012    if (object == NULL)"
      " {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LIT"
      "ERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRAY_FAILED]);\012      env->set_exception(env, stack, exception)"
      ";\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      env->assign_obje"
      "ct(env, stack, out, object);\012    }\012  }\012  else {\012    SPVM_OBJ* exception = env->new_string_nolen_no_m"
      "ortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRRAY_LENGTH_SMALL]"
      ");\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_"
      "CLASS;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_NEW_DOUBLE_ARRAY(SPVM_ENV* env, SPVM_VALUE* stack, S"
      "PVM_OBJ** out, int32_t length, int32_t* error_id) {\012  if (length >= 0) {\012    SPVM_OBJ* object = env-"
      ">new_double_array_no_mortal(env, stack, length);\012    if (object == NULL) {\012      SPVM_OBJ* exception"
      " = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEP"
      "TION_NEW_ARRAY_FAILED]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NAT"
      "IVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      env->assign_object(env, stack, out, object);"
      "\012    }\012  }\012  else {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLE"
      "MENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRRAY_LENGTH_SMALL]);\012    env->set_exception(en"
      "v, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012}\012\012static inline "
      "void SPVM_IMPLEMENT_NEW_STRING(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, const char* constan"
      "t_string, int32_t constant_string_length, int32_t* error_id) {\012  SPVM_OBJ* string = env->new_string_"
      "no_mortal(env, stack, constant_string, constant_string_length);\012  if (string == NULL) {\012    SPVM_OBJ"
      "* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEM"
      "ENT_C_EXCEPTION_NEW_STRING_FAILED]);\012    env->set_exception(env, stack, exception);\012    *error_id = "
      "SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    env->make_read_only(env, stack, string);\012 "
      "   env->assign_object(env, stack, out , string);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_NEW_STRING"
      "_LEN(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int32_t length, int32_t* error_id) {\012  if (le"
      "ngth >= 0) {\012    SPVM_OBJ* string = env->new_string_no_mortal(env, stack, NULL, length);\012    if (str"
      "ing == NULL) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMEN"
      "T_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_STRING_LEN_FAILED]);\012      env->set_exception(env, "
      "stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012     "
      " env->assign_object(env, stack, out, string);\012    }\012  }\012  else {\012    SPVM_OBJ* exception = env->new_"
      "string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_STR"
      "ING_LEN_LENGTH_SMALL]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C"
      "_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012}\012\012#define SPVM_IMPLEMENT_IS_READ_ONLY(env, stack, out, in) (out = e"
      "nv->is_read_only(env, stack, in))\012\012#define SPVM_IMPLEMENT_IS_FIXED_LENGTH(env, stack, out, in) (out "
      "= env->is_fixed_length(env, stack, in))\012\012#define SPVM_IMPLEMENT_IS_OPTIONS(env, stack, out, in) (out"
      " = env->is_options(env, stack, in))\012\012#define SPVM_IMPLEMENT_MAKE_READ_ONLY(env, stack, in) (env->mak"
      "e_read_only(env, stack, in))\012\012#define SPVM_IMPLEMENT_MAKE_FIXED_LENGTH(env, stack, in) (env->make_fi"
      "xed_length(env, stack, in))\012\012#define SPVM_IMPLEMENT_ENABLE_OPTIONS(env, stack, in) (env->enable_opti"
      "ons(env, stack, in))\012\012#define SPVM_IMPLEMENT_DISABLE_OPTIONS(env, stack, in) (env->disable_options(e"
      "nv, stack, in))\012\012static inline void SPVM_IMPLEMENT_GET_ARRAY_ELEMENT_BYTE(SPVM_ENV* env, SPVM_VALUE*"
      " stack, int8_t* out, SPVM_OBJ* array, int32_t index, int32_t* error_id) {\012  \012  if (__builtin_expect("
      "array == NULL, 0)) { \012    env->set_exception(env, stack, env->new_string_nolen_no_mortal(env, stack,"
      " SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]));\012    *error_id = SPVM_"
      "NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      ind"
      "ex += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH"
      "(env, stack, array), 0)) { \012      env->set_exception(env, stack, env->new_string_nolen_no_mortal(env"
      ", stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE"
      "]));\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else { \012      *out = ((int"
      "8_t*)GET_DATA_ADDRESS(env, stack, array))[index];\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET"
      "_ARRAY_ELEMENT_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int16_t* out, SPVM_OBJ* array, int32_t index,"
      " int32_t* error_id) {\012  \012  if (__builtin_expect(array == NULL, 0)) { \012    env->set_exception(env, st"
      "ack, env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXC"
      "EPTION_ARRAY_UNDEFINED]));\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else { \012  "
      "  if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if ("
      "__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) { \012      env->set_exceptio"
      "n(env, stack, env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEM"
      "ENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]));\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_"
      "ERROR_CLASS;\012    }\012    else { \012      *out = ((int16_t*)GET_DATA_ADDRESS(env, stack, array))[index];\012"
      "    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_ARRAY_ELEMENT_INT(SPVM_ENV* env, SPVM_VALUE* stac"
      "k, int32_t* out, SPVM_OBJ* array, int32_t index, int32_t* error_id) {\012  \012  if (__builtin_expect(arra"
      "y == NULL, 0)) { \012    env->set_exception(env, stack, env->new_string_nolen_no_mortal(env, stack, SPV"
      "M_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]));\012    *error_id = SPVM_NATI"
      "VE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else { \012    if (__builtin_expect(index < 0, 0)) {\012      index "
      "+= GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(en"
      "v, stack, array), 0)) { \012      env->set_exception(env, stack, env->new_string_nolen_no_mortal(env, s"
      "tack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]))"
      ";\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else { \012      *out = ((int32_"
      "t*)GET_DATA_ADDRESS(env, stack, array))[index];\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_A"
      "RRAY_ELEMENT_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* out, SPVM_OBJ* array, int32_t index, in"
      "t32_t* error_id) {\012  \012  if (__builtin_expect(array == NULL, 0)) { \012    env->set_exception(env, stack"
      ", env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPT"
      "ION_ARRAY_UNDEFINED]));\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else { \012    i"
      "f (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__b"
      "uiltin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) { \012      env->set_exception(e"
      "nv, stack, env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT"
      "_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]));\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERR"
      "OR_CLASS;\012    }\012    else { \012      *out = ((int64_t*)GET_DATA_ADDRESS(env, stack, array))[index];\012   "
      " }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_ARRAY_ELEMENT_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack"
      ", float* out, SPVM_OBJ* array, int32_t index, int32_t* error_id) {\012  \012  if (__builtin_expect(array ="
      "= NULL, 0)) { \012    env->set_exception(env, stack, env->new_string_nolen_no_mortal(env, stack, SPVM_I"
      "MPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]));\012    *error_id = SPVM_NATIVE_"
      "C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else { \012    if (__builtin_expect(index < 0, 0)) {\012      index += "
      "GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, "
      "stack, array), 0)) { \012      env->set_exception(env, stack, env->new_string_nolen_no_mortal(env, stac"
      "k, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]));\012 "
      "     *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else { \012      *out = ((float*)GE"
      "T_DATA_ADDRESS(env, stack, array))[index];\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_ARRAY_"
      "ELEMENT_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, double* out, SPVM_OBJ* array, int32_t index, int32_"
      "t* error_id) {\012  \012  if (__builtin_expect(array == NULL, 0)) { \012    env->set_exception(env, stack, en"
      "v->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_"
      "ARRAY_UNDEFINED]));\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else { \012    if (_"
      "_builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__built"
      "in_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) { \012      env->set_exception(env, "
      "stack, env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_E"
      "XCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]));\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_C"
      "LASS;\012    }\012    else { \012      *out = ((double*)GET_DATA_ADDRESS(env, stack, array))[index];\012    }\012  "
      "}\012}\012\012static inline void SPVM_IMPLEMENT_GET_ARRAY_ELEMENT_OBJECT(SPVM_ENV* env, SPVM_VALUE* stack, SP"
      "VM_OBJ** out, SPVM_OBJ* array, int32_t index, int32_t* error_id) {\012  \012  if (__builtin_expect(array ="
      "= NULL, 0)) { \012    env->set_exception(env, stack, env->new_string_nolen_no_mortal(env, stack, SPVM_I"
      "MPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]));\012    *error_id = SPVM_NATIVE_"
      "C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else { \012    if (__builtin_expect(index < 0, 0)) {\012      index += "
      "GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, "
      "stack, array), 0)) { \012      env->set_exception(env, stack, env->new_string_nolen_no_mortal(env, stac"
      "k, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]));\012 "
      "     *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else { \012      env->assign_object"
      "(env, stack, out, ((SPVM_OBJ**)GET_DATA_ADDRESS(env, stack, array))[index]);\012    }\012  }\012}\012\012static inl"
      "ine void SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, in"
      "t32_t index, int8_t in, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* exce"
      "ption = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_"
      "EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NAT"
      "IVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index "
      "+= GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(en"
      "v, stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM"
      "_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env"
      "->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012 "
      "   }\012    else {\012      ((int8_t*)GET_DATA_ADDRESS(env, stack, array))[index] = in;\012    }\012  }\012}\012\012stati"
      "c inline void SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* arr"
      "ay, int32_t index, int16_t in, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OB"
      "J* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLE"
      "MENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = S"
      "PVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012     "
      " index += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LE"
      "NGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stac"
      "k, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012  "
      "    env->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_C"
      "LASS;\012    }\012    else {\012      ((int16_t*)GET_DATA_ADDRESS(env, stack, array))[index] = in;\012    }\012  }\012"
      "}\012\012static inline void SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_INT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OB"
      "J* array, int32_t index, int32_t in, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012    S"
      "PVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM"
      "_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_"
      "id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {"
      "\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= "
      "GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env"
      ", stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE"
      "]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_E"
      "RROR_CLASS;\012    }\012    else {\012      ((int32_t*)GET_DATA_ADDRESS(env, stack, array))[index] = in;\012    "
      "}\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_LONG(SPVM_ENV* env, SPVM_VALUE* stack, "
      "SPVM_OBJ* array, int32_t index, int64_t in, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)) "
      "{\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERA"
      "LS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    "
      "*error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0"
      ", 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || in"
      "dex >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mor"
      "tal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_O"
      "F_RANGE]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TY"
      "PE_ID_ERROR_CLASS;\012    }\012    else {\012      ((int64_t*)GET_DATA_ADDRESS(env, stack, array))[index] = i"
      "n;\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_FLOAT(SPVM_ENV* env, SPVM_VALUE*"
      " stack, SPVM_OBJ* array, int32_t index, float in, int32_t* error_id) {\012  if (__builtin_expect(!array"
      ", 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_"
      "LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception)"
      ";\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(ind"
      "ex < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0"
      " || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_"
      "no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX"
      "_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BA"
      "SIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      ((float*)GET_DATA_ADDRESS(env, stack, array))[index]"
      " = in;\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_DOUBLE(SPVM_ENV* env, SPVM_V"
      "ALUE* stack, SPVM_OBJ* array, int32_t index, double in, int32_t* error_id) {\012  if (__builtin_expect("
      "!array, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_S"
      "TRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exce"
      "ption);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expe"
      "ct(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(ind"
      "ex < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_"
      "nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS"
      "_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIV"
      "E_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      ((double*)GET_DATA_ADDRESS(env, stack, array))"
      "[index] = in;\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_OBJECT(SPVM_ENV* env,"
      " SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, SPVM_OBJ* in, int32_t* error_id) {\012  if (__built"
      "in_expect(!array, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_I"
      "MPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, s"
      "tack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__bu"
      "iltin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_"
      "expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = env->n"
      "ew_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEM"
      "ENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012      *error_id = "
      "SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      SPVM_OBJ** element_address = &((SPVM"
      "_OBJ**)GET_DATA_ADDRESS(env, stack, array))[index];\012      env->assign_object(env, stack, element_add"
      "ress, in);\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_OBJECT_CHECK_TYPE(SPVM_E"
      "NV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, SPVM_OBJ* in, int32_t* error_id) {\012  if "
      "(__builtin_expect(!array, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack"
      ", SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exceptio"
      "n(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    "
      "if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__"
      "builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception "
      "= env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPT"
      "ION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012      *err"
      "or_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      SPVM_OBJ** element_address ="
      " &((SPVM_OBJ**)GET_DATA_ADDRESS(env, stack, array))[index];\012      SPVM_OBJ* object = in;\012      int32"
      "_t elem_isa = env->elem_isa(env, stack, array, object);\012      if (elem_isa) {\012        env->assign_ob"
      "ject(env, stack, element_address, object);\012      }\012      else {\012        int32_t scope_id = env->ente"
      "r_scope(env, stack);\012        \012        SPVM_OBJ* obj_src_type_name = env->get_type_name(env, stack, o"
      "bject);\012        const char* src_type_name = env->get_chars(env, stack, obj_src_type_name);\012        S"
      "PVM_NATIVE_BASIC_TYPE* dist_basic_type = env->get_object_basic_type(env, stack, array);\012        cons"
      "t char* dist_basic_type_name = env->api->basic_type->get_name(env->runtime, dist_basic_type);\012      "
      "  int32_t dist_type_dimension = env->get_object_type_dimension(env, stack, array) - 1;\012        SPVM_"
      "OBJ* obj_dist_type_name = env->get_compile_type_name(env, stack, dist_basic_type_name, dist_type_dim"
      "ension, 0);\012        const char* dist_type_name = env->get_chars(env, stack, obj_dist_type_name);\012   "
      "     \012        char* tmp_buffer = env->api->internal->get_stack_tmp_buffer(env, stack);\012        \012    "
      "    SPVM_VALUE args[2];\012        args[0].address = (void*)src_type_name;\012        args[1].address = (v"
      "oid*)dist_type_name;\012        int32_t string_length = env->api->internal->c_snprintf_len(env, stack, "
      "tmp_buffer, SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXC"
      "EPTION_ELEMENT_ASSIGN_NOT_SATISFY_ASSIGNMENT_REQUIREMENT], args, 2);\012        \012        SPVM_OBJ* exce"
      "ption = env->new_string_no_mortal(env, stack, tmp_buffer, string_length);\012        env->set_exception"
      "(env, stack, exception);\012        *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012        \012     "
      "   env->leave_scope(env, stack, scope_id);\012      }\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SE"
      "T_ARRAY_ELEMENT_UNDEF(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int32_t* err"
      "or_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mor"
      "tal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env"
      "->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }"
      "\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012  "
      "  }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_O"
      "BJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPL"
      "EMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exceptio"
      "n);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      SPVM_OBJ** obj"
      "ect_address = &((SPVM_OBJ**)GET_DATA_ADDRESS(env, stack, array))[index];\012      env->assign_object(en"
      "v, stack, object_address, NULL);\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_CALLER(SPVM_ENV* env"
      ", SPVM_VALUE* stack, SPVM_OBJ** out, int32_t level, int32_t* error_id) {\012  \012  *out = env->caller(env"
      ", stack, level, error_id);\012  if (*error_id) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mor"
      "tal(env, stack, env->get_chars(env, stack, env->get_exception(env, stack)));\012    env->set_exception("
      "env, stack, exception);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_ARRAY_LENGTH(SPVM_ENV* env, SPVM_VA"
      "LUE* stack, int32_t* out, SPVM_OBJ* array, int32_t* error_id) {\012  if (array == NULL) {\012    SPVM_OBJ*"
      " exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEME"
      "NT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPV"
      "M_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = GET_LENGTH(env, stack, array);\012  }\012}\012\012"
      "static inline void SPVM_IMPLEMENT_STRING_LENGTH(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, SPVM"
      "_OBJ* string) {\012  if (string == NULL) {\012    *out = 0;\012  }\012  else {\012    *out = GET_LENGTH(env, stack,"
      " string);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_CAPACITY(SPVM_ENV* env, SPVM_VALUE* stack, int32_"
      "t* out, SPVM_OBJ* object, int32_t* error_id) {\012  if (object == NULL) {\012    SPVM_OBJ* exception = env"
      "->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_A"
      "RRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC"
      "_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = GET_CAPACITY(env, stack, object);\012  }\012}\012\012static inline"
      " void SPVM_IMPLEMENT_SET_LENGTH(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t length, "
      "int32_t* error_id) {\012  if (object == NULL) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mort"
      "al(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env-"
      ">set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012"
      "  else {\012    *error_id = env->set_length(env, stack, object, length);\012  }\012}\012\012static inline void SPVM"
      "_IMPLEMENT_SET_CAPACITY(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t capacity, int32_"
      "t* error_id) {\012  if (object == NULL) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env"
      ", stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_e"
      "xception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else"
      " {\012    *error_id = env->set_capacity(env, stack, object, capacity);\012  }\012}\012\012static inline void SPVM_I"
      "MPLEMENT_GET_FIELD_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, int8_t* out, SPVM_OBJ* object, int32_t fie"
      "ld_offset, int32_t* error_id) {\012  \012  if (__builtin_expect(object == NULL, 0)) {\012    SPVM_OBJ* except"
      "ion = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EX"
      "CEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error"
      "_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *(int8_t*)(GET_DATA_ADDRESS(e"
      "nv, stack, object) + field_offset);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_FIELD_SHORT(SPVM_EN"
      "V* env, SPVM_VALUE* stack, int16_t* out, SPVM_OBJ* object, int32_t field_offset, int32_t* error_id) "
      "{\012  \012  if (__builtin_expect(object == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no"
      "_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_"
      "UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE"
      "_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *(int16_t*)(GET_DATA_ADDRESS(env, stack, object) + field_of"
      "fset);\012  }\012}\012\012\012static inline void SPVM_IMPLEMENT_GET_FIELD_INT(SPVM_ENV* env, SPVM_VALUE* stack, int"
      "32_t* out, SPVM_OBJ* object, int32_t field_offset, int32_t* error_id) {\012  \012  if (__builtin_expect(ob"
      "ject == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLE"
      "MENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_exce"
      "ption(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012"
      "    *out = *(int32_t*)(GET_DATA_ADDRESS(env, stack, object) + field_offset);\012  }\012}\012\012\012static inline v"
      "oid SPVM_IMPLEMENT_GET_FIELD_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* out, SPVM_OBJ* object, "
      "int32_t field_offset, int32_t* error_id) {\012  \012  if (__builtin_expect(object == NULL, 0)) {\012    SPVM_"
      "OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMP"
      "LEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_exception(env, stack, exception);"
      "\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *(int64_t*)(GET_DA"
      "TA_ADDRESS(env, stack, object) + field_offset);\012  }\012}\012\012\012static inline void SPVM_IMPLEMENT_GET_FIELD_"
      "FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, float* out, SPVM_OBJ* object, int32_t field_offset, int32_t*"
      " error_id) {\012  \012  if (__builtin_expect(object == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_stri"
      "ng_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCES"
      "S_INVOCANT_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C"
      "_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *(float*)(GET_DATA_ADDRESS(env, stack, object) +"
      " field_offset);\012  }\012}\012\012\012static inline void SPVM_IMPLEMENT_GET_FIELD_DOUBLE(SPVM_ENV* env, SPVM_VALUE"
      "* stack, double* out, SPVM_OBJ* object, int32_t field_offset, int32_t* error_id) {\012  \012  if (__builti"
      "n_expect(object == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack,"
      " SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    en"
      "v->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  "
      "}\012  else {\012    *out = *(double*)(GET_DATA_ADDRESS(env, stack, object) + field_offset);\012  }\012}\012\012static"
      " inline void SPVM_IMPLEMENT_GET_FIELD_OBJECT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_"
      "OBJ* object, int32_t field_offset, int32_t* error_id) {  \012  if (__builtin_expect(object == NULL, 0))"
      " {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITER"
      "ALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_exception(env, stack,"
      " exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    SPVM_OBJ** re"
      "f = (SPVM_OBJ**)(GET_DATA_ADDRESS(env, stack, object) + field_offset);\012    SPVM_OBJ* field_object = "
      "SPVM_IMPLEMENT_DROP_TAG_POINTERS(*ref);\012    env->assign_object(env, stack, out, field_object);\012  }\012}"
      "\012\012static inline void SPVM_IMPLEMENT_SET_FIELD_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* objec"
      "t, int32_t field_offset, int8_t in, int32_t* error_id, int32_t exists_offset, int32_t exists_bit) {\012"
      "  \012  if (__builtin_expect(object == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_m"
      "ortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UN"
      "DEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_I"
      "D_ERROR_CLASS;\012  }\012  else {\012    *(int8_t*)(GET_DATA_ADDRESS(env, stack, object) + field_offset) = in"
      ";\012    SPVM_IMPLEMENT_ENABLE_EXISTS_FLAG(env, stack, object, exists_offset, exists_bit);\012  }\012}\012\012stati"
      "c inline void SPVM_IMPLEMENT_SET_FIELD_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int"
      "32_t field_offset, int16_t in, int32_t* error_id, int32_t exists_offset, int32_t exists_bit) {\012  \012  "
      "if (__builtin_expect(object == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal"
      "(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFIN"
      "ED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERR"
      "OR_CLASS;\012  }\012  else {\012    *(int16_t*)(GET_DATA_ADDRESS(env, stack, object) + field_offset) = in;\012  "
      "  SPVM_IMPLEMENT_ENABLE_EXISTS_FLAG(env, stack, object, exists_offset, exists_bit);\012  }\012}\012\012static in"
      "line void SPVM_IMPLEMENT_SET_FIELD_INT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t f"
      "ield_offset, int32_t in, int32_t* error_id, int32_t exists_offset, int32_t exists_bit) {\012  \012  if (__"
      "builtin_expect(object == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, "
      "stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012"
      "    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLA"
      "SS;\012  }\012  else {\012    *(int32_t*)(GET_DATA_ADDRESS(env, stack, object) + field_offset) = in;\012    SPVM"
      "_IMPLEMENT_ENABLE_EXISTS_FLAG(env, stack, object, exists_offset, exists_bit);\012  }\012}\012\012static inline v"
      "oid SPVM_IMPLEMENT_SET_FIELD_LONG(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t field_"
      "offset, int64_t in, int32_t* error_id, int32_t exists_offset, int32_t exists_bit) {\012  \012  if (__built"
      "in_expect(object == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack"
      ", SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    e"
      "nv->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012 "
      " }\012  else {\012    *(int64_t*)(GET_DATA_ADDRESS(env, stack, object) + field_offset) = in;\012    SPVM_IMPL"
      "EMENT_ENABLE_EXISTS_FLAG(env, stack, object, exists_offset, exists_bit);\012  }\012}\012\012static inline void S"
      "PVM_IMPLEMENT_SET_FIELD_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t field_offs"
      "et, float in, int32_t* error_id, int32_t exists_offset, int32_t exists_bit) {\012  \012  if (__builtin_exp"
      "ect(object == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM"
      "_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->se"
      "t_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  e"
      "lse {\012    *(float*)(GET_DATA_ADDRESS(env, stack, object) + field_offset) = in;\012    SPVM_IMPLEMENT_EN"
      "ABLE_EXISTS_FLAG(env, stack, object, exists_offset, exists_bit);\012  }\012}\012\012static inline void SPVM_IMPL"
      "EMENT_SET_FIELD_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t field_offset, dou"
      "ble in, int32_t* error_id, int32_t exists_offset, int32_t exists_bit) {\012  if (__builtin_expect(objec"
      "t == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMEN"
      "T_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_excepti"
      "on(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012   "
      " *(double*)(GET_DATA_ADDRESS(env, stack, object) + field_offset) = in;\012    SPVM_IMPLEMENT_ENABLE_EXI"
      "STS_FLAG(env, stack, object, exists_offset, exists_bit);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SE"
      "T_FIELD_OBJECT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t field_offset, SPVM_OBJ* i"
      "n, int32_t* error_id, int32_t exists_offset, int32_t exists_bit) {\012  if (__builtin_expect(object == "
      "NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STR"
      "ING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_exception(en"
      "v, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    SPVM"
      "_OBJ** ref = (SPVM_OBJ**)(GET_DATA_ADDRESS(env, stack, object) + field_offset);\012    env->assign_obje"
      "ct(env, stack, ref, in);\012    SPVM_IMPLEMENT_ENABLE_EXISTS_FLAG(env, stack, object, exists_offset, ex"
      "ists_bit);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_FIELD_UNDEF(SPVM_ENV* env, SPVM_VALUE* stack"
      ", SPVM_OBJ* object, int32_t field_offset, int32_t* error_id, int32_t exists_offset, int32_t exists_b"
      "it) {\012  if (__builtin_expect(object == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_n"
      "o_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT"
      "_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYP"
      "E_ID_ERROR_CLASS;\012  }\012  else {\012    SPVM_OBJ** ref = (SPVM_OBJ**)(GET_DATA_ADDRESS(env, stack, object"
      ") + field_offset);\012    env->assign_object(env, stack, ref, NULL);\012    SPVM_IMPLEMENT_ENABLE_EXISTS_F"
      "LAG(env, stack, object, exists_offset, exists_bit);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_WEAKEN_"
      "FIELD(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t field_offset, int32_t* error_id) {"
      "\012  if (object == NULL) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_"
      "IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set"
      "_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  el"
      "se {\012    SPVM_OBJ** ref = (SPVM_OBJ**)(GET_DATA_ADDRESS(env, stack, object) + field_offset);\012    int"
      "32_t status = env->weaken(env, stack, (SPVM_OBJ**)ref);\012    if (status != 0) {\012      SPVM_OBJ* excep"
      "tion = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_E"
      "XCEPTION_WEAKEN_BACK_REFERENCE_ALLOCATION_FAILED]);\012      env->set_exception(env, stack, exception);"
      "\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012  }\012}\012\012static inline void SPVM_IMP"
      "LEMENT_UNWEAKEN_FIELD(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t field_offset, int3"
      "2_t* error_id) {\012  if (object == NULL) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(e"
      "nv, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED"
      "]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR"
      "_CLASS;\012  }\012  else {\012    SPVM_OBJ** ref = (SPVM_OBJ**)(GET_DATA_ADDRESS(env, stack, object) + field_"
      "offset);\012    env->unweaken(env, stack, (SPVM_OBJ**)ref);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_IS"
      "WEAK_FIELD(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, SPVM_OBJ* object, int32_t field_offset, i"
      "nt32_t* error_id) {\012  if (object == NULL) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_morta"
      "l(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFI"
      "NED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ER"
      "ROR_CLASS;\012  }\012  else {\012    SPVM_OBJ** ref = (SPVM_OBJ**)(GET_DATA_ADDRESS(env, stack, object) + fie"
      "ld_offset);\012    *out = env->isweak(env, stack, (SPVM_OBJ**)ref);\012  }\012}\012\012static inline void SPVM_IMPL"
      "EMENT_EXISTS(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, SPVM_OBJ* object, int32_t field_exists_"
      "offset, int32_t field_exists_bit, int32_t* error_id) {\012  if (object == NULL) {\012    SPVM_OBJ* excepti"
      "on = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXC"
      "EPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_"
      "id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = SPVM_IMPLEMENT_GET_EXISTS_FLAG"
      "(env, stack, object, field_exists_offset, field_exists_bit);\012  }\012}\012\012static inline void SPVM_IMPLEMEN"
      "T_DELETE(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field, int32_t* erro"
      "r_id) {\012  if (object == NULL) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack"
      ", SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    e"
      "nv->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012 "
      " }\012  else {\012    env->delete_field(env, stack, object, field);\012  }\012}\012\012#define SPVM_IMPLEMENT_GET_CLAS"
      "S_VAR_BYTE(env, stack, out, class_var) (out = env->get_class_var_byte(env, stack, class_var))\012#defin"
      "e SPVM_IMPLEMENT_GET_CLASS_VAR_SHORT(env, stack, out, class_var) (out = env->get_class_var_short(env"
      ", stack, class_var))\012#define SPVM_IMPLEMENT_GET_CLASS_VAR_INT(env, stack, out, class_var) (out = env"
      "->get_class_var_int(env, stack, class_var))\012#define SPVM_IMPLEMENT_GET_CLASS_VAR_LONG(env, stack, ou"
      "t, class_var) (out = env->get_class_var_long(env, stack, class_var))\012#define SPVM_IMPLEMENT_GET_CLAS"
      "S_VAR_FLOAT(env, stack, out, class_var) (out = env->get_class_var_float(env, stack, class_var))\012#def"
      "ine SPVM_IMPLEMENT_GET_CLASS_VAR_DOUBLE(env, stack, out, class_var) (out = env->get_class_var_double"
      "(env, stack, class_var))\012#define SPVM_IMPLEMENT_GET_CLASS_VAR_OBJECT(env, stack, out, class_var) (en"
      "v->assign_object(env, stack, out, env->get_class_var_object(env, stack, class_var)))\012\012#define SPVM_I"
      "MPLEMENT_SET_CLASS_VAR_BYTE(env, stack, class_var, in) (env->set_class_var_byte(env, stack, class_va"
      "r, in))\012#define SPVM_IMPLEMENT_SET_CLASS_VAR_SHORT(env, stack, class_var, in) (env->set_class_var_sh"
      "ort(env, stack, class_var, in))\012#define SPVM_IMPLEMENT_SET_CLASS_VAR_INT(env, stack, class_var, in) "
      "(env->set_class_var_int(env, stack, class_var, in))\012#define SPVM_IMPLEMENT_SET_CLASS_VAR_LONG(env, s"
      "tack, class_var, in) (env->set_class_var_long(env, stack, class_var, in))\012#define SPVM_IMPLEMENT_SET"
      "_CLASS_VAR_FLOAT(env, stack, class_var, in) (env->set_class_var_float(env, stack, class_var, in))\012#d"
      "efine SPVM_IMPLEMENT_SET_CLASS_VAR_DOUBLE(env, stack, class_var, in) (env->set_class_var_double(env,"
      " stack, class_var, in))\012#define SPVM_IMPLEMENT_SET_CLASS_VAR_OBJECT(env, stack, class_var, in) (env-"
      ">assign_object(env, stack, env->get_class_var_object_ref(env, stack, class_var), in))\012#define SPVM_I"
      "MPLEMENT_SET_CLASS_VAR_UNDEF(env, stack, class_var) (env->assign_object(env, stack, env->get_class_v"
      "ar_object_ref(env, stack, class_var), NULL))\012\012#define SPVM_IMPLEMENT_GET_EXCEPTION_VAR(env, stack, o"
      "ut) (env->assign_object(env, stack, out, env->get_exception(env, stack)))\012#define SPVM_IMPLEMENT_SET"
      "_EXCEPTION_VAR(env, stack, in) (env->set_exception(env, stack, in))\012#define SPVM_IMPLEMENT_SET_EXCEP"
      "TION_VAR_UNDEF(env, stack) (env->set_exception(env, stack, NULL))\012\012static inline void SPVM_IMPLEMENT"
      "_ISA(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, SPVM_OBJ* object, SPVM_NATIVE_BASIC_TYPE* dist_"
      "basic_type, int32_t dist_type_dimension) {\012  if (object) {\012    *out = env->isa(env, stack, object, d"
      "ist_basic_type, dist_type_dimension);\012  }\012  else {\012    *out = 0;\012  }\012}\012\012static inline void SPVM_IMPL"
      "EMENT_ISA_ERROR(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, SPVM_NATIVE_BASIC_TYPE* src_basic_ty"
      "pe, SPVM_NATIVE_BASIC_TYPE* dist_basic_type, int32_t dist_type_dimension) {\012  *out = env->api->type-"
      ">can_assign(env->runtime, dist_basic_type, dist_type_dimension, 0, src_basic_type, 0, 0);\012}\012\012static "
      "inline void SPVM_IMPLEMENT_IS_TYPE(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, SPVM_OBJ* object,"
      " SPVM_NATIVE_BASIC_TYPE* dist_basic_type, int32_t dist_type_dimension) {\012  if (object) {\012    *out = "
      "env->is_type(env, stack, object, dist_basic_type, dist_type_dimension);\012  }\012  else {\012    *out = 0;\012 "
      " }\012}\012\012static inline void SPVM_IMPLEMENT_IS_ERROR(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, SPV"
      "M_NATIVE_BASIC_TYPE* src_basic_type, SPVM_NATIVE_BASIC_TYPE* dist_basic_type, int32_t dist_type_dime"
      "nsion) {\012  *out = (dist_basic_type == src_basic_type && dist_type_dimension == 0);\012}\012\012#define SPVM_I"
      "MPLEMENT_CAN(env, stack, out, object, method_name) (out = (env->get_instance_method(env, stack, obje"
      "ct, method_name) != NULL))\012\012static inline void SPVM_IMPLEMENT_PRINT(SPVM_ENV* env, SPVM_VALUE* stack"
      ", SPVM_OBJ* string, int32_t is_stderr) {\012  if (is_stderr) {\012    env->print_stderr(env, stack, string"
      ");\012  }\012  else {\012    env->print(env, stack, string);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SAY(SPV"
      "M_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* string, int32_t is_stderr) {\012  if (is_stderr) {\012    env->sa"
      "y_stderr(env, stack, string);\012  }\012  else {\012    env->say(env, stack, string);\012  }\012}\012\012static inline vo"
      "id SPVM_IMPLEMENT_WARN(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* string, const char* func_name, co"
      "nst char* file, int32_t line) {\012  env->warn(env, stack, string, func_name, file, line);\012}\012\012#define S"
      "PVM_IMPLEMENT_CLEAR_EVAL_ERROR_ID(eval_error_id) (eval_error_id = 0)\012#define SPVM_IMPLEMENT_GET_EVAL"
      "_ERROR_ID(out, eval_error_id) (out = eval_error_id)\012#define SPVM_IMPLEMENT_SET_ERROR_ID(error_id, di"
      "e_error_id) (error_id = die_error_id)\012#define SPVM_IMPLEMENT_SET_EVAL_ERROR_ID(eval_error_id, die_er"
      "ror_id) (eval_error_id = die_error_id)\012#define SPVM_IMPLEMENT_ARGS_WIDTH(env, stack, out) (out = env"
      "->args_width(env, stack))\012#define SPVM_IMPLEMENT_GET_BASIC_TYPE_ID(env, stack, out, basic_type_arg) "
      "((out) = (env)->api->basic_type->get_id((env)->runtime, (basic_type_arg)))\012\012static inline void SPVM_"
      "IMPLEMENT_TYPE_NAME(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_OBJ* object) {\012  if (obje"
      "ct == NULL) {\012    *out = NULL;\012  }\012  else {\012    SPVM_OBJ* type_name = env->get_type_name_no_mortal(e"
      "nv, stack, object);\012    env->assign_object(env, stack, out, type_name);\012  }\012}\012\012static inline void SP"
      "VM_IMPLEMENT_DUMP(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_OBJ* object) {\012  SPVM_OBJ* "
      "dump = env->dump_no_mortal(env, stack, object);\012  env->assign_object(env, stack, out, dump);\012}\012\012stat"
      "ic inline void SPVM_IMPLEMENT_COPY(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_OBJ* objec"
      "t, int32_t* error_id) {\012  SPVM_OBJ* object_copy = env->copy_no_mortal(env, stack, object);\012  env->as"
      "sign_object(env, stack, out, object_copy);\012}\012\012static inline void SPVM_IMPLEMENT_GET_ADDRESS(SPVM_ENV"
      "* env, SPVM_VALUE* stack, SPVM_OBJ** out, void* address) {\012  char* tmp_buffer = env->api->internal->"
      "get_stack_tmp_buffer(env, stack);\012  \012  SPVM_VALUE args[1];\012  args[0].address = address;\012  int32_t st"
      "ring_length = env->api->internal->c_snprintf_len(env, stack, tmp_buffer, SPVM_NATIVE_C_STACK_TMP_BUF"
      "FER_SIZE, \"%p\", args, 1);\012  \012  SPVM_OBJ* object_address = env->new_string_no_mortal(env, stack, tmp_"
      "buffer, string_length);\012  env->assign_object(env, stack, out, object_address);\012}\012\012#define SPVM_IMPLE"
      "MENT_REF_BYTE(out, in) (out = (void*)(in))\012#define SPVM_IMPLEMENT_REF_SHORT(out, in) (out = (void*)("
      "in))\012#define SPVM_IMPLEMENT_REF_INT(out, in) (out = (void*)(in))\012#define SPVM_IMPLEMENT_REF_LONG(out"
      ", in) (out = (void*)(in))\012#define SPVM_IMPLEMENT_REF_FLOAT(out, in) (out = (void*)(in))\012#define SPVM"
      "_IMPLEMENT_REF_DOUBLE(out, in) (out = (void*)(in))\012\012static inline void SPVM_IMPLEMENT_GET_DEREF_BYTE"
      "(SPVM_ENV* env, SPVM_VALUE* stack, int8_t* out, int8_t** in, int32_t* error_id) {\012  \012  if (__builtin"
      "_expect(*in == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPV"
      "M_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, "
      "stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = "
      "*(int8_t*)*(int8_t**)in;\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_GET_DEREF_SHORT(SPVM_ENV* env, "
      "SPVM_VALUE* stack, int16_t* out, int16_t** in, int32_t* error_id) {\012  \012  if (__builtin_expect(*in =="
      " NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_ST"
      "RING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, excepti"
      "on);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *(int16_t*)*(i"
      "nt16_t**)in;\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_GET_DEREF_INT(SPVM_ENV* env, SPVM_VALUE* st"
      "ack, int32_t* out, int32_t** in, int32_t* error_id) {\012  \012  if (__builtin_expect(*in == NULL, 0)) {\012 "
      "   SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS["
      "SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *erro"
      "r_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *(int32_t*)*(int32_t**)in;\012 "
      " }\012  \012}\012\012static inline void SPVM_IMPLEMENT_GET_DEREF_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t*"
      " out, int64_t** in, int32_t* error_id) {\012  \012  if (__builtin_expect(*in == NULL, 0)) {\012    SPVM_OBJ* "
      "exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMEN"
      "T_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_N"
      "ATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *(int64_t*)*(int64_t**)in;\012  }\012  \012}\012\012stat"
      "ic inline void SPVM_IMPLEMENT_GET_DEREF_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, float* out, float** "
      "in, int32_t* error_id) {\012  \012  if (__builtin_expect(*in == NULL, 0)) {\012    SPVM_OBJ* exception = env-"
      ">new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_RE"
      "F_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TY"
      "PE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *(float*)*(float**)in;\012  }\012  \012}\012\012static inline void SPVM_"
      "IMPLEMENT_GET_DEREF_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, double* out, double** in, int32_t* erro"
      "r_id) {\012  \012  if (__builtin_expect(*in == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen"
      "_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012  "
      "  env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS"
      ";\012  }\012  else {\012    *out = *(double*)*(double**)in;\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_SET_D"
      "EREF_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, int8_t** out, int8_t in, int32_t* error_id) {\012  \012  if (_"
      "_builtin_expect(*out == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, s"
      "tack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_except"
      "ion(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012  "
      "  *(int8_t*)*(int8_t**)out = in;\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_SET_DEREF_SHORT(SPVM_EN"
      "V* env, SPVM_VALUE* stack, int16_t** out, int16_t in, int32_t* error_id) {\012  \012  if (__builtin_expect"
      "(*out == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPL"
      "EMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack,"
      " exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *(int16_t*)*("
      "int16_t**)out = in;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_DEREF_INT(SPVM_ENV* env, SPVM_VALUE"
      "* stack, int32_t** out, int32_t in, int32_t* error_id) {\012  \012  if (__builtin_expect(*out == NULL, 0))"
      " {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITER"
      "ALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *"
      "error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *(int32_t*)*(int32_t**)out = in"
      ";\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_SET_DEREF_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64"
      "_t** out, int64_t in, int32_t* error_id) {\012  \012  if (__builtin_expect(*out == NULL, 0)) {\012    SPVM_OB"
      "J* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLE"
      "MENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPV"
      "M_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *(int64_t*)*(int64_t**)out = in;\012  }\012  \012}\012\012st"
      "atic inline void SPVM_IMPLEMENT_SET_DEREF_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, float** out, float"
      " in, int32_t* error_id) {\012  \012  if (__builtin_expect(*out == NULL, 0)) {\012    SPVM_OBJ* exception = en"
      "v->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_"
      "REF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_"
      "TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *(float*)*(float**)out = in;\012  }\012  \012}\012\012static inline void SPVM"
      "_IMPLEMENT_SET_DEREF_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, double** out, double in, int32_t* erro"
      "r_id) {\012  \012  if (__builtin_expect(*out == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nole"
      "n_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012 "
      "   env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLAS"
      "S;\012  }\012  else {\012    *(double*)*(double**)out = in;\012  }\012  \012}\012\012#define SPVM_IMPLEMENT_GET_MULNUM_FIELD"
      "_BYTE(out, in, field_index) (out = *(in + field_index))\012#define SPVM_IMPLEMENT_GET_MULNUM_FIELD_SHOR"
      "T(out, in, field_index) (out = *(in + field_index))\012#define SPVM_IMPLEMENT_GET_MULNUM_FIELD_INT(out,"
      " in, field_index) (out = *(in + field_index))\012#define SPVM_IMPLEMENT_GET_MULNUM_FIELD_LONG(out, in, "
      "field_index) (out = *(in + field_index))\012#define SPVM_IMPLEMENT_GET_MULNUM_FIELD_FLOAT(out, in, fiel"
      "d_index) (out = *(in + field_index))\012#define SPVM_IMPLEMENT_GET_MULNUM_FIELD_DOUBLE(out, in, field_i"
      "ndex) (out = *(in + field_index))\012\012#define SPVM_IMPLEMENT_SET_MULNUM_FIELD_BYTE(out, field_index, in"
      ") (*(out + field_index) = in)\012#define SPVM_IMPLEMENT_SET_MULNUM_FIELD_SHORT(out, field_index, in) (*"
      "(out + field_index) = in)\012#define SPVM_IMPLEMENT_SET_MULNUM_FIELD_INT(out, field_index, in) (*(out +"
      " field_index) = in)\012#define SPVM_IMPLEMENT_SET_MULNUM_FIELD_LONG(out, field_index, in) (*(out + fiel"
      "d_index) = in)\012#define SPVM_IMPLEMENT_SET_MULNUM_FIELD_FLOAT(out, field_index, in) (*(out + field_in"
      "dex) = in)\012#define SPVM_IMPLEMENT_SET_MULNUM_FIELD_DOUBLE(out, field_index, in) (*(out + field_index"
      ") = in)\012\012static inline void SPVM_IMPLEMENT_MOVE_MULNUM_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, int8_t"
      "* out, int8_t* in, int32_t fields_length) {\012  for (int32_t field_index = 0; field_index < fields_len"
      "gth; field_index++) {\012    *(out + field_index) = *(in + field_index);\012  }\012}\012\012static inline void SPVM"
      "_IMPLEMENT_MOVE_MULNUM_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int16_t* out, int16_t* in, int32_t fi"
      "elds_length) {\012  for (int32_t field_index = 0; field_index < fields_length; field_index++) {\012    *(o"
      "ut + field_index) = *(in + field_index);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_MOVE_MULNUM_INT(SP"
      "VM_ENV* env, SPVM_VALUE* stack, int32_t* out, int32_t* in, int32_t fields_length) {\012  for (int32_t f"
      "ield_index = 0; field_index < fields_length; field_index++) {\012    *(out + field_index) = *(in + fiel"
      "d_index);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_MOVE_MULNUM_LONG(SPVM_ENV* env, SPVM_VALUE* stack"
      ", int64_t* out, int64_t* in, int32_t fields_length) {\012  for (int32_t field_index = 0; field_index < "
      "fields_length; field_index++) {\012    *(out + field_index) = *(in + field_index);\012  }\012}\012\012static inline"
      " void SPVM_IMPLEMENT_MOVE_MULNUM_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, float* out, float* in, int3"
      "2_t fields_length) {\012  for (int32_t field_index = 0; field_index < fields_length; field_index++) {\012 "
      "   *(out + field_index) = *(in + field_index);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_MOVE_MULNUM_"
      "DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, double* out, double* in, int32_t fields_length) {\012  for (in"
      "t32_t field_index = 0; field_index < fields_length; field_index++) {\012    *(out + field_index) = *(in"
      " + field_index);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_ARRAY_BYTE(SPVM_ENV* env, SPVM_"
      "VALUE* stack, int8_t* out, SPVM_OBJ* array, int32_t index, int32_t fields_length, int32_t* error_id)"
      " {\012  if (__builtin_expect(array == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mo"
      "rtal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    en"
      "v->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  "
      "}\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012 "
      "   }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_"
      "OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMP"
      "LEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, excepti"
      "on);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      int32_t field"
      "_index;\012      for (field_index = 0; field_index < fields_length; field_index++) {\012        *(out + fi"
      "eld_index) = ((int8_t*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_index];\012  "
      "    }\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_ARRAY_SHORT(SPVM_ENV* env, SPVM_VALU"
      "E* stack, int16_t* out, SPVM_OBJ* array, int32_t index, int32_t fields_length, int32_t* error_id) {\012"
      "  if (__builtin_expect(array == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_morta"
      "l(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->"
      "set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012 "
      " else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    "
      "}\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ"
      "* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEM"
      "ENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception)"
      ";\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      int32_t field_in"
      "dex;\012      for (field_index = 0; field_index < fields_length; field_index++) {\012        *(out + field"
      "_index) = ((int16_t*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_index];\012    "
      "  }\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_ARRAY_INT(SPVM_ENV* env, SPVM_VALUE* s"
      "tack, int32_t* out, SPVM_OBJ* array, int32_t index, int32_t fields_length, int32_t* error_id) {\012  if"
      " (__builtin_expect(array == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(en"
      "v, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_"
      "exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  els"
      "e {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012  "
      "  if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* ex"
      "ception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_"
      "C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012  "
      "    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      int32_t field_index;"
      "\012      for (field_index = 0; field_index < fields_length; field_index++) {\012        *(out + field_ind"
      "ex) = ((int32_t*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_index];\012      }\012"
      "    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_ARRAY_LONG(SPVM_ENV* env, SPVM_VALUE* stac"
      "k, int64_t* out, SPVM_OBJ* array, int32_t index, int32_t fields_length, int32_t* error_id) {\012  if (_"
      "_builtin_expect(array == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, "
      "stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exc"
      "eption(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {"
      "\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    i"
      "f (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* excep"
      "tion = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_E"
      "XCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012     "
      " *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      int32_t field_index;\012  "
      "    for (field_index = 0; field_index < fields_length; field_index++) {\012        *(out + field_index)"
      " = ((int64_t*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_index];\012      }\012   "
      " }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_ARRAY_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack,"
      " float* out, SPVM_OBJ* array, int32_t index, int32_t fields_length, int32_t* error_id) {\012  if (__bui"
      "ltin_expect(array == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stac"
      "k, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_excepti"
      "on(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012   "
      " if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (_"
      "_builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception"
      " = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEP"
      "TION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012      *er"
      "ror_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      int32_t field_index;\012      "
      "for (field_index = 0; field_index < fields_length; field_index++) {\012        *(out + field_index) = ("
      "(float*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_index];\012      }\012    }\012  }"
      "\012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_ARRAY_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, doub"
      "le* out, SPVM_OBJ* array, int32_t index, int32_t fields_length, int32_t* error_id) {\012  if (__builtin"
      "_expect(array == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, S"
      "PVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(e"
      "nv, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if "
      "(__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__bui"
      "ltin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = e"
      "nv->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION"
      "_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012      *error_"
      "id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      int32_t field_index;\012      for "
      "(field_index = 0; field_index < fields_length; field_index++) {\012        *(out + field_index) = ((dou"
      "ble*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_index];\012      }\012    }\012  }\012}\012"
      "\012static inline void SPVM_IMPLEMENT_SET_MULNUM_ARRAY_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ*"
      " array, int32_t index, int32_t fields_length, int8_t* in, int32_t* error_id) {\012  if (__builtin_expec"
      "t(!array, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT"
      "_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, ex"
      "ception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_ex"
      "pect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(i"
      "ndex < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_strin"
      "g_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCE"
      "SS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NAT"
      "IVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      int32_t field_index;\012      for (field_index "
      "= 0; field_index < fields_length; field_index++) {\012        ((int8_t*)GET_DATA_ADDRESS(env, stack, ar"
      "ray))[fields_length * index + field_index] = *(in + field_index);\012      }\012    }\012  }\012}\012\012static inline"
      " void SPVM_IMPLEMENT_SET_MULNUM_ARRAY_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32"
      "_t index, int32_t fields_length, int16_t* in, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)"
      ") {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITE"
      "RALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012  "
      "  *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index <"
      " 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || "
      "index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_m"
      "ortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT"
      "_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_"
      "TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      int32_t field_index;\012      for (field_index = 0; field_i"
      "ndex < fields_length; field_index++) {\012        ((int16_t*)GET_DATA_ADDRESS(env, stack, array))[field"
      "s_length * index + field_index] = *(in + field_index);\012      }\012    }\012  }\012}\012\012static inline void SPVM_"
      "IMPLEMENT_SET_MULNUM_ARRAY_INT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int"
      "32_t fields_length, int32_t* in, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_"
      "OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMP"
      "LEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id ="
      " SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012   "
      "   index += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_"
      "LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, st"
      "ack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012"
      "      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR"
      "_CLASS;\012    }\012    else {\012      int32_t field_index;\012      for (field_index = 0; field_index < fields"
      "_length; field_index++) {\012        ((int32_t*)GET_DATA_ADDRESS(env, stack, array))[fields_length * in"
      "dex + field_index] = *(in + field_index);\012      }\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET"
      "_MULNUM_ARRAY_LONG(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int32_t fields_"
      "length, int64_t* in, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* excepti"
      "on = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXC"
      "EPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE"
      "_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += "
      "GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, "
      "stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IM"
      "PLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->s"
      "et_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    "
      "}\012    else {\012      int32_t field_index;\012      for (field_index = 0; field_index < fields_length; fie"
      "ld_index++) {\012        ((int64_t*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_"
      "index] = *(in + field_index);\012      }\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_ARRA"
      "Y_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int32_t fields_length, flo"
      "at* in, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* exception = env->new"
      "_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_"
      "UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE"
      "_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(en"
      "v, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, array)"
      ", 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRIN"
      "G_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception("
      "env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012"
      "      int32_t field_index;\012      for (field_index = 0; field_index < fields_length; field_index++) {"
      "\012        ((float*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_index] = *(in +"
      " field_index);\012      }\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_ARRAY_DOUBLE(SPVM_E"
      "NV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int32_t fields_length, double* in, int32"
      "_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen"
      "_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012"
      "    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLA"
      "SS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, arr"
      "ay);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012     "
      " SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SP"
      "VM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, e"
      "xception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      int32_t"
      " field_index;\012      for (field_index = 0; field_index < fields_length; field_index++) {\012        ((do"
      "uble*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_index] = *(in + field_index"
      ");\012      }\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_ARRAY_FIELD_BYTE(SPVM_ENV* env,"
      " SPVM_VALUE* stack, int8_t* out, SPVM_OBJ* array, int32_t index, int32_t field_index, int32_t fields"
      "_length, int32_t* error_id) {\012  if (__builtin_expect(array == NULL, 0)) {\012    SPVM_OBJ* exception = "
      "env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTIO"
      "N_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BA"
      "SIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_L"
      "ENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack"
      ", array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEME"
      "NT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_ex"
      "ception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012   "
      " else {\012      *out = ((int8_t*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_in"
      "dex];\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_ARRAY_FIELD_SHORT(SPVM_ENV* env, SPV"
      "M_VALUE* stack, int16_t* out, SPVM_OBJ* array, int32_t index, int32_t field_index, int32_t fields_le"
      "ngth, int32_t* error_id) {\012  if (__builtin_expect(array == NULL, 0)) {\012    SPVM_OBJ* exception = env"
      "->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_A"
      "RRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC"
      "_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENG"
      "TH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, a"
      "rray), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_"
      "STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_excep"
      "tion(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    el"
      "se {\012      *out = ((int16_t*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_inde"
      "x];\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_ARRAY_FIELD_INT(SPVM_ENV* env, SPVM_VA"
      "LUE* stack, int32_t* out, SPVM_OBJ* array, int32_t index, int32_t field_index, int32_t fields_length"
      ", int32_t* error_id) {\012  if (__builtin_expect(array == NULL, 0)) {\012    SPVM_OBJ* exception = env->ne"
      "w_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY"
      "_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYP"
      "E_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(e"
      "nv, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, array"
      "), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRI"
      "NG_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception"
      "(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {"
      "\012      *out = ((int32_t*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_index];\012"
      "    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_ARRAY_FIELD_LONG(SPVM_ENV* env, SPVM_VALUE"
      "* stack, int64_t* out, SPVM_OBJ* array, int32_t index, int32_t field_index, int32_t fields_length, i"
      "nt32_t* error_id) {\012  if (__builtin_expect(array == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_s"
      "tring_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UN"
      "DEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_I"
      "D_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env,"
      " stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), "
      "0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_"
      "LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(en"
      "v, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012  "
      "    *out = ((int64_t*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_index];\012   "
      " }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_ARRAY_FIELD_FLOAT(SPVM_ENV* env, SPVM_VALUE* "
      "stack, float* out, SPVM_OBJ* array, int32_t index, int32_t field_index, int32_t fields_length, int32"
      "_t* error_id) {\012  if (__builtin_expect(array == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_strin"
      "g_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFI"
      "NED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ER"
      "ROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, sta"
      "ck, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) "
      "{\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITE"
      "RALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, s"
      "tack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      "
      "*out = ((float*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_index];\012    }\012  }"
      "\012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_ARRAY_FIELD_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack"
      ", double* out, SPVM_OBJ* array, int32_t index, int32_t field_index, int32_t fields_length, int32_t* "
      "error_id) {\012  if (__builtin_expect(array == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_no"
      "len_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]"
      ");\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_"
      "CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, "
      "array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012  "
      "    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS"
      "[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack"
      ", exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      *out"
      " = ((double*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_index];\012    }\012  }\012}\012"
      "\012static inline void SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FIELD_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, SPV"
      "M_OBJ* array, int32_t index, int32_t field_index, int32_t fields_length, int8_t in, int32_t* error_i"
      "d) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal("
      "env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->se"
      "t_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  e"
      "lse {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012"
      "    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* "
      "exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMEN"
      "T_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012"
      "      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      ((int8_t*)GET_DATA"
      "_ADDRESS(env, stack, array))[fields_length * index + field_index] = in;\012    }\012  }\012}\012\012static inline v"
      "oid SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FIELD_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, i"
      "nt32_t index, int32_t field_index, int32_t fields_length, int16_t in, int32_t* error_id) {\012  if (__b"
      "uiltin_expect(!array, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SP"
      "VM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(en"
      "v, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if ("
      "__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__buil"
      "tin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = en"
      "v->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_"
      "ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012      *error_i"
      "d = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      ((int16_t*)GET_DATA_ADDRESS(env,"
      " stack, array))[fields_length * index + field_index] = in;\012    }\012  }\012}\012\012static inline void SPVM_IMPL"
      "EMENT_SET_MULNUM_ARRAY_FIELD_INT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, i"
      "nt32_t field_index, int32_t fields_length, int32_t in, int32_t* error_id) {\012  if (__builtin_expect(!"
      "array, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_ST"
      "RING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, excep"
      "tion);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expec"
      "t(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(inde"
      "x < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_n"
      "olen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_"
      "INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE"
      "_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      ((int32_t*)GET_DATA_ADDRESS(env, stack, array))"
      "[fields_length * index + field_index] = in;\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNU"
      "M_ARRAY_FIELD_LONG(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int32_t field_i"
      "ndex, int32_t fields_length, int64_t in, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012 "
      "   SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS["
      "SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *er"
      "ror_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0"
      ")) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index"
      " >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal"
      "(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_R"
      "ANGE]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_"
      "ID_ERROR_CLASS;\012    }\012    else {\012      ((int64_t*)GET_DATA_ADDRESS(env, stack, array))[fields_length"
      " * index + field_index] = in;\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FIELD_"
      "FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int32_t field_index, int32_t"
      " fields_length, float in, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* ex"
      "ception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_"
      "C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_N"
      "ATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      inde"
      "x += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH("
      "env, stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SP"
      "VM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      e"
      "nv->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;"
      "\012    }\012    else {\012      ((float*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_"
      "index] = in;\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FIELD_DOUBLE(SPVM_ENV* "
      "env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int32_t field_index, int32_t fields_length, "
      "double in, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* exception = env->"
      "new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARR"
      "AY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_T"
      "YPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH"
      "(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, arr"
      "ay), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_ST"
      "RING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_excepti"
      "on(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else"
      " {\012      ((double*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_index] = in;\012 "
      "   }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_DEREF_MULNUM_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, in"
      "t8_t* out, int8_t* mulnum_ref, int32_t fields_length, int32_t* error_id) {\012  \012  if (__builtin_expect"
      "(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPV"
      "M_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, "
      "stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    for (in"
      "t32_t field_index = 0; field_index < fields_length; field_index++) {\012      *(out + field_index) = *("
      "(int8_t*)mulnum_ref + field_index);\012    }\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_DEREF_MULNUM_S"
      "HORT(SPVM_ENV* env, SPVM_VALUE* stack, int16_t* out, int16_t* mulnum_ref, int32_t fields_length, int"
      "32_t* error_id) {\012  \012  if (__builtin_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = env-"
      ">new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_RE"
      "F_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TY"
      "PE_ID_ERROR_CLASS;\012  }\012  else {\012    for (int32_t field_index = 0; field_index < fields_length; field"
      "_index++) {\012      *(out + field_index) = *((int16_t*)mulnum_ref + field_index);\012    }\012  }\012  \012}\012\012stat"
      "ic inline void SPVM_IMPLEMENT_DEREF_MULNUM_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, int32"
      "_t* mulnum_ref, int32_t fields_length, int32_t* error_id) {\012  \012  if (__builtin_expect(mulnum_ref == "
      "NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STR"
      "ING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, exceptio"
      "n);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    for (int32_t field_ind"
      "ex = 0; field_index < fields_length; field_index++) {\012      *(out + field_index) = *((int32_t*)mulnu"
      "m_ref + field_index);\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_DEREF_MULNUM_LONG(SPVM_ENV* env"
      ", SPVM_VALUE* stack, int64_t* out, int64_t* mulnum_ref, int32_t fields_length, int32_t* error_id) {\012"
      "  \012  if (__builtin_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_"
      "no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012   "
      " env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;"
      "\012  }\012  else {\012    for (int32_t field_index = 0; field_index < fields_length; field_index++) {\012      "
      "*(out + field_index) = *((int64_t*)mulnum_ref + field_index);\012    }\012  }\012  \012}\012\012static inline void SPV"
      "M_IMPLEMENT_DEREF_MULNUM_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, float* out, float* mulnum_ref, int3"
      "2_t fields_length, int32_t* error_id) {\012  \012  if (__builtin_expect(mulnum_ref == NULL, 0)) {\012    SPVM"
      "_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IM"
      "PLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = "
      "SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    for (int32_t field_index = 0; field_index "
      "< fields_length; field_index++) {\012      *(out + field_index) = *((float*)mulnum_ref + field_index);\012"
      "    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_DEREF_MULNUM_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack,"
      " double* out, double* mulnum_ref, int32_t fields_length, int32_t* error_id) {\012  \012  if (__builtin_exp"
      "ect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, "
      "SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(en"
      "v, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    for "
      "(int32_t field_index = 0; field_index < fields_length; field_index++) {\012      *(out + field_index) ="
      " *((double*)mulnum_ref + field_index);\012    }\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_"
      "FIELD_DEREF_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, int8_t* out, int8_t* mulnum_ref, int32_t field_in"
      "dex, int32_t* error_id) {\012  \012  if (__builtin_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exceptio"
      "n = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCE"
      "PTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_"
      "BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *((int8_t*)mulnum_ref + field_index);\012  }\012  \012}\012\012s"
      "tatic inline void SPVM_IMPLEMENT_GET_MULNUM_FIELD_DEREF_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int1"
      "6_t* out, int16_t* mulnum_ref, int32_t field_index, int32_t* error_id) {\012  \012  if (__builtin_expect(m"
      "ulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_"
      "IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, st"
      "ack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *("
      "(int16_t*)mulnum_ref + field_index);\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_FIELD_DE"
      "REF_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, int32_t* mulnum_ref, int32_t field_index, in"
      "t32_t* error_id) {\012  \012  if (__builtin_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = env"
      "->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_R"
      "EF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_T"
      "YPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *((int32_t*)mulnum_ref + field_index);\012  }\012  \012}\012\012static "
      "inline void SPVM_IMPLEMENT_GET_MULNUM_FIELD_DEREF_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* ou"
      "t, int64_t* mulnum_ref, int32_t field_index, int32_t* error_id) {\012  \012  if (__builtin_expect(mulnum_r"
      "ef == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEME"
      "NT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, ex"
      "ception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *((int64_"
      "t*)mulnum_ref + field_index);\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_FIELD_DEREF_FLO"
      "AT(SPVM_ENV* env, SPVM_VALUE* stack, float* out, float* mulnum_ref, int32_t field_index, int32_t* er"
      "ror_id) {\012  \012  if (__builtin_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_str"
      "ing_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFI"
      "NED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ER"
      "ROR_CLASS;\012  }\012  else {\012    *out = *((float*)mulnum_ref + field_index);\012  }\012  \012}\012\012static inline void"
      " SPVM_IMPLEMENT_GET_MULNUM_FIELD_DEREF_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, double* out, double*"
      " mulnum_ref, int32_t field_index, int32_t* error_id) {\012  \012  if (__builtin_expect(mulnum_ref == NULL,"
      " 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_L"
      "ITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012 "
      "   *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *((double*)mulnum_re"
      "f + field_index);\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_FIELD_DEREF_BYTE(SPVM_ENV* "
      "env, SPVM_VALUE* stack, int8_t* mulnum_ref, int32_t field_index, int8_t in, int32_t* error_id) {\012  \012"
      "  if (__builtin_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_"
      "mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    en"
      "v->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  "
      "}\012  else {\012    *((int8_t*)mulnum_ref + field_index) = in;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_S"
      "ET_MULNUM_FIELD_DEREF_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int16_t* mulnum_ref, int32_t field_ind"
      "ex, int16_t in, int32_t* error_id) {\012  \012  if (__builtin_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OB"
      "J* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLE"
      "MENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPV"
      "M_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *((int16_t*)mulnum_ref + field_index) = in;\012 "
      " }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_FIELD_DEREF_INT(SPVM_ENV* env, SPVM_VALUE* stack,"
      " int32_t* mulnum_ref, int32_t field_index, int32_t in, int32_t* error_id) {\012  \012  if (__builtin_expec"
      "t(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SP"
      "VM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env,"
      " stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *((int"
      "32_t*)mulnum_ref + field_index) = in;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_FIELD_DERE"
      "F_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* mulnum_ref, int32_t field_index, int64_t in, int32"
      "_t* error_id) {\012  \012  if (__builtin_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = env->n"
      "ew_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_"
      "UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE"
      "_ID_ERROR_CLASS;\012  }\012  else {\012    *((int64_t*)mulnum_ref + field_index) = in;\012  }\012}\012\012static inline v"
      "oid SPVM_IMPLEMENT_SET_MULNUM_FIELD_DEREF_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, float* mulnum_ref,"
      " int32_t field_index, float in, int32_t* error_id) {\012  \012  if (__builtin_expect(mulnum_ref == NULL, 0"
      ")) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LIT"
      "ERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012   "
      " *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *((float*)mulnum_ref +field_i"
      "ndex) = in;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_FIELD_DEREF_DOUBLE(SPVM_ENV* env, SP"
      "VM_VALUE* stack, double* mulnum_ref, int32_t field_index, double in, int32_t* error_id) {\012  \012  if (_"
      "_builtin_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal("
      "env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_"
      "exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  els"
      "e {\012    *((double*)mulnum_ref + field_index) = in;\012  }\012}\012\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_BYT"
      "E_TO_SHORT(out, in) (out = (int16_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_TO_INT(out, in) "
      "(out = (int32_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_TO_LONG(out, in) (out = (int64_t)in)"
      "\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_TO_FLOAT(out, in) (out = (float)in)\012#define SPVM_IMPLEM"
      "ENT_TYPE_CONVERSION_BYTE_TO_DOUBLE(out, in) (out = (double)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSIO"
      "N_SHORT_TO_BYTE(out, in) (out = (int8_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_SHORT_TO_INT(out,"
      " in) (out = (int32_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_SHORT_TO_LONG(out, in) (out = (int64"
      "_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_SHORT_TO_FLOAT(out, in) (out = (float)in)\012#define SPVM"
      "_IMPLEMENT_TYPE_CONVERSION_SHORT_TO_DOUBLE(out, in) (out = (double)in)\012#define SPVM_IMPLEMENT_TYPE_C"
      "ONVERSION_INT_TO_BYTE(out, in) (out = (int8_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_INT_TO_SHOR"
      "T(out, in) (out = (int16_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_INT_TO_LONG(out, in) (out = (i"
      "nt64_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_INT_TO_FLOAT(out, in) (out = (float)in)\012#define SP"
      "VM_IMPLEMENT_TYPE_CONVERSION_INT_TO_DOUBLE(out, in) (out = (double)in)\012#define SPVM_IMPLEMENT_TYPE_C"
      "ONVERSION_LONG_TO_BYTE(out, in) (out = (int8_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_SH"
      "ORT(out, in) (out = (int16_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_INT(out, in) (out = "
      "(int32_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_FLOAT(out, in) (out = (float)in)\012#define"
      " SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_DOUBLE(out, in) (out = (double)in)\012#define SPVM_IMPLEMENT_TY"
      "PE_CONVERSION_FLOAT_TO_BYTE(out, in) (out = (int8_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_FLOAT"
      "_TO_SHORT(out, in) (out = (int16_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_FLOAT_TO_INT(out, in) "
      "(out = (int32_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_FLOAT_TO_LONG(out, in) (out = (int64_t)in"
      ")\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_FLOAT_TO_DOUBLE(out, in) (out = (double)in)\012#define SPVM_IM"
      "PLEMENT_TYPE_CONVERSION_DOUBLE_TO_BYTE(out, in) (out = (int8_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVE"
      "RSION_DOUBLE_TO_SHORT(out, in) (out = (int16_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_DOUBLE_TO_"
      "INT(out, in) (out = (int32_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_DOUBLE_TO_LONG(out, in) (out"
      " = (int64_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_DOUBLE_TO_FLOAT(out, in) (out = (float)in)\012\012s"
      "tatic inline void SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_TO_STRING(SPVM_ENV* env, SPVM_VALUE* stack, SP"
      "VM_OBJ** out, int8_t value) {\012  char* tmp_buffer = env->api->internal->get_stack_tmp_buffer(env, sta"
      "ck);\012  \012  SPVM_VALUE args[1];\012  args[0].ival = (int32_t)value;\012  int32_t string_length = env->api->i"
      "nternal->c_snprintf_len(env, stack, tmp_buffer, SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE, \"%\" PRId8, args"
      ", 1);\012  \012  SPVM_OBJ* string = env->new_string_no_mortal(env, stack, tmp_buffer, string_length);\012  en"
      "v->assign_object(env, stack, out, string);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_SHOR"
      "T_TO_STRING(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int16_t value) {\012  char* tmp_buffer = "
      "env->api->internal->get_stack_tmp_buffer(env, stack);\012  \012  SPVM_VALUE args[1];\012  args[0].ival = (int"
      "32_t)value;\012  int32_t string_length = env->api->internal->c_snprintf_len(env, stack, tmp_buffer, SPV"
      "M_NATIVE_C_STACK_TMP_BUFFER_SIZE, \"%\" PRId16, args, 1);\012  \012  SPVM_OBJ* string = env->new_string_no_m"
      "ortal(env, stack, tmp_buffer, string_length);\012  env->assign_object(env, stack, out, string);\012}\012\012stat"
      "ic inline void SPVM_IMPLEMENT_TYPE_CONVERSION_INT_TO_STRING(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_O"
      "BJ** out, int32_t value) {\012  char* tmp_buffer = env->api->internal->get_stack_tmp_buffer(env, stack)"
      ";\012  \012  SPVM_VALUE args[1];\012  args[0].ival = value;\012  int32_t string_length = env->api->internal->c_s"
      "nprintf_len(env, stack, tmp_buffer, SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE, \"%\" PRId32, args, 1);\012  \012  "
      "SPVM_OBJ* string = env->new_string_no_mortal(env, stack, tmp_buffer, string_length);\012  env->assign_o"
      "bject(env, stack, out, string);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_STRING("
      "SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int64_t value) {\012  char* tmp_buffer = env->api->in"
      "ternal->get_stack_tmp_buffer(env, stack);\012  \012  SPVM_VALUE args[1];\012  args[0].lval = value;\012  int32_t"
      " string_length = env->api->internal->c_snprintf_len(env, stack, tmp_buffer, SPVM_NATIVE_C_STACK_TMP_"
      "BUFFER_SIZE, \"%\" PRId64, args, 1);\012  \012  SPVM_OBJ* string = env->new_string_no_mortal(env, stack, tmp"
      "_buffer, string_length);\012  env->assign_object(env, stack, out, string);\012}\012\012static inline void SPVM_I"
      "MPLEMENT_TYPE_CONVERSION_FLOAT_TO_STRING(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, float val"
      "ue) {\012  char* tmp_buffer = env->api->internal->get_stack_tmp_buffer(env, stack);\012  \012  SPVM_VALUE arg"
      "s[1];\012  args[0].dval = (double)value;\012  int32_t string_length = env->api->internal->c_snprintf_len(e"
      "nv, stack, tmp_buffer, SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE, \"%g\", args, 1);\012  \012  SPVM_OBJ* string = "
      "env->new_string_no_mortal(env, stack, tmp_buffer, string_length);\012  env->assign_object(env, stack, o"
      "ut, string);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_DOUBLE_TO_STRING(SPVM_ENV* env, SP"
      "VM_VALUE* stack, SPVM_OBJ** out, double value) {\012  char* tmp_buffer = env->api->internal->get_stack_"
      "tmp_buffer(env, stack);\012  \012  SPVM_VALUE args[1];\012  args[0].dval = value;\012  int32_t string_length = e"
      "nv->api->internal->c_snprintf_len(env, stack, tmp_buffer, SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE, \"%g\","
      " args, 1);\012  \012  SPVM_OBJ* string = env->new_string_no_mortal(env, stack, tmp_buffer, string_length);"
      "\012  env->assign_object(env, stack, out, string);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION"
      "_STRING_TO_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, int8_t* out, SPVM_OBJ* src_string) {\012  \012  int64_t "
      "num = 0;\012  if (src_string) {\012    const char* string = env->get_chars(env, stack, src_string);\012    \012 "
      "   char *end;\012    num = env->api->internal->c_strtoll(env, stack, string, &end, 10);\012    if (num > I"
      "NT8_MAX) {\012      num = INT8_MAX;\012    }\012    else if (num < INT8_MIN) {\012      num = INT8_MIN;\012    }\012  "
      "}\012  \012  *out = (int8_t)num;\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_STRING_TO_SHORT(SPVM"
      "_ENV* env, SPVM_VALUE* stack, int16_t* out, SPVM_OBJ* src_string) {\012  \012  int64_t num = 0;\012  if (src_"
      "string) {\012    const char* string = env->get_chars(env, stack, src_string);\012    \012    char *end;\012    n"
      "um = env->api->internal->c_strtoll(env, stack, string, &end, 10);\012    if (num > INT16_MAX) {\012      n"
      "um = INT16_MAX;\012    }\012    else if (num < INT16_MIN) {\012      num = INT16_MIN;\012    }\012  }\012  \012  *out = ("
      "int16_t)num;\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_STRING_TO_INT(SPVM_ENV* env, SPVM_"
      "VALUE* stack, int32_t* out, SPVM_OBJ* src_string) {\012  \012  int64_t num = 0;\012  if (src_string) {\012    co"
      "nst char* string = env->get_chars(env, stack, src_string);\012    \012    char *end;\012    num = env->api->i"
      "nternal->c_strtoll(env, stack, string, &end, 10);\012    if (num > INT32_MAX) {\012      num = INT32_MAX;\012"
      "    }\012    else if (num < INT32_MIN) {\012      num = INT32_MIN;\012    }\012  }\012  \012  *out = (int32_t)num;\012}\012\012"
      "static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_STRING_TO_LONG(SPVM_ENV* env, SPVM_VALUE* stack, i"
      "nt64_t* out, SPVM_OBJ* src_string) {\012  \012  int64_t num = 0;\012  if (src_string) {\012    const char* strin"
      "g = env->get_chars(env, stack, src_string);\012    \012    char *end;\012    num = env->api->internal->c_strt"
      "oll(env, stack, string, &end, 10);\012  }\012  \012  *out = (int64_t)num;\012}\012\012static inline void SPVM_IMPLEMEN"
      "T_TYPE_CONVERSION_STRING_TO_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, float* out, SPVM_OBJ* src_string"
      ") {\012  \012  float num = 0;\012  if (src_string) {\012    const char* string = env->get_chars(env, stack, src_"
      "string);\012    \012    char *end;\012    num = env->api->internal->c_strtof(env, stack, string, &end);\012  }\012 "
      " \012  *out = (float)num;\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_STRING_TO_DOUBLE(SPVM_EN"
      "V* env, SPVM_VALUE* stack, double* out, SPVM_OBJ* src_string) {\012  \012  double num = 0;\012  if (src_strin"
      "g) {\012    const char* string = env->get_chars(env, stack, src_string);\012    \012    char *end;\012    num = "
      "env->api->internal->c_strtod(env, stack, string, &end);\012  }\012  \012  *out = (double)num;\012}\012\012static inlin"
      "e void SPVM_IMPLEMENT_TYPE_CONVERSION_STRING_TO_BYTE_ARRAY(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OB"
      "J** out, SPVM_OBJ* src_string) {\012  \012  if (src_string) {\012    int32_t src_string_length = env->length("
      "env, stack, src_string);\012    const char* src_string_data = env->get_chars(env, stack, src_string);\012 "
      "   SPVM_OBJ* byte_array = env->new_byte_array_no_mortal(env, stack, src_string_length);\012    int8_t* "
      "byte_array_data = env->get_elems_byte(env, stack, byte_array);\012    env->api->internal->c_memcpy(env,"
      " stack, byte_array_data, src_string_data, src_string_length);\012    env->assign_object(env, stack, out"
      ", byte_array);\012  }\012  else {\012    env->assign_object(env, stack, out, NULL);\012  }\012}\012\012static inline void"
      " SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_ARRAY_TO_STRING(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** ou"
      "t, SPVM_OBJ* src_byte_array) {\012  int32_t src_byte_array_length = env->length(env, stack, src_byte_ar"
      "ray);\012  int8_t* src_byte_array_data = env->get_elems_byte(env, stack, src_byte_array);\012  SPVM_OBJ* s"
      "tring = env->new_string_no_mortal(env, stack, (const char*)src_byte_array_data, src_byte_array_lengt"
      "h);\012  env->assign_object(env, stack, out, string);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERS"
      "ION_BYTE_TO_BYTE_OBJECT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int8_t value) {\012  SPVM_NAT"
      "IVE_BASIC_TYPE* basic_type = env->api->runtime->get_basic_type_by_id(env->runtime, SPVM_NATIVE_C_BAS"
      "IC_TYPE_ID_BYTE_CLASS);\012  SPVM_OBJ* object = env->new_object_no_mortal(env, stack, basic_type);\012  in"
      "t8_t** fields = (int8_t**)(GET_DATA_ADDRESS(env, stack, object));\012  *(int8_t*)&fields[0] = value;\012  "
      "env->assign_object(env, stack, out, object);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_SH"
      "ORT_TO_SHORT_OBJECT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int16_t value) {\012  SPVM_NATIVE"
      "_BASIC_TYPE* basic_type = env->api->runtime->get_basic_type_by_id(env->runtime, SPVM_NATIVE_C_BASIC_"
      "TYPE_ID_SHORT_CLASS);\012  SPVM_OBJ* object = env->new_object_no_mortal(env, stack, basic_type);\012  int1"
      "6_t** fields = (int16_t**)(GET_DATA_ADDRESS(env, stack, object));\012  *(int16_t*)&fields[0] = value;\012 "
      " env->assign_object(env, stack, out, object);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_I"
      "NT_TO_INT_OBJECT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int32_t value) {\012  SPVM_NATIVE_BA"
      "SIC_TYPE* basic_type = env->api->runtime->get_basic_type_by_id(env->runtime, SPVM_NATIVE_C_BASIC_TYP"
      "E_ID_INT_CLASS);\012  SPVM_OBJ* object = env->new_object_no_mortal(env, stack, basic_type);\012  int32_t**"
      " fields = (int32_t**)(GET_DATA_ADDRESS(env, stack, object));\012  *(int32_t*)&fields[0] = value;\012  env-"
      ">assign_object(env, stack, out, object);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_T"
      "O_LONG_OBJECT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int64_t value) {\012  SPVM_NATIVE_BASIC"
      "_TYPE* basic_type = env->api->runtime->get_basic_type_by_id(env->runtime, SPVM_NATIVE_C_BASIC_TYPE_I"
      "D_LONG_CLASS);\012  SPVM_OBJ* object = env->new_object_no_mortal(env, stack, basic_type);\012  int64_t** f"
      "ields = (int64_t**)(GET_DATA_ADDRESS(env, stack, object));\012  *(int64_t*)&fields[0] = value;\012  env->a"
      "ssign_object(env, stack, out, object);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_FLOAT_TO"
      "_FLOAT_OBJECT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, float value) {\012  SPVM_NATIVE_BASIC_T"
      "YPE* basic_type = env->api->runtime->get_basic_type_by_id(env->runtime, SPVM_NATIVE_C_BASIC_TYPE_ID_"
      "FLOAT_CLASS);\012  SPVM_OBJ* object = env->new_object_no_mortal(env, stack, basic_type);\012  float** fiel"
      "ds = (float**)(GET_DATA_ADDRESS(env, stack, object));\012  *(float*)&fields[0] = value;\012  env->assign_o"
      "bject(env, stack, out, object);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_DOUBLE_TO_DOUBL"
      "E_OBJECT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, double value) {\012  SPVM_NATIVE_BASIC_TYPE*"
      " basic_type = env->api->runtime->get_basic_type_by_id(env->runtime, SPVM_NATIVE_C_BASIC_TYPE_ID_DOUB"
      "LE_CLASS);\012  SPVM_OBJ* object = env->new_object_no_mortal(env, stack, basic_type);\012  double** fields"
      " = (double**)(GET_DATA_ADDRESS(env, stack, object));\012  *(double*)&fields[0] = value;\012  env->assign_o"
      "bject(env, stack, out, object);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_ANY_OBJECT_TO_B"
      "YTE(SPVM_ENV* env, SPVM_VALUE* stack, int8_t* out, SPVM_OBJ* object, int32_t* error_id) {\012  \012  *out "
      "= env->numeric_object_to_byte(env, stack, object, error_id);\012}\012\012static inline void SPVM_IMPLEMENT_TY"
      "PE_CONVERSION_ANY_OBJECT_TO_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int16_t* out, SPVM_OBJ* object, "
      "int32_t* error_id) {\012  \012  *out = env->numeric_object_to_short(env, stack, object, error_id);\012}\012\012stat"
      "ic inline void SPVM_IMPLEMENT_TYPE_CONVERSION_ANY_OBJECT_TO_INT(SPVM_ENV* env, SPVM_VALUE* stack, in"
      "t32_t* out, SPVM_OBJ* object, int32_t* error_id) {\012  \012  *out = env->numeric_object_to_int(env, stack"
      ", object, error_id);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_ANY_OBJECT_TO_LONG(SPVM_EN"
      "V* env, SPVM_VALUE* stack, int64_t* out, SPVM_OBJ* object, int32_t* error_id) {\012  \012  *out = env->num"
      "eric_object_to_long(env, stack, object, error_id);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERS"
      "ION_ANY_OBJECT_TO_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, float* out, SPVM_OBJ* object, int32_t* err"
      "or_id) {\012  \012  *out = env->numeric_object_to_float(env, stack, object, error_id);\012}\012\012static inline vo"
      "id SPVM_IMPLEMENT_TYPE_CONVERSION_ANY_OBJECT_TO_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, double* out"
      ", SPVM_OBJ* object, int32_t* error_id) {\012  \012  *out = env->numeric_object_to_double(env, stack, objec"
      "t, error_id);\012}\012\012#define SPVM_IMPLEMENT_SET_STACK_BYTE(stack, stack_index, in) (*(int8_t*)&stack[sta"
      "ck_index] = in)\012#define SPVM_IMPLEMENT_SET_STACK_SHORT(stack, stack_index, in) (*(int16_t*)&stack[st"
      "ack_index] = in)\012#define SPVM_IMPLEMENT_SET_STACK_INT(stack, stack_index, in) (*(int32_t*)&stack[sta"
      "ck_index] = in)\012#define SPVM_IMPLEMENT_SET_STACK_LONG(stack, stack_index, in) (*(int64_t*)&stack[sta"
      "ck_index] = in)\012#define SPVM_IMPLEMENT_SET_STACK_FLOAT(stack, stack_index, in) (*(float*)&stack[stac"
      "k_index] = in)\012#define SPVM_IMPLEMENT_SET_STACK_DOUBLE(stack, stack_index, in) (*(double*)&stack[sta"
      "ck_index] = in)\012#define SPVM_IMPLEMENT_SET_STACK_OBJECT(stack, stack_index, in) (*(SPVM_OBJ**)&stack"
      "[stack_index] = in)\012#define SPVM_IMPLEMENT_SET_STACK_REF(stack, stack_index, in) (*(SPVM_REF**)&stac"
      "k[stack_index] = in)\012#define SPVM_IMPLEMENT_SET_STACK_UNDEF(stack, stack_index) (*(SPVM_OBJ**)&stack"
      "[stack_index] = NULL)\012\012static inline void SPVM_IMPLEMENT_SET_STACK_MULNUM_BYTE(SPVM_ENV* env, SPVM_V"
      "ALUE* stack, int32_t stack_base, int32_t args_width, int8_t* in) {\012  for (int32_t stack_index = 0; s"
      "tack_index < args_width; stack_index++) {\012    *(int8_t*)&stack[stack_base + stack_index] = *(in + st"
      "ack_index);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_STACK_MULNUM_SHORT(SPVM_ENV* env, SPVM_VALU"
      "E* stack, int32_t stack_base, int32_t args_width, int16_t* in) {\012  for (int32_t stack_index = 0; sta"
      "ck_index < args_width; stack_index++) {\012    *(int16_t*)&stack[stack_base + stack_index] = *(in + sta"
      "ck_index);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_STACK_MULNUM_INT(SPVM_ENV* env, SPVM_VALUE* "
      "stack, int32_t stack_base, int32_t args_width, int32_t* in) {\012  for (int32_t stack_index = 0; stack_"
      "index < args_width; stack_index++) {\012    *(int32_t*)&stack[stack_base + stack_index] = *(in + stack_"
      "index);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_STACK_MULNUM_LONG(SPVM_ENV* env, SPVM_VALUE* st"
      "ack, int32_t stack_base, int32_t args_width, int64_t* in) {\012  for (int32_t stack_index = 0; stack_in"
      "dex < args_width; stack_index++) {\012    *(int64_t*)&stack[stack_base + stack_index] = *(in + stack_in"
      "dex);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_STACK_MULNUM_FLOAT(SPVM_ENV* env, SPVM_VALUE* sta"
      "ck, int32_t stack_base, int32_t args_width, float* in) {\012  for (int32_t stack_index = 0; stack_index"
      " < args_width; stack_index++) {\012    *(float*)&stack[stack_base + stack_index] = *(in + stack_index);"
      "\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_STACK_MULNUM_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, "
      "int32_t stack_base, int32_t args_width, double* in) {\012  for (int32_t stack_index = 0; stack_index < "
      "args_width; stack_index++) {\012    *(double*)&stack[stack_base + stack_index] = *(in + stack_index);\012 "
      " }\012}\012\012#define SPVM_IMPLEMENT_GET_STACK_BYTE(out, stack, stack_index) (out = *(int8_t*)&stack[stack_i"
      "ndex])\012#define SPVM_IMPLEMENT_GET_STACK_SHORT(out, stack, stack_index) (out = *(int16_t*)&stack[stac"
      "k_index])\012#define SPVM_IMPLEMENT_GET_STACK_INT(out, stack, stack_index) (out = *(int32_t*)&stack[sta"
      "ck_index])\012#define SPVM_IMPLEMENT_GET_STACK_LONG(out, stack, stack_index) (out = *(int64_t*)&stack[s"
      "tack_index])\012#define SPVM_IMPLEMENT_GET_STACK_FLOAT(out, stack, stack_index) (out = *(float*)&stack["
      "stack_index])\012#define SPVM_IMPLEMENT_GET_STACK_DOUBLE(out, stack, stack_index) (out = *(double*)&sta"
      "ck[stack_index])\012\012static inline void SPVM_IMPLEMENT_GET_STACK_OBJECT(SPVM_ENV* env, SPVM_OBJ** out, "
      "SPVM_VALUE* stack, int32_t stack_index) {\012  env->assign_object(env, stack, out, *(SPVM_OBJ**)&stack["
      "stack_index]);\012}\012\012#define SPVM_IMPLEMENT_GET_STACK_REF(out, stack, stack_index) (out = *(SPVM_REF**)"
      "&stack[stack_index])\012\012static inline void SPVM_IMPLEMENT_GET_STACK_MULNUM_BYTE(SPVM_ENV* env, int8_t*"
      " out, SPVM_VALUE* stack, int32_t stack_base, int32_t args_width) {\012  for (int32_t stack_index = 0; s"
      "tack_index < args_width; stack_index++) {\012    *(out + stack_index) = *(int8_t*)&stack[(stack_base) +"
      " stack_index];\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_STACK_MULNUM_SHORT(SPVM_ENV* env, int16_"
      "t* out, SPVM_VALUE* stack, int32_t stack_base, int32_t args_width) {\012  for (int32_t stack_index = 0;"
      " stack_index < args_width; stack_index++) {\012    *(out + stack_index) = *(int16_t*)&stack[(stack_base"
      ") + stack_index];\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_STACK_MULNUM_INT(SPVM_ENV* env, int32"
      "_t* out, SPVM_VALUE* stack, int32_t stack_base, int32_t args_width) {\012  for (int32_t stack_index = 0"
      "; stack_index < args_width; stack_index++) {\012    *(out + stack_index) = *(int32_t*)&stack[(stack_bas"
      "e) + stack_index];\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_STACK_MULNUM_LONG(SPVM_ENV* env, int"
      "64_t* out, SPVM_VALUE* stack, int32_t stack_base, int32_t args_width) {\012  for (int32_t stack_index ="
      " 0; stack_index < args_width; stack_index++) {\012    *(out + stack_index) = *(int64_t*)&stack[(stack_b"
      "ase) + stack_index];\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_STACK_MULNUM_FLOAT(SPVM_ENV* env, "
      "float* out, SPVM_VALUE* stack, int32_t stack_base, int32_t args_width) {\012  for (int32_t stack_index "
      "= 0; stack_index < args_width; stack_index++) {\012    *(out + stack_index) = *(float*)&stack[(stack_ba"
      "se) + stack_index];\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_STACK_MULNUM_DOUBLE(SPVM_ENV* env, "
      "double* out, SPVM_VALUE* stack, int32_t stack_base, int32_t args_width) {\012  for (int32_t stack_index"
      " = 0; stack_index < args_width; stack_index++) {\012    *(out + stack_index) = *(double*)&stack[(stack_"
      "base) + stack_index];\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_STACK_OPTIONAL_BYTE(SPVM_ENV* env"
      ", int8_t* out, SPVM_VALUE* stack, int32_t stack_index, int8_t default_value) {\012  int32_t args_width "
      "= env->args_width(env, stack);\012  if (stack_index >= args_width) {\012    *out = default_value;\012  }\012  el"
      "se {\012    *out = *(int8_t*)&stack[stack_index];\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_STACK_OP"
      "TIONAL_SHORT(SPVM_ENV* env, int16_t* out, SPVM_VALUE* stack, int32_t stack_index, int16_t default_va"
      "lue) {\012  int32_t args_width = env->args_width(env, stack);\012  if (stack_index >= args_width) {\012    *o"
      "ut = default_value;\012  }\012  else {\012    *out = *(int16_t*)&stack[stack_index];\012  }\012}\012\012static inline voi"
      "d SPVM_IMPLEMENT_GET_STACK_OPTIONAL_INT(SPVM_ENV* env, int32_t* out, SPVM_VALUE* stack, int32_t stac"
      "k_index, int32_t default_value) {\012  int32_t args_width = env->args_width(env, stack);\012  if (stack_in"
      "dex >= args_width) {\012    *out = default_value;\012  }\012  else {\012    *out = *(int32_t*)&stack[stack_index"
      "];\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_STACK_OPTIONAL_LONG(SPVM_ENV* env, int64_t* out, SPV"
      "M_VALUE* stack, int32_t stack_index, int64_t default_value) {\012  int32_t args_width = env->args_width"
      "(env, stack);\012  if (stack_index >= args_width) {\012    *out = default_value;\012  }\012  else {\012    *out = *"
      "(int64_t*)&stack[stack_index];\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_STACK_OPTIONAL_FLOAT(SPV"
      "M_ENV* env, float* out, SPVM_VALUE* stack, int32_t stack_index, float default_value) {\012  int32_t arg"
      "s_width = env->args_width(env, stack);\012  if (stack_index >= args_width) {\012    *out = default_value;\012"
      "  }\012  else {\012    *out = *(float*)&stack[stack_index];\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_S"
      "TACK_OPTIONAL_DOUBLE(SPVM_ENV* env, double* out, SPVM_VALUE* stack, int32_t stack_index, double defa"
      "ult_value) {\012  int32_t args_width = env->args_width(env, stack);\012  if (stack_index >= args_width) {\012"
      "    *out = default_value;\012  }\012  else {\012    *out = *(double*)&stack[stack_index];\012  }\012}\012\012static inlin"
      "e void SPVM_IMPLEMENT_GET_STACK_OPTIONAL_OBJECT(SPVM_ENV* env, SPVM_OBJ** out, SPVM_VALUE* stack, in"
      "t32_t stack_index) {\012  int32_t args_width = env->args_width(env, stack);\012  if (stack_index >= args_w"
      "idth) {\012    env->assign_object(env, stack, out, NULL);\012  }\012  else {\012    env->assign_object(env, stac"
      "k, out, *(SPVM_OBJ**)&stack[stack_index]);\012  }\012}\012\012#define SPVM_IMPLEMENT_RETURN_BYTE(stack, in) (*(i"
      "nt8_t*)&stack[0] = in)\012#define SPVM_IMPLEMENT_RETURN_SHORT(stack, in) (*(int16_t*)&stack[0] = in)\012#d"
      "efine SPVM_IMPLEMENT_RETURN_INT(stack, in) (*(int32_t*)&stack[0] = in)\012#define SPVM_IMPLEMENT_RETURN"
      "_LONG(stack, in) (*(int64_t*)&stack[0] = in)\012#define SPVM_IMPLEMENT_RETURN_FLOAT(stack, in) (*(float"
      "*)&stack[0] = in)\012#define SPVM_IMPLEMENT_RETURN_DOUBLE(stack, in) (*(double*)&stack[0] = in)\012\012static"
      " inline void SPVM_IMPLEMENT_RETURN_OBJECT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* in) {\012  *(SPVM"
      "_OBJ**)&stack[0] = in;\012  if (in != NULL) {\012    env->api->internal->inc_ref_count(env, stack, in);\012  "
      "}\012}\012\012#define SPVM_IMPLEMENT_RETURN_UNDEF(stack) (*(SPVM_OBJ**)&stack[0] = NULL)\012\012static inline void "
      "SPVM_IMPLEMENT_RETURN_MULNUM_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, int8_t* in, int32_t args_width) "
      "{\012  for (int32_t stack_index = 0; stack_index < args_width; stack_index++) {\012    *(int8_t*)&stack[st"
      "ack_index] = *(in + stack_index);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_RETURN_MULNUM_SHORT(SPVM_"
      "ENV* env, SPVM_VALUE* stack, int16_t* in, int32_t args_width) {\012  for (int32_t stack_index = 0; stac"
      "k_index < args_width; stack_index++) {\012    *(int16_t*)&stack[stack_index] = *(in + stack_index);\012  }"
      "\012}\012\012static inline void SPVM_IMPLEMENT_RETURN_MULNUM_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* i"
      "n, int32_t args_width) {\012  for (int32_t stack_index = 0; stack_index < args_width; stack_index++) {\012"
      "    *(int32_t*)&stack[stack_index] = *(in + stack_index);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_R"
      "ETURN_MULNUM_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* in, int32_t args_width) {\012  for (int32_"
      "t stack_index = 0; stack_index < args_width; stack_index++) {\012    *(int64_t*)&stack[stack_index] = *"
      "(in + stack_index);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_RETURN_MULNUM_FLOAT(SPVM_ENV* env, SPVM"
      "_VALUE* stack, float* in, int32_t args_width) {\012  for (int32_t stack_index = 0; stack_index < args_w"
      "idth; stack_index++) {\012    *(float*)&stack[stack_index] = *(in + stack_index);\012  }\012}\012\012static inline "
      "void SPVM_IMPLEMENT_RETURN_MULNUM_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, double* in, int32_t args_"
      "width) {\012  for (int32_t stack_index = 0; stack_index < args_width; stack_index++) {\012    *(double*)&s"
      "tack[stack_index] = *(in + stack_index);\012  }\012}\012\012#define SPVM_IMPLEMENT_CALL_CLASS_METHOD(env, stack,"
      " error_id, method, args_width, func_name, file, line) (error_id = env->call_method_no_mortal_no_chec"
      "k_args(env, stack, method, args_width, func_name, file, line))\012\012#define SPVM_IMPLEMENT_CALL_INSTANCE"
      "_METHOD_STATIC(env, stack, error_id, method, args_width, func_name, file, line) (error_id = env->cal"
      "l_method_no_mortal_no_check_args(env, stack, method, args_width, func_name, file, line))\012\012#define SP"
      "VM_IMPLEMENT_CALL_INSTANCE_METHOD(env, stack, error_id, method_name, args_width, decl_args_signature"
      ", func_name, file, line) (error_id = env->call_instance_method_no_mortal_less_check_args(env, stack,"
      " method_name, args_width, decl_args_signature, func_name, file, line))\012\012#endif\012"
;

const char* get_precompile_header_content() {
  return spvm_precompile_header_content;
}
