/* 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/*\012 * spvm_warnf and spvm_warn macros\012 * * These macros"
      " provide a way to print formatted warning messages to a stream (or stderr),\012 * including the functio"
      "n name, file name, and line number.\012 * * Special care is taken for MSVC's traditional preprocessor w"
      "hich handles __VA_ARGS__ \012 * as a single token. The SPVM_EXPAND macro forces a rescan of arguments t"
      "o correctly\012 * separate them for fprintf.\012 */\012\012#if defined(_MSC_VER) && defined(_MSVC_TRADITIONAL) &"
      "& _MSVC_TRADITIONAL\012  /* Support for MSVC Traditional Preprocessor (without -Zc:preprocessor) */\012  #"
      "define SPVM_EXPAND(x) x\012  #define spvm_warnf(stream, format, ...) \\\012    SPVM_EXPAND(fprintf(stream, "
      "format \"\\n  %s at %s line %d\\n\", __VA_ARGS__, __func__, __FILE__, __LINE__))\012#else\012  /* Support for "
      "GCC, Clang, and Modern MSVC (with -Zc:preprocessor) */\012  /* The ##__VA_ARGS__ extension handles case"
      "s where the variable arguments are empty. */\012  #define spvm_warnf(stream, format, ...) fprintf(strea"
      "m, format \"\\n  %s at %s line %d\\n\", ##__VA_ARGS__, __func__, __FILE__, __LINE__)\012#endif\012\012/* Standard"
      " warning macro pointing to stderr */\012#define spvm_warn(format, ...) spvm_warnf(stderr, format, ##__V"
      "A_ARGS__)\012\012typedef union spvm_value SPVM_VALUE;\012\012struct spvm_env;\012typedef struct spvm_env SPVM_ENV;\012"
      "\012struct spvm_env_api;\012typedef struct spvm_env_api SPVM_ENV_API;\012\012struct spvm_api_allocator;\012typedef "
      "struct spvm_api_allocator SPVM_API_ALLOCATOR;\012\012struct spvm_api_string_buffer;\012typedef struct spvm_ap"
      "i_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 struct spvm_api_class_file SPVM_API_CLASS_FI"
      "LE;\012\012struct spvm_api_runtime;\012typedef struct spvm_api_runtime SPVM_API_RUNTIME;\012\012struct spvm_api_bas"
      "ic_type;\012typedef struct spvm_api_basic_type SPVM_API_BASIC_TYPE;\012\012struct spvm_api_class_var;\012typedef"
      " struct spvm_api_class_var SPVM_API_CLASS_VAR;\012\012struct spvm_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 sp"
      "vm_api_arg;\012typedef struct spvm_api_arg SPVM_API_ARG;\012\012struct spvm_api_mutex;\012typedef struct spvm_ap"
      "i_mutex SPVM_API_MUTEX;\012\012struct spvm_api_type;\012typedef struct spvm_api_type SPVM_API_TYPE;\012\012struct s"
      "pvm_api_internal;\012typedef struct spvm_api_internal SPVM_API_INTERNAL;\012\012union spvm_value {\012  int8_t b"
      "val;\012  int16_t sval;\012  int32_t ival;\012  int64_t lval;\012  float 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_E"
      "NV_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 (*set_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_command_info_basetime)(SPVM_ENV* env, SPVM_V"
      "ALUE* stack, int64_t base_time);\012  void (*destroy_class_vars)(SPVM_ENV* env, SPVM_VALUE* stack);\012  i"
      "nt32_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)(SP"
      "VM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  const 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_BASIC_TYPE* (*get_basic_type)(SPVM_ENV* env, S"
      "PVM_VALUE* stack, const char* basic_type_name);\012  SPVM_NATIVE_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_n"
      "ame, const char* file, int32_t line);\012  SPVM_NATIVE_BASIC_TYPE* (*get_basic_type_by_id)(SPVM_ENV* en"
      "v, SPVM_VALUE* stack, int32_t basic_type_id);\012  int32_t (*get_basic_type_id)(SPVM_ENV* env, SPVM_VAL"
      "UE* 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* fil"
      "e, int32_t line);\012  SPVM_NATIVE_CLASS_VAR* (*get_class_var)(SPVM_ENV* env, SPVM_VALUE* stack, const "
      "char* basic_type_name, const char* class_var_name);\012  int8_t (*get_class_var_byte)(SPVM_ENV* env, SP"
      "VM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var);\012  int16_t (*get_class_var_short)(SPVM_ENV* env, "
      "SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var);\012  int32_t (*get_class_var_int)(SPVM_ENV* env, "
      "SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var);\012  int64_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* en"
      "v, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var);\012  SPVM_OBJ* (*get_class_var_object)(SPVM_EN"
      "V* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var);\012  SPVM_OBJ* (*get_class_var_string)(SP"
      "VM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var);\012  void (*set_class_var_byte)(SPVM"
      "_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var, int8_t value);\012  void (*set_class_va"
      "r_short)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var, int16_t value);\012  void "
      "(*set_class_var_int)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var, int32_t val"
      "ue);\012  void (*set_class_var_long)(SPVM_ENV* env, SPVM_VALUE* 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_double)(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* value);\012  void (*set_class_var_string)(SPVM_ENV"
      "* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var, SPVM_OBJ* value);\012  SPVM_OBJ** (*get_cla"
      "ss_var_object_ref)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var);\012  int8_t (*g"
      "et_class_var_byte_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char"
      "* class_var_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  int16"
      "_t (*get_class_var_short_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, con"
      "st char* class_var_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012"
      "  int32_t (*get_class_var_int_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name"
      ", const char* class_var_name, int32_t* error_id, const char* func_name, const char* file, int32_t li"
      "ne);\012  int64_t (*get_class_var_long_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_typ"
      "e_name, const char* class_var_name, int32_t* error_id, const char* func_name, const char* file, int3"
      "2_t line);\012  float (*get_class_var_float_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basi"
      "c_type_name, const char* class_var_name, int32_t* error_id, 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 cha"
      "r* 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_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  void (*set_class_var_byte_by_name)(SPVM_ENV* env, SPVM_"
      "VALUE* stack, const char* basic_type_name, const char* class_var_name, int8_t value, int32_t* error_"
      "id, const char* func_name, const char* file, int32_t line);\012  void (*set_class_var_short_by_name)(SP"
      "VM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* class_var_name, int16_t val"
      "ue, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  void (*set_class_va"
      "r_int_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* class_var_"
      "name, int32_t value, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  vo"
      "id (*set_class_var_long_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, cons"
      "t char* class_var_name, int64_t value, int32_t* error_id, const char* func_name, const char* file, i"
      "nt32_t line);\012  void (*set_class_var_float_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* ba"
      "sic_type_name, const char* class_var_name, float value, int32_t* error_id, const char* func_name, co"
      "nst char* file, int32_t line);\012  void (*set_class_var_double_by_name)(SPVM_ENV* env, SPVM_VALUE* sta"
      "ck, const char* basic_type_name, const char* class_var_name, double value, int32_t* error_id, const "
      "char* func_name, const char* file, int32_t line);\012  void (*set_class_var_object_by_name)(SPVM_ENV* e"
      "nv, SPVM_VALUE* stack, const char* basic_type_name, const char* class_var_name, SPVM_OBJ* value, int"
      "32_t* error_id, const char* func_name, const char* file, int32_t line);\012  void (*set_class_var_strin"
      "g_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  SPVM"
      "_NATIVE_FIELD* (*get_field)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_na"
      "me);\012  SPVM_NATIVE_FIELD* (*get_field_static)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_ty"
      "pe_name, const char* field_name);\012  int8_t (*get_field_byte)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_"
      "OBJ* object, SPVM_NATIVE_FIELD* field);\012  int16_t (*get_field_short)(SPVM_ENV* env, SPVM_VALUE* stac"
      "k, 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  int64_t (*get_field_long)(SPVM_ENV* env, SPV"
      "M_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field);\012  float (*get_field_float)(SPVM_ENV* en"
      "v, 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_NATIVE_FIELD* field);\012  SPVM_OBJ* (*get_field_o"
      "bject)(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  v"
      "oid (*set_field_byte)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field, "
      "int8_t value);\012  void (*set_field_short)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NA"
      "TIVE_FIELD* field, int16_t value);\012  void (*set_field_int)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OB"
      "J* object, SPVM_NATIVE_FIELD* field, int32_t value);\012  void (*set_field_long)(SPVM_ENV* env, SPVM_VA"
      "LUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field, int64_t value);\012  void (*set_field_float)(SP"
      "VM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field, float value);\012  void (*s"
      "et_field_double)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field, doubl"
      "e 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_string)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_O"
      "BJ* 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* field_name, int32_t* error_id, const char* fu"
      "nc_name, const char* file, int32_t line);\012  int16_t (*get_field_short_by_name)(SPVM_ENV* env, SPVM_V"
      "ALUE* stack, SPVM_OBJ* object, const char* field_name, int32_t* error_id, const char* func_name, con"
      "st char* file, int32_t line);\012  int32_t (*get_field_int_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, S"
      "PVM_OBJ* object, const char* field_name, int32_t* error_id, 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* obje"
      "ct, 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, const char* file, int32_t line);\012  double (*"
      "get_field_double_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_OBJ* (*get_field"
      "_object_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_OBJ* (*get_field_string_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  void (*set_field_byte_by_name)(SPVM_ENV"
      "* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_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* field_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* e"
      "nv, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, int32_t value, int32_t* error_id, c"
      "onst char* func_name, const char* file, int32_t line);\012  void (*set_field_long_by_name)(SPVM_ENV* en"
      "v, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, int64_t value, int32_t* error_id, co"
      "nst char* func_name, const char* file, int32_t line);\012  void (*set_field_float_by_name)(SPVM_ENV* en"
      "v, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, float value, int32_t* error_id, cons"
      "t char* func_name, const char* file, int32_t line);\012  void (*set_field_double_by_name)(SPVM_ENV* env"
      ", SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, double value, int32_t* error_id, cons"
      "t char* func_name, const char* file, int32_t line);\012  void (*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, c"
      "onst 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* field_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_EN"
      "V* env, SPVM_VALUE* stack, const char* basic_type_name, const char* method_name);\012  SPVM_NATIVE_METH"
      "OD* (*get_class_method)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* m"
      "ethod_name);\012  SPVM_NATIVE_METHOD* (*get_instance_method_static)(SPVM_ENV* env, SPVM_VALUE* stack, c"
      "onst char* basic_type_name, const char* method_name);\012  SPVM_NATIVE_METHOD* (*get_instance_method)(S"
      "PVM_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, in"
      "t32_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, c"
      "onst char* file, int32_t line);\012  void (*call_instance_method_static_by_name)(SPVM_ENV* env, SPVM_VA"
      "LUE* 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_method_by_name)("
      "SPVM_ENV* env, SPVM_VALUE* stack, const char* method_name, int32_t args_width, int32_t* error_id, co"
      "nst char* func_name, const char* file, int32_t line);\012  SPVM_OBJ* (*new_object_no_mortal)(SPVM_ENV* "
      "env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic_type);\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, int32_t* error_id, const char* func_name, con"
      "st char* file, int32_t line);\012  SPVM_OBJ* (*new_pointer_object_no_mortal)(SPVM_ENV* env, SPVM_VALUE*"
      " stack, SPVM_NATIVE_BASIC_TYPE* basic_type, void* pointer);\012  SPVM_OBJ* (*new_pointer_object)(SPVM_E"
      "NV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic_type, void* pointer);\012  SPVM_OBJ* (*new_po"
      "inter_object_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, void* pointer, "
      "int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  void* (*get_pointer)(SP"
      "VM_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* (*new_string_nolen_no_mortal)(SPVM_ENV* env, SP"
      "VM_VALUE* stack, const char* bytes);\012  SPVM_OBJ* (*new_string_nolen)(SPVM_ENV* env, SPVM_VALUE* stac"
      "k, const char* bytes);\012  SPVM_OBJ* (*new_string_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, const c"
      "har* bytes, int32_t length);\012  SPVM_OBJ* (*new_string)(SPVM_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, i"
      "nt32_t length);\012  SPVM_OBJ* (*new_byte_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);\012  S"
      "PVM_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, int32_t length);\012  SPVM_OBJ* (*new_int_array_n"
      "o_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);\012  SPVM_OBJ* (*new_int_array)(SPVM_ENV* "
      "env, SPVM_VALUE* stack, int32_t length);\012  SPVM_OBJ* (*new_long_array_no_mortal)(SPVM_ENV* env, SPVM"
      "_VALUE* stack, int32_t length);\012  SPVM_OBJ* (*new_long_array)(SPVM_ENV* env, SPVM_VALUE* stack, int3"
      "2_t length);\012  SPVM_OBJ* (*new_float_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t leng"
      "th);\012  SPVM_OBJ* (*new_float_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);\012  SPVM_OBJ* ("
      "*new_double_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);\012  SPVM_OBJ* (*new_do"
      "uble_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);\012  SPVM_OBJ* (*new_object_array_no_mor"
      "tal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t length);\012  SPVM_O"
      "BJ* (*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_ENV* env, SPVM_VALUE* stack, const char* bas"
      "ic_type_name, int32_t length, int32_t* error_id, const char* func_name, const char* file, int32_t li"
      "ne);\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* (*new_muldim_array)(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_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_array)(SPVM_ENV* env, SPVM_VALUE* stack, SPV"
      "M_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, int32_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  SPVM_OBJ* (*new_array_proto)(SPVM_ENV* env, S"
      "PVM_VALUE* stack, SPVM_OBJ* array, int32_t length);\012  int32_t (*length)(SPVM_ENV* env, SPVM_VALUE* s"
      "tack, SPVM_OBJ* object);\012  int8_t* (*get_elems_byte)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* arr"
      "ay);\012  int16_t* (*get_elems_short)(SPVM_ENV* env, SPVM_VALUE* 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_VALU"
      "E* 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, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t "
      "index);\012  SPVM_OBJ* (*get_elem_string)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t in"
      "dex);\012  void (*set_elem_object)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, SP"
      "VM_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)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* s"
      "tring_object);\012  int32_t (*get_bool_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* bool_o"
      "bject);\012  SPVM_OBJ* (*concat_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* string1, SPVM_OB"
      "J* string2);\012  SPVM_OBJ* (*concat)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* string1, SPVM_OBJ* st"
      "ring2);\012  void (*shorten)(SPVM_ENV* env, SPVM_VALUE* stack, 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_onl"
      "y)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* string);\012  void (*print)(SPVM_ENV* env, SPVM_VALUE* s"
      "tack, 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* (*du"
      "mp)(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_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPV"
      "M_OBJ* object);\012  SPVM_OBJ* (*copy)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  const cha"
      "r* (*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_version_string)(SPVM_ENV* env, SPVM_VALUE* s"
      "tack, 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, cons"
      "t char* exception_format, const char* func_name, const char* file, int32_t line, ...);\012  SPVM_OBJ* ("
      "*get_exception)(SPVM_ENV* env, SPVM_VALUE* stack);\012  int32_t (*set_exception)(SPVM_ENV* env, SPVM_VA"
      "LUE* 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_tra"
      "ce)(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  int32_t (*is_pointer_class)(SPVM_ENV* env, SP"
      "VM_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, SPVM_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_ar"
      "ray)(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, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NAT"
      "IVE_BASIC_TYPE* basic_type, int32_t type_dimension);\012  int32_t (*is_type_by_name)(SPVM_ENV* env, SPV"
      "M_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* array, SPVM_OBJ* element);\012  int32_t (*get_ele"
      "m_size)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array);\012  SPVM_OBJ* (*get_type_name_no_mortal)(S"
      "PVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  SPVM_OBJ* (*get_type_name)(SPVM_ENV* env, SPVM"
      "_VALUE* stack, SPVM_OBJ* object);\012  SPVM_OBJ* (*get_compile_type_name_no_mortal)(SPVM_ENV* env, SPVM"
      "_VALUE* stack, const char* basic_type_name, int32_t type_dimension, int32_t type_flag);\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 mortal_stack_top);\012  int32_t (*push_mortal)("
      "SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int32_t (*weaken)(SPVM_ENV* env, SPVM_VALUE* "
      "stack, SPVM_OBJ** object_address);\012  int32_t (*isweak)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** "
      "object);\012  void (*unweaken)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** object_address);\012  SPVM_OBJ"
      "* (*strerror_string)(SPVM_ENV* env, SPVM_VALUE* stack, int32_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 errno_value, int32_t length);\012  const char* (*"
      "strerror_nolen)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t errno_value);\012  int32_t (*is_binary_compat"
      "ible_object)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int32_t (*is_binary_compatible_s"
      "tack)(SPVM_ENV* env, SPVM_VALUE* stack);\012  SPVM_VALUE* (*new_stack)(SPVM_ENV* env);\012  void (*free_st"
      "ack)(SPVM_ENV* env, SPVM_VALUE* stack);\012  SPVM_OBJ* (*get_field_object_defined_and_has_pointer_by_na"
      "me)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, int32_t* error_id, c"
      "onst char* func_name, const char* file_name, int32_t line);\012  SPVM_OBJ** (*get_field_object_ref)(SPV"
      "M_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field);\012  SPVM_OBJ** (*get_field"
      "_object_ref_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, int"
      "32_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* basic_type_name);\012  void (*assign_object)(SPVM"
      "_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** dist_ref, SPVM_OBJ* object);\012  SPVM_OBJ* (*new_string_array"
      "_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);\012  void* (*new_memory_block)(SPVM_ENV*"
      " env, SPVM_VALUE* stack, size_t size);\012  void (*free_memory_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  void (*warn)(SPVM_ENV* env, SPVM_VALUE* stac"
      "k, SPVM_OBJ* string, const char* func_name, const char* file, int32_t line);\012  FILE* (*spvm_stdin)(S"
      "PVM_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)(S"
      "PVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* element, int32_t length);\012  SPVM_OBJ* (*new_array_proto_e"
      "lement)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* element, int32_t length);\012  int32_t (*get_byte_o"
      "bject_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, S"
      "PVM_VALUE* stack, SPVM_OBJ* float_object);\012  double (*get_double_object_value)(SPVM_ENV* env, SPVM_V"
      "ALUE* stack, SPVM_OBJ* double_object);\012  int32_t (*no_free)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_O"
      "BJ* object);\012  void (*set_no_free)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t no_fr"
      "ee);\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_V"
      "ALUE* stack, SPVM_OBJ* object);\012  int32_t (*get_seed)(SPVM_ENV* env, SPVM_VALUE* stack);\012  void (*se"
      "t_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, S"
      "PVM_VALUE* stack, int32_t warning);\012  void (*destroy_cache_class_vars)(SPVM_ENV* env, SPVM_VALUE* st"
      "ack);\012  SPVM_VALUE* (*new_stack_with_all_method_call_permitted)(SPVM_ENV* env);\012  int32_t (*call_ins"
      "tance_method_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, const char* method_name, int32_t args_widt"
      "h);\012  int32_t (*call_instance_method)(SPVM_ENV* env, SPVM_VALUE* stack, const char* method_name, int"
      "32_t args_width);\012  int32_t (*call_method_no_mortal_no_check_args)(SPVM_ENV* env, SPVM_VALUE* stack,"
      " SPVM_NATIVE_METHOD* method, int32_t args_width, const char* 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* sta"
      "ck, const char* method_name, int32_t args_width, const char* decl_args_signature, const char* func_n"
      "ame, const char* file_name, int32_t line);\012  void (*enable_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_obje"
      "ct_array)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int32_t (*exists_field)(SPVM_ENV* e"
      "nv, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field);\012  int32_t (*exists_field_by_name"
      ")(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, int32_t* error_id, con"
      "st char* func_name, const char* file, int32_t line);\012  void (*delete_field)(SPVM_ENV* env, SPVM_VALU"
      "E* 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_name, int32_t* error_id, const char* func_na"
      "me, const char* file, int32_t line);\012  void (*make_fixed_length)(SPVM_ENV* env, SPVM_VALUE* stack, S"
      "PVM_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_E"
      "NV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t capacity);\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_t"
      "o_short)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t* error_id);\012  int32_t (*numeric"
      "_object_to_int)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* 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  fl"
      "oat (*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, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t*"
      " error_id);\012  SPVM_OBJ* (*numeric_object_to_string_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM"
      "_OBJ* object, int32_t* error_id);\012  SPVM_OBJ* (*numeric_object_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_VAL"
      "UE* stack, SPVM_OBJ* object);\012  void (*say_stderr)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* strin"
      "g);\012  int32_t (*get_call_depth)(SPVM_ENV* env, SPVM_VALUE* stack);\012  SPVM_VALUE* (*get_caller_info_s"
      "tack)(SPVM_ENV* env, SPVM_VALUE* stack);\012  int32_t (*get_caller_info_stack_record_size)(SPVM_ENV* en"
      "v, SPVM_VALUE* stack);\012  SPVM_NATIVE_METHOD* (*get_current_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_exceptio"
      "n_message_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_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* env, SPVM_VALUE* stack, SPVM_OBJ* obj_string"
      ", int32_t* error_id);\012  void (*set_byte_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* by"
      "te_object, int8_t value);\012  void (*set_short_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OB"
      "J* short_object, int16_t value);\012  void (*set_int_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, SP"
      "VM_OBJ* int_object, int32_t value);\012  void (*set_long_object_value)(SPVM_ENV* env, SPVM_VALUE* stack"
      ", SPVM_OBJ* long_object, int64_t value);\012  void (*set_float_object_value)(SPVM_ENV* env, SPVM_VALUE*"
      " stack, SPVM_OBJ* float_object, float value);\012  void (*set_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  SPVM_API_COMPILER* compiler;\012  SPVM_API_CLAS"
      "S_FILE* class_file;\012  SPVM_API_RUNTIME* runtime;\012  SPVM_API_BASIC_TYPE* basic_type;\012  SPVM_API_CLASS"
      "_VAR* class_var;\012  SPVM_API_FIELD* field;\012  SPVM_API_METHOD* method;\012  SPVM_API_ARG* arg;\012  SPVM_API"
      "_TYPE* type;\012  SPVM_API_INTERNAL* internal;\012  SPVM_API_MUTEX* mutex;\012};\012\012struct spvm_api_allocator {"
      "\012  SPVM_NATIVE_ALLOCATOR* (*new_instance)(void);\012  void (*free_instance)(SPVM_NATIVE_ALLOCATOR* allo"
      "cator);\012};\012\012struct spvm_api_arg {\012  const char* (*get_name)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIV"
      "E_ARG* arg);\012  int32_t (*get_index)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_ARG* arg);\012  SPVM_NATI"
      "VE_BASIC_TYPE* (*get_basic_type)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_ARG* arg);\012  int32_t (*ge"
      "t_type_dimension)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_ARG* arg);\012  int32_t (*get_type_flag)(SP"
      "VM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_ARG* arg);\012  int32_t (*get_stack_index)(SPVM_NATIVE_RUNTIME*"
      " runtime, SPVM_NATIVE_ARG* arg);\012  SPVM_NATIVE_METHOD* (*get_current_method)(SPVM_NATIVE_RUNTIME* ru"
      "ntime, SPVM_NATIVE_ARG* arg);\012  int32_t (*is_optional)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_ARG"
      "* arg);\012  SPVM_VALUE (*get_default_value)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_ARG* arg);\012};\012\012s"
      "truct spvm_api_basic_type {\012  const char* (*get_name)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASI"
      "C_TYPE* basic_type);\012  int32_t (*get_id)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic"
      "_type);\012  int32_t (*get_category)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);"
      "\012  SPVM_NATIVE_BASIC_TYPE* (*get_parent)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic"
      "_type);\012  const char* (*get_version_string)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* ba"
      "sic_type);\012  const char* (*get_class_dir)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basi"
      "c_type);\012  const char* (*get_class_rel_file)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* b"
      "asic_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, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  SPVM_NA"
      "TIVE_CLASS_VAR* (*get_class_var_by_index)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basi"
      "c_type, int32_t class_var_index);\012  SPVM_NATIVE_CLASS_VAR* (*get_class_var_by_name)(SPVM_NATIVE_RUNT"
      "IME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type, const char* class_var_name);\012  int32_t (*get_class"
      "_vars_length)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  SPVM_NATIVE_FIELD"
      "* (*get_field_by_index)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t fi"
      "eld_index);\012  SPVM_NATIVE_FIELD* (*get_field_by_name)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASI"
      "C_TYPE* basic_type, const char* field_name);\012  int32_t (*get_fields_length)(SPVM_NATIVE_RUNTIME* run"
      "time, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  SPVM_NATIVE_METHOD* (*get_method_by_index)(SPVM_NATIVE_"
      "RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t method_index);\012  SPVM_NATIVE_METHOD* ("
      "*get_method_by_name)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type, const char* m"
      "ethod_name);\012  int32_t (*get_methods_length)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* b"
      "asic_type);\012  SPVM_NATIVE_BASIC_TYPE* (*get_anon_basic_type_by_index)(SPVM_NATIVE_RUNTIME* runtime, "
      "SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t anon_basic_type_index);\012  int32_t (*get_anon_basic_types"
      "_length)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  int32_t (*has_interfac"
      "e)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type, SPVM_NATIVE_BASIC_TYPE* interfa"
      "ce_basic_type);\012  int32_t (*is_super_class)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* di"
      "st_basic_type, SPVM_NATIVE_BASIC_TYPE* src_basic_type);\012  const char* (*get_file)(SPVM_NATIVE_RUNTIM"
      "E* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  SPVM_NATIVE_RUNTIME* (*get_current_runtime)(SPVM_"
      "NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\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_NATIVE_BASIC_TYPE* basic_type);\012  int32_t (*get"
      "_monitor_var_type)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t* ret_ba"
      "sic_type_id, int32_t* ret_dimension, int32_t* ret_flag);\012  int32_t (*has_monitor_var)(SPVM_NATIVE_RU"
      "NTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  int32_t (*is_generated_from_anon_method)(SPVM"
      "_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012};\012\012struct spvm_api_class_file {\012  co"
      "nst char* (*get_class_name)(SPVM_NATIVE_COMPILER* compiler, SPVM_NATIVE_CLASS_FILE* class_file);\012  c"
      "onst char* (*get_file)(SPVM_NATIVE_COMPILER* compiler, SPVM_NATIVE_CLASS_FILE* class_file);\012  void ("
      "*set_file)(SPVM_NATIVE_COMPILER* compiler, SPVM_NATIVE_CLASS_FILE* class_file, const char* file);\012  "
      "const char* (*get_dir)(SPVM_NATIVE_COMPILER* compiler, SPVM_NATIVE_CLASS_FILE* class_file);\012  void ("
      "*set_dir)(SPVM_NATIVE_COMPILER* compiler, SPVM_NATIVE_CLASS_FILE* class_file, const char* dir);\012  co"
      "nst char* (*get_rel_file)(SPVM_NATIVE_COMPILER* compiler, SPVM_NATIVE_CLASS_FILE* class_file);\012  voi"
      "d (*set_rel_file)(SPVM_NATIVE_COMPILER* compiler, SPVM_NATIVE_CLASS_FILE* class_file, const char* re"
      "l_file);\012  const char* (*get_content)(SPVM_NATIVE_COMPILER* compiler, SPVM_NATIVE_CLASS_FILE* class_"
      "file);\012  void (*set_content)(SPVM_NATIVE_COMPILER* compiler, SPVM_NATIVE_CLASS_FILE* class_file, con"
      "st char* content);\012  int32_t (*get_content_length)(SPVM_NATIVE_COMPILER* compiler, SPVM_NATIVE_CLASS"
      "_FILE* class_file);\012  void (*set_content_length)(SPVM_NATIVE_COMPILER* compiler, SPVM_NATIVE_CLASS_F"
      "ILE* 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* class_var);\012  int32_t (*get_index)(SPVM_NATIVE_"
      "RUNTIME* runtime, SPVM_NATIVE_CLASS_VAR* class_var);\012  SPVM_NATIVE_BASIC_TYPE* (*get_basic_type)(SPV"
      "M_NATIVE_RUNTIME* runtime, SPVM_NATIVE_CLASS_VAR* class_var);\012  int32_t (*get_type_dimension)(SPVM_N"
      "ATIVE_RUNTIME* runtime, SPVM_NATIVE_CLASS_VAR* class_var);\012  int32_t (*get_type_flag)(SPVM_NATIVE_RU"
      "NTIME* runtime, SPVM_NATIVE_CLASS_VAR* class_var);\012  SPVM_NATIVE_BASIC_TYPE* (*get_current_basic_typ"
      "e)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_CLASS_VAR* class_var);\012  int32_t (*is_cache)(SPVM_NATIV"
      "E_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* co"
      "mpiler, int32_t start_line);\012  const char* (*get_start_file)(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 char* (*get_include_dir )(SPVM_NATIVE_COMPILE"
      "R* compiler, int32_t index);\012  void (*add_include_dir)(SPVM_NATIVE_COMPILER* compiler, const char* i"
      "nclude_dir);\012  void (*clear_include_dirs)(SPVM_NATIVE_COMPILER* compiler);\012  void (*add_class_file)("
      "SPVM_NATIVE_COMPILER* compiler, const char* class_name);\012  void (*delete_class_file)(SPVM_NATIVE_COM"
      "PILER* compiler, const char* class_name);\012  SPVM_NATIVE_CLASS_FILE* (*get_class_file)(SPVM_NATIVE_CO"
      "MPILER* compiler, const char* class_name);\012  int32_t (*compile)(SPVM_NATIVE_COMPILER* compiler, cons"
      "t char* basic_type_name);\012  const char* (*get_error_message)(SPVM_NATIVE_COMPILER* compiler, int32_t"
      " index);\012  int32_t (*get_error_messages_length)(SPVM_NATIVE_COMPILER* compiler);\012  SPVM_NATIVE_RUNTI"
      "ME* (*get_runtime)(SPVM_NATIVE_COMPILER* compiler);\012  void (*prepend_include_dir)(SPVM_NATIVE_COMPIL"
      "ER* compiler, const char* include_dir);\012  int32_t (*compile_anon_class)(SPVM_NATIVE_COMPILER* compil"
      "er, const char* source, const char** anon_basic_type_name_ptr);\012  int32_t (*compile_script)(SPVM_NAT"
      "IVE_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  int"
      "32_t (*get_index)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_FIELD* field);\012  int32_t (*get_offset)(S"
      "PVM_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* runtim"
      "e, SPVM_NATIVE_FIELD* field);\012  SPVM_NATIVE_BASIC_TYPE* (*get_current_basic_type)(SPVM_NATIVE_RUNTIM"
      "E* runtime, SPVM_NATIVE_FIELD* field);\012  int32_t (*get_exists_offset)(SPVM_NATIVE_RUNTIME* runtime, "
      "SPVM_NATIVE_FIELD* field);\012  int32_t (*get_exists_bit)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_FIE"
      "LD* field);\012};\012\012struct spvm_api_method {\012  const char* (*get_name)(SPVM_NATIVE_RUNTIME* runtime, SPV"
      "M_NATIVE_METHOD* method);\012  int32_t (*get_index)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* m"
      "ethod);\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_M"
      "ETHOD* method);\012  int32_t (*get_return_type_flag)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* "
      "method);\012  SPVM_NATIVE_ARG* (*get_arg_by_index)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* me"
      "thod, int32_t arg_index);\012  int32_t (*get_args_length)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_MET"
      "HOD* 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_NA"
      "TIVE_METHOD* method);\012  SPVM_NATIVE_OPCODE* (*get_opcode_by_index)(SPVM_NATIVE_RUNTIME* runtime, SPV"
      "M_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_class_method)(SPVM_NATIVE_RUNTIME* runtime, SP"
      "VM_NATIVE_METHOD* method);\012  int32_t (*is_anon)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* me"
      "thod);\012  int32_t (*is_native)(SPVM_NATIVE_RUNTIME* runtime, 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_int_vars_width)(SPVM_NATIVE_RUNTIME* runtime"
      ", SPVM_NATIVE_METHOD* method);\012  int32_t (*get_long_vars_width)(SPVM_NATIVE_RUNTIME* runtime, SPVM_N"
      "ATIVE_METHOD* method);\012  int32_t (*get_float_vars_width)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_M"
      "ETHOD* method);\012  int32_t (*get_double_vars_width)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD*"
      " method);\012  int32_t (*get_object_vars_width)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* metho"
      "d);\012  int32_t (*get_ref_vars_width)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int"
      "32_t (*get_mortal_stack_length)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  void* ("
      "*get_native_address)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  void (*set_native_"
      "address)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method, void* address);\012  void* (*get_pre"
      "compile_address)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  void (*set_precompile_"
      "address)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method, void* address);\012  int32_t (*is_pr"
      "ecompile_fallback)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  void (*set_is_precom"
      "pile_fallback)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method, int32_t is_precompile_fallb"
      "ack);\012  const char* (*get_args_signature)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);"
      "\012  const char* (*get_abs_name)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012};\012\012struct"
      " spvm_api_runtime {\012  int32_t (*get_object_data_offset)(SPVM_NATIVE_RUNTIME* runtime);\012  int32_t (*g"
      "et_object_ref_count_offset)(SPVM_NATIVE_RUNTIME* runtime);\012  int32_t (*get_object_length_offset)(SPV"
      "M_NATIVE_RUNTIME* runtime);\012  SPVM_NATIVE_BASIC_TYPE* (*get_basic_type_by_id)(SPVM_NATIVE_RUNTIME* r"
      "untime, int32_t basic_type_id);\012  SPVM_NATIVE_BASIC_TYPE* (*get_basic_type_by_name)(SPVM_NATIVE_RUNT"
      "IME* runtime, const char* basic_type_name);\012  int32_t (*get_basic_types_length)(SPVM_NATIVE_RUNTIME*"
      " runtime);\012  void (*build_precompile_class_source)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_STRING_"
      "BUFFER* string_buffer, SPVM_NATIVE_BASIC_TYPE* module_basic_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_NATIVE_RUNTIME* runtime);\012  void (*set_compile"
      "r)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_COMPILER* compiler);\012  FILE* (*get_spvm_stdin)(SPVM_NAT"
      "IVE_RUNTIME* runtime);\012  FILE* (*get_spvm_stdout)(SPVM_NATIVE_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* runtime);\012  void* method_begin_cb;\012  void* met"
      "hod_end_cb;\012  void* object_data_offset;\012  void* object_length_offset;\012  void* object_capacity_offset"
      ";\012  void* stack_index_call_depth;\012  void* stack_index_caller_info_stack;\012  void* stack_index_caller_"
      "info_stack_record_size;\012};\012\012struct spvm_api_mutex {\012  SPVM_NATIVE_MUTEX* (*new_instance)(SPVM_ENV* e"
      "nv, 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* mutex);\012  void (*reader_lock)(SPVM_ENV* env, "
      "SPVM_VALUE* stack, SPVM_NATIVE_MUTEX* mutex);\012  void (*reader_unlock)(SPVM_ENV* env, SPVM_VALUE* sta"
      "ck, SPVM_NATIVE_MUTEX* mutex);\012};\012\012struct spvm_api_string_buffer {\012  SPVM_NATIVE_STRING_BUFFER* (*ne"
      "w_instance)(SPVM_NATIVE_ALLOCATOR* allocator, int32_t capacity);\012  void (*free_instance)(SPVM_NATIVE"
      "_STRING_BUFFER* string_buffer);\012  const char* (*get_string)(SPVM_NATIVE_STRING_BUFFER* string_buffer"
      ");\012  int32_t (*get_length)(SPVM_NATIVE_STRING_BUFFER* string_buffer);\012};\012\012struct spvm_api_internal {"
      "\012  int32_t (*get_ref_count)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  void (*inc_ref_co"
      "unt)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  void (*dec_ref_count)(SPVM_ENV* env, SPV"
      "M_VALUE* stack, SPVM_OBJ* object);\012  char* (*get_stack_tmp_buffer)(SPVM_ENV* env, SPVM_VALUE* stack)"
      ";\012  void (*leave_scope_local)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** object_vars, int32_t* mor"
      "tal_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, SPVM_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_m"
      "emset)(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* en"
      "v, 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  double (*c_strtod)(SPVM_ENV* env, SPVM_VALUE* "
      "stack, const char* str, char** endptr);\012  int (*c_fputs)(SPVM_ENV* env, SPVM_VALUE* stack, const cha"
      "r* s, void* stream);\012  int (*c_fgetc)(SPVM_ENV* env, SPVM_VALUE* stack, void* stream);\012  int (*c_snp"
      "rintf_len)(SPVM_ENV* env, SPVM_VALUE* stack, char* str, size_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_fl"
      "ag, SPVM_NATIVE_BASIC_TYPE* src_basic_type, int32_t src_type_dimension, int32_t src_type_flag);\012  in"
      "t32_t (*get_type_width)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t ty"
      "pe_dimension, int32_t type_flag);\012  int32_t (*is_object_type)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NAT"
      "IVE_BASIC_TYPE* basic_type, int32_t type_dimension, int32_t type_flag);\012  int32_t (*is_any_object_ty"
      "pe)(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_NATIVE_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_type, int32_t type_dimension, int32_t type_f"
      "lag);\012  int32_t (*is_numeric_type)(SPVM_NATIVE_RUNTIME* runtime, 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_dimension, int32_t type_flag);\012};\012\012enum {\012  SPVM_"
      "NATIVE_C_BASIC_TYPE_ID_UNKNOWN,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_UNDEF,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_V"
      "OID,\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_NATIVE_C_BASIC_TYPE_ID_FLOAT,\012  SPVM_NATIVE_"
      "C_BASIC_TYPE_ID_DOUBLE,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_STRING,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_ANY_OBJE"
      "CT,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_BYTE_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_SHORT_CLASS,\012  SPVM_NATI"
      "VE_C_BASIC_TYPE_ID_INT_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_LONG_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_I"
      "D_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_NATIVE_C_BASIC_TYPE_ID_ERROR_COMPILE_CLASS,\012  S"
      "PVM_NATIVE_C_BASIC_TYPE_ID_SPVM_CLASS,\012  SPVM_NATIVE_C_BASIC_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_CLAS"
      "S,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_CALLER_INFO_CLASS,\012  SPVM_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_BASIC_TYPE_CATEGORY_NUMERIC,\012  SPVM_NATIVE_C"
      "_BASIC_TYPE_CATEGORY_MULNUM,\012  SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_STRING,\012  SPVM_NATIVE_C_BASIC_TYPE_"
      "CATEGORY_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_INTERFACE,\012  SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_A"
      "NY_OBJECT,\012};\012\012enum {\012  SPVM_NATIVE_C_TYPE_FLAG_REF = 1,\012  SPVM_NATIVE_C_TYPE_FLAG_MUTABLE = 2,\012  SP"
      "VM_NATIVE_C_TYPE_FLAG_VARARGS = 4,\012};\012\012enum {\012  SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE = 512,\012};\012\012// Th"
      "ese functions are linked only by SPVM itself,\012// so native classes cannot use these functions.\012SPVM_"
      "ENV* SPVM_NATIVE_new_env(void);\012\012#endif\012\012/* spvm_implement.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 includ"
      "e any header files.\012// SPVM precompiled code will be executed in a security sandbox via JIT in the f"
      "uture.\012\012\012\012\012\012\012\012\012\012\012enum {\012  SPVM_IMPLEMENT_C_EXCEPTION_ASSIGN_NOT_SATISFY_ASSIGNMENT_REQUIREMENT,\012  SP"
      "VM_IMPLEMENT_C_EXCEPTION_ASSIGN_READ_ONLY_STRING_TO_MUTABLE_TYPE,\012  SPVM_IMPLEMENT_C_EXCEPTION_DIVID"
      "E_ZERO,\012  SPVM_IMPLEMENT_C_EXCEPTION_STRING_CONCAT_LEFT_UNDEFINED,\012  SPVM_IMPLEMENT_C_EXCEPTION_STRI"
      "NG_CONCAT_RIGHT_UNDEFINED,\012  SPVM_IMPLEMENT_C_EXCEPTION_NEW_OBJECT_FAILED,\012  SPVM_IMPLEMENT_C_EXCEPT"
      "ION_NEW_ARRAY_FAILED,\012  SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRRAY_LENGTH_SMALL,\012  SPVM_IMPLEMENT_C_EXCEP"
      "TION_NEW_STRING_FAILED,\012  SPVM_IMPLEMENT_C_EXCEPTION_NEW_STRING_LEN_FAILED,\012  SPVM_IMPLEMENT_C_EXCEP"
      "TION_NEW_STRING_LEN_LENGTH_SMALL,\012  SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED,\012  SPVM_IMPLEMENT_C_E"
      "XCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE,\012  SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ASSIGN_NOT_SATISFY_"
      "ASSIGNMENT_REQUIREMENT,\012  SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED,\012  SPVM_IMPLEME"
      "NT_C_EXCEPTION_WEAKEN_BACK_REFERENCE_ALLOCATION_FAILED,\012  SPVM_IMPLEMENT_C_EXCEPTION_ERROR_BASIC_TYP"
      "E_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_METHOD_NOT_FOUND,\012  SPVM_IMPLEMENT_C_EXCEPTI"
      "ON_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_STRIN"
      "G_LITERALS[] = {\012  \"An assignment failed. %s type cannot be assigned to %s type.\",\012  \"A read-only st"
      "ring 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 failed.\",\012  \"A new operator to create an arra"
      "y failed. Memory allocation failed.\",\012  \"A new operator to create an array failed. The length must b"
      "e a non-negative integer.\",\012  \"A string creation failed. Memory allocation failed.\",\012  \"The new_stri"
      "ng_len operator failed. Memory allocation failed.\",\012  \"The new_string_len operator failed. The lengt"
      "h of the string must be a non-negative integer.\",\012  \"An array access failed. The array must be defin"
      "ed.\",\012  \"An array access failed. The index is out of range.\",\012  \"An array element set failed. %s typ"
      "e cannot be assigned to %s type.\",\012  \"An field access failed. The invocant must be defined.\",\012  \"The"
      " weaken operator failed. The memory allocation for the weaken back reference failed.\",\012  \"%s basic t"
      "ype 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 undefined value.\",\012  \"An instance method call fail"
      "ed. %s#%s method is not found.\",\012  \"An reference access failed. The reference must be defined.\",\012};\012"
      "\012enum {\012  SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_EQ,\012  SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_NE,\012  SP"
      "VM_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)(SP"
      "VM_OBJ*)object + (intptr_t)env->api->runtime->object_data_offset))\012#define GET_LENGTH(env, stack, ob"
      "ject) (*(int32_t*)((intptr_t)(SPVM_OBJ*)object + (intptr_t)env->api->runtime->object_length_offset))"
      "\012#define GET_CAPACITY(env, stack, object) (*(int32_t*)((intptr_t)(SPVM_OBJ*)object + (intptr_t)env->"
      "api->runtime->object_capacity_offset))\012\012static inline SPVM_NATIVE_BASIC_TYPE* SPVM_IMPLEMENT_GET_BAS"
      "IC_TYPE_BY_NAME(SPVM_ENV* env, SPVM_VALUE* stack, const char* 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  i"
      "f (!basic_type) {\012    SPVM_VALUE args[1];\012    args[0].address = (void*)basic_type_name;\012    env->api"
      "->internal->c_snprintf_len(env, stack, tmp_buffer, SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE, SPVM_IMPLEME"
      "NT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ERROR_BASIC_TYPE_NOT_FOUND], args, 1);\012    \012    SPVM_O"
      "BJ* 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  }\012  \012  return basic_t"
      "ype;\012}\012\012static inline SPVM_NATIVE_FIELD* SPVM_IMPLEMENT_GET_FIELD_BY_NAME(SPVM_ENV* env, SPVM_VALUE*"
      " stack, const char* basic_type_name, const char* field_name, int32_t* error_id) {\012  \012  char* tmp_buf"
      "fer = 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_STACK_TMP_BUFFER_SIZE, SPVM_IMPLEMENT"
      "_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ERROR_FIELD_NOT_FOUND], args, 2);\012    \012    SPVM_OBJ* exc"
      "eption = 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  retu"
      "rn field;\012}\012\012static inline int32_t SPVM_IMPLEMENT_GET_FIELD_OFFSET_BY_NAME(SPVM_ENV* env, SPVM_VALUE"
      "* stack, const char* basic_type_name, const char* field_name, int32_t* error_id) {\012  \012  char* tmp_bu"
      "ffer = env->api->internal->get_stack_tmp_buffer(env, stack);\012  \012  SPVM_NATIVE_FIELD* field = env->ge"
      "t_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_STACK_TMP_BUFFER_SIZE, SPVM_IMPLEMEN"
      "T_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ERROR_FIELD_NOT_FOUND], args, 2);\012    \012    SPVM_OBJ* ex"
      "ception = 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->runtime, field);\012  \012  return field_offset;\012}\012\012sta"
      "tic 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, int32_t* error_id) {\012  \012  char* tmp_buffer = en"
      "v->api->internal->get_stack_tmp_buffer(env, stack);\012  \012  SPVM_NATIVE_FIELD* field = env->get_field_s"
      "tatic(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_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, excepti"
      "on);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    return -1;\012  }\012  \012  int32_t field_"
      "exists_offset = env->api->field->get_exists_offset(env->runtime, field);\012  \012  return field_exists_of"
      "fset;\012}\012\012static inline int32_t SPVM_IMPLEMENT_GET_FIELD_EXISTS_BIT_BY_NAME(SPVM_ENV* env, SPVM_VALUE"
      "* stack, const char* basic_type_name, const char* field_name, int32_t* error_id) {\012  \012  char* tmp_bu"
      "ffer = env->api->internal->get_stack_tmp_buffer(env, stack);\012  \012  SPVM_NATIVE_FIELD* field = env->ge"
      "t_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_STACK_TMP_BUFFER_SIZE, SPVM_IMPLEMEN"
      "T_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ERROR_FIELD_NOT_FOUND], args, 2);\012    \012    SPVM_OBJ* ex"
      "ception = 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_IMPLEMENT_GET_CLASS_VAR_BY_NAME(SPVM_ENV* env, SP"
      "VM_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_buffer(env, stack);\012  \012  SPVM_NATIVE_CLASS_VAR*"
      " class_var = env->get_class_var(env, stack, basic_type_name, class_var_name);\012  \012  if (!class_var) {"
      "\012    SPVM_VALUE args[2];\012    args[0].address = (void*)basic_type_name;\012    args[1].address = (void*)"
      "class_var_name;\012    env->api->internal->c_snprintf_len(env, stack, tmp_buffer, SPVM_NATIVE_C_STACK_T"
      "MP_BUFFER_SIZE, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ERROR_CLASS_VAR_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_CLA"
      "SS;\012  }\012  \012  return class_var;\012}\012\012static inline SPVM_NATIVE_METHOD* SPVM_IMPLEMENT_GET_METHOD_BY_NAM"
      "E(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* method_name, int32_t* e"
      "rror_id) {\012  \012  char* tmp_buffer = env->api->internal->get_stack_tmp_buffer(env, stack);\012  \012  SPVM_N"
      "ATIVE_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*)basic_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_IMPLEMENT_C_EXCEPTION_ERROR_METHOD_NOT_FOUND], arg"
      "s, 2);\012    \012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, tmp_buffer);\012    e"
      "nv->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_IMPLEMENT_MOVE_OBJECT_UNDEF(SPVM_ENV* env, SPVM_VA"
      "LUE* stack, SPVM_OBJ** dist_address) {\012  env->assign_object(env, stack, dist_address, NULL);\012}\012\012stat"
      "ic 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 << exists_bit);\012}\012\012static inline void SPVM_IMPLE"
      "MENT_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*)(GET_DATA_ADDRESS(env, stack, object) + exists"
      "_offset);\012  \012  *block &= ~(1 << exists_bit);\012}\012\012static inline int32_t SPVM_IMPLEMENT_GET_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  int32_t f"
      "lag = !!(*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, m"
      "ortal_stack_top, object_vars_index) (mortal_stack_typed_var_index[mortal_stack_top++] = object_vars_"
      "index)\012\012static inline void SPVM_IMPLEMENT_LEAVE_SCOPE(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** o"
      "bject_vars, int32_t* mortal_stack_typed_var_index, int32_t* mortal_stack_top_ptr, int32_t* mortal_st"
      "ack_tops, int32_t mortal_stack_tops_index) {\012  if (*mortal_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, mortal_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_ADD_FLOAT(out, in1, in2) (out = in1 + in2)\012#"
      "define SPVM_IMPLEMENT_ADD_DOUBLE(out, in1, in2) (out = in1 + in2)\012\012#define SPVM_IMPLEMENT_SUBTRACT_I"
      "NT(out, in1, in2) (out = in1 - in2)\012#define SPVM_IMPLEMENT_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(out, in1, in2) (out = in1 * in2)\012#define SPV"
      "M_IMPLEMENT_MULTIPLY_FLOAT(out, in1, in2) (out = in1 * in2)\012#define SPVM_IMPLEMENT_MULTIPLY_DOUBLE(o"
      "ut, in1, in2) (out = in1 * in2)\012\012#define SPVM_IMPLEMENT_DIVIDE_FLOAT(out, in1, in2) (out = in1 / in2"
      ")\012#define SPVM_IMPLEMENT_DIVIDE_DOUBLE(out, in1, in2) (out = in1 / in2)\012\012static inline void SPVM_IMP"
      "LEMENT_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    SPVM_OBJ* exception = env->new_string_nolen_"
      "no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_DIVIDE_ZERO]);\012    e"
      "nv->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 void SPVM_IMPLEMENT_DIVIDE_LONG(SPVM_ENV* env"
      ", SPVM_VALUE* stack, int64_t* out, int64_t in1, int64_t in2, int32_t* error_id) {\012  if (__builtin_ex"
      "pect(in2 == 0, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPL"
      "EMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_DIVIDE_ZERO]);\012    env->set_exception(env, stack, e"
      "xception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = in1 / in"
      "2;\012  }\012}\012\012// (\222\206\227\252: DIVIDE_FLOAT, DOUBLE \202\315\202\273\202\314\202\334\202\334)\012\012static inline void SPVM_IMPLEMENT_DIVIDE_UNSIG"
      "NED_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 = env->new_string_nolen_no_mortal("
      "env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_DIVIDE_ZERO]);\012    env->set_ex"
      "ception(env, stack, exception);\012    *error_id = SPVM_NATIVE_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, int64_t in1, int64_t in2, int32_t* error_id) {"
      "\012  if (__builtin_expect(in2 == 0, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(en"
      "v, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_DIVIDE_ZERO]);\012    env->set_exce"
      "ption(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 inline void SPVM_IMPLEMENT_MODULO_INT(SPVM_E"
      "NV* env, SPVM_VALUE* stack, int32_t* out, int32_t in1, int32_t in2, int32_t* error_id) {\012  if (__bui"
      "ltin_expect(in2 == 0, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SP"
      "VM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_DIVIDE_ZERO]);\012    env->set_exception(env, s"
      "tack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_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\012stati"
      "c inline void SPVM_IMPLEMENT_MODULO_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* out, int64_t in1"
      ", int64_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_EXCEPTI"
      "ON_DIVIDE_ZERO]);\012    env->set_exception(env, stack, exception);\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) && re"
      "t) { ret += in2; }\012    *out = ret;\012  }\012}\012\012static inline void 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 (__b"
      "uiltin_expect(in2 == 0, 0)) {\012    SPVM_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 ="
      " (uint32_t)in1 % (uint32_t)in2;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_MODULO_UNSIGNED_LONG(SPVM_E"
      "NV* env, SPVM_VALUE* stack, int64_t* out, int64_t in1, int64_t in2, int32_t* error_id) {\012  if (__bui"
      "ltin_expect(in2 == 0, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SP"
      "VM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_DIVIDE_ZERO]);\012    env->set_exception(env, s"
      "tack, 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\012#define SPVM_IMPLEMENT_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_IMPL"
      "EMENT_RIGHT_ARITHMETIC_SHIFT_INT(out, in1, in2) (out = in1 >> in2)\012#define SPVM_IMPLEMENT_RIGHT_ARIT"
      "HMETIC_SHIFT_LONG(out, in1, in2) (out = in1 >> in2)\012\012#define SPVM_IMPLEMENT_RIGHT_LOGICAL_SHIFT_INT("
      "out, in1, in2) (out = (int32_t)((uint32_t)in1 >> in2))\012#define SPVM_IMPLEMENT_RIGHT_LOGICAL_SHIFT_LO"
      "NG(out, in1, in2) (out = (int64_t)((uint64_t)in1 >> in2))\012\012#define SPVM_IMPLEMENT_BIT_AND_INT(out, i"
      "n1, in2) (out = in1 & in2)\012#define SPVM_IMPLEMENT_BIT_AND_LONG(out, in1, in2) (out = in1 & in2)\012\012#de"
      "fine SPVM_IMPLEMENT_BIT_OR_INT(out, in1, in2) (out = in1 | in2)\012#define SPVM_IMPLEMENT_BIT_OR_LONG(o"
      "ut, in1, in2) (out = in1 | in2)\012\012#define SPVM_IMPLEMENT_BIT_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_B"
      "YTE_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_IMPL"
      "EMENT_MOVE_FLOAT_ZERO(out) (out = 0)\012#define SPVM_IMPLEMENT_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, int3"
      "2_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_SHORT_ZERO(SPVM_EN"
      "V* env, SPVM_VALUE* stack, int16_t* out, int32_t fields_length) {\012  for (int32_t field_index = 0; fi"
      "eld_index < fields_length; field_index++) {\012    *(out + field_index) = 0;\012  }\012}\012\012static inline void "
      "SPVM_IMPLEMENT_MOVE_MULNUM_INT_ZERO(SPVM_ENV* env, SPVM_VALUE* stack, int32_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_LONG_ZERO(SPVM_ENV* env, SPVM_"
      "VALUE* stack, int64_t* out, int32_t fields_length) {\012  for (int32_t field_index = 0; field_index < f"
      "ields_length; field_index++) {\012    *(out + field_index) = 0;\012  }\012}\012\012static inline void SPVM_IMPLEMEN"
      "T_MOVE_MULNUM_FLOAT_ZERO(SPVM_ENV* env, SPVM_VALUE* stack, float* 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_DOUBLE_ZERO(SPVM_ENV* env, SPVM_VALUE* stac"
      "k, double* 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\012#define SPVM_IMPLEMENT_MOVE_CONSTANT_BYTE(ou"
      "t, in) (out = in)\012#define SPVM_IMPLEMENT_MOVE_CONSTANT_INT(out, in) (out = in)\012#define SPVM_IMPLEMEN"
      "T_MOVE_CONSTANT_LONG(out, in) (out = in)\012#define SPVM_IMPLEMENT_MOVE_CONSTANT_FLOAT(out, in) (out = "
      "in)\012#define SPVM_IMPLEMENT_MOVE_CONSTANT_DOUBLE(out, in) (out = in)\012\012#define SPVM_IMPLEMENT_MOVE_BYT"
      "E(out, in) (out = in)\012#define SPVM_IMPLEMENT_MOVE_SHORT(out, in) (out = in)\012#define SPVM_IMPLEMENT_M"
      "OVE_INT(out, in) (out = in)\012#define SPVM_IMPLEMENT_MOVE_LONG(out, in) (out = in)\012#define SPVM_IMPLEM"
      "ENT_MOVE_FLOAT(out, in) (out = in)\012#define SPVM_IMPLEMENT_MOVE_DOUBLE(out, in) (out = in)\012#define SP"
      "VM_IMPLEMENT_MOVE_OBJECT(env, stack, out, in) (env->assign_object(env, stack, out, in))\012\012static inli"
      "ne void SPVM_IMPLEMENT_MOVE_OBJECT_WITH_TYPE_CHECK(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out,"
      " SPVM_OBJ* in, SPVM_NATIVE_BASIC_TYPE* dist_basic_type, int32_t dist_type_dimension, int32_t* error_"
      "id) {\012  SPVM_OBJ* object = in;\012  int32_t isa = env->isa(env, stack, object, dist_basic_type, dist_ty"
      "pe_dimension);\012  if (isa) {\012    env->assign_object(env, stack, out, in);\012  }\012  else {\012    int32_t sc"
      "ope_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->get_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_name(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_stack_tmp_buffer(env, stack);\012    \012    SPVM_VAL"
      "UE 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_NATIVE_"
      "C_STACK_TMP_BUFFER_SIZE, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ASSIGN_NOT_SATISF"
      "Y_ASSIGNMENT_REQUIREMENT], args, 2);\012    \012    SPVM_OBJ* exception = env->new_string_no_mortal(env, s"
      "tack, tmp_buffer, string_length);\012    env->set_exception(env, stack, exception);\012    *error_id = SPV"
      "M_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_STRING(SPVM_ENV* env, SPVM_VALUE* stack, SPV"
      "M_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, stac"
      "k, 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_NATIVE_C_BASIC_TYPE_ID_ERROR"
      "_CLASS;\012  }\012  else {\012    env->assign_object(env, stack, out, string);\012  }\012}\012\012static inline void SPVM"
      "_IMPLEMENT_TYPE_CONVERSION_ANY_OBJECT_TO_STRING(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, SP"
      "VM_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, s"
      "tack, object)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMEN"
      "T_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ASSIGN_READ_ONLY_STRING_TO_MUTABLE_TYPE]);\012    env->set"
      "_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  el"
      "se if (env->is_numeric_object(env, stack, object)) {\012    env->assign_object(env, stack, out, env->nu"
      "meric_object_to_string_no_mortal(env, stack, object, error_id));\012  }\012  else if (!env->is_string(env,"
      " stack, object)) {\012    int32_t scope_id = env->enter_scope(env, stack);\012    \012    SPVM_OBJ* obj_src_t"
      "ype_name = env->get_type_name(env, stack, object);\012    const char* src_type_name = env->get_chars(en"
      "v, stack, obj_src_type_name);\012    const char* dist_basic_type_name = \"string\";\012    SPVM_OBJ* obj_dis"
      "t_type_name = env->get_compile_type_name(env, stack, dist_basic_type_name, 0, 0);\012    const char* di"
      "st_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 = (voi"
      "d*)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_NATIVE_C_STACK_TMP_BUFFER_SIZE, SPVM_IMPLEMEN"
      "T_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ASSIGN_NOT_SATISFY_ASSIGNMENT_REQUIREMENT], args, 2);\012 "
      "   \012    SPVM_OBJ* exception = 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  else {\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_IMPLEM"
      "ENT_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_NEGA"
      "TE_FLOAT(out, in) (out = -in)\012#define SPVM_IMPLEMENT_NEGATE_DOUBLE(out, in) (out = -in)\012\012static inli"
      "ne 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 (st"
      "ring1 == NULL) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMEN"
      "T_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_STRING_CONCAT_LEFT_UNDEFINED]);\012    env->set_exception("
      "env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else if (stri"
      "ng2 == 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(e"
      "nv, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    SPV"
      "M_OBJ* string3 = env->concat_no_mortal(env, stack, string1, string2);\012    env->assign_object(env, st"
      "ack, out, string3);\012  }\012}\012\012#define SPVM_IMPLEMENT_CONDITION_EVALUATION_INT(out, in) (out = in)\012#defi"
      "ne SPVM_IMPLEMENT_CONDITION_EVALUATION_LONG(out, in) (out = !!in)\012#define SPVM_IMPLEMENT_CONDITION_E"
      "VALUATION_FLOAT(out, in) (out = !!in)\012#define SPVM_IMPLEMENT_CONDITION_EVALUATION_DOUBLE(out, in) (o"
      "ut = !!in)\012#define SPVM_IMPLEMENT_CONDITION_EVALUATION_OBJECT(out, in) (out = !!(SPVM_OBJ*)in)\012#defi"
      "ne SPVM_IMPLEMENT_CONDITION_EVALUATION_REF(out, in) (out = !!(SPVM_OBJ*)in)\012#define SPVM_IMPLEMENT_C"
      "ONDITION_EVALUATION_BOOL_OBJECT(env, stack, out, in) (out = !!env->get_bool_object_value(env, stack,"
      " (SPVM_OBJ*)in))\012\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_EQ_INT(out, in1, in2) (out = (in1 == in2"
      "))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_EQ_LONG(out, in1, in2) (out = (in1 == in2))\012#define SPV"
      "M_IMPLEMENT_NUMERIC_COMPARISON_EQ_FLOAT(out, in1, in2) (out = (in1 == in2))\012#define SPVM_IMPLEMENT_N"
      "UMERIC_COMPARISON_EQ_DOUBLE(out, in1, in2) (out = (in1 == in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPA"
      "RISON_EQ_OBJECT(out, in1, in2) (out = ((SPVM_OBJ*)in1 == (SPVM_OBJ*)in2))\012#define SPVM_IMPLEMENT_NUM"
      "ERIC_COMPARISON_EQ_REF(out, in1, in2) (out = ((SPVM_OBJ*)in1 == (SPVM_OBJ*)in2))\012\012#define SPVM_IMPLE"
      "MENT_NUMERIC_COMPARISON_NE_INT(out, in1, in2) (out = (in1 != in2))\012#define SPVM_IMPLEMENT_NUMERIC_CO"
      "MPARISON_NE_LONG(out, in1, in2) (out = (in1 != in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_NE_FL"
      "OAT(out, in1, in2) (out = (in1 != in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_NE_DOUBLE(out, in1"
      ", in2) (out = (in1 != in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_NE_OBJECT(out, in1, in2) (out "
      "= ((SPVM_OBJ*)in1 != (SPVM_OBJ*)in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_NE_REF(out, in1, in2"
      ") (out = ((SPVM_OBJ*)in1 != (SPVM_OBJ*)in2))\012\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_GT_INT(out, "
      "in1, in2) (out = (in1 > in2))\012#define SPVM_IMPLEMENT_NUMERIC_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 SPV"
      "M_IMPLEMENT_NUMERIC_COMPARISON_GE_INT(out, in1, in2) (out = (in1 >= in2))\012#define SPVM_IMPLEMENT_NUM"
      "ERIC_COMPARISON_GE_LONG(out, in1, in2) (out = (in1 >= in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISO"
      "N_GE_FLOAT(out, in1, in2) (out = (in1 >= in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_GE_DOUBLE(o"
      "ut, in1, in2) (out = (in1 >= in2))\012\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_LT_INT(out, in1, in2) "
      "(out = (in1 < in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_LT_LONG(out, in1, in2) (out = (in1 < i"
      "n2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_LT_FLOAT(out, in1, in2) (out = (in1 < in2))\012#define S"
      "PVM_IMPLEMENT_NUMERIC_COMPARISON_LT_DOUBLE(out, in1, in2) (out = (in1 < in2))\012\012#define SPVM_IMPLEMEN"
      "T_NUMERIC_COMPARISON_LE_INT(out, in1, in2) (out = (in1 <= in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPA"
      "RISON_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_IMPLEMENT_NUMERIC_COMPARISON_LE_DOUBLE(out, in1, i"
      "n2) (out = (in1 <= in2))\012\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_CMP_INT(out, in1, in2) (out = in"
      "1 > 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_IMPLEMENT_NUMERIC_COMPARISON_CMP_FLOAT(out, "
      "in1, in2) (out = in1 > in2 ? 1 : in1 < in2 ? -1 : 0)\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_CMP_D"
      "OUBLE(out, in1, in2) (out = in1 > in2 ? 1 : in1 < in2 ? -1 : 0)\012\012#define SPVM_IMPLEMENT_IS_UNDEF_OBJ"
      "ECT(out, in) (out = ((SPVM_OBJ*)in == NULL))\012#define SPVM_IMPLEMENT_IS_UNDEF_REF(out, in) (out = ((S"
      "PVM_OBJ*)in == NULL))\012#define SPVM_IMPLEMENT_IS_NOT_UNDEF_OBJECT(out, in) (out = ((SPVM_OBJ*)in != N"
      "ULL))\012#define SPVM_IMPLEMENT_IS_NOT_UNDEF_REF(out, in) (out = ((SPVM_OBJ*)in != NULL))\012\012static inlin"
      "e void SPVM_IMPLEMENT_STRING_COMPARISON(SPVM_ENV* env, SPVM_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 (object"
      "1 != NULL && object2 == NULL) {\012    cmp = 1;\012  }\012  else if (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* bytes1 = env->get_chars(env, stack, object1)"
      ";\012    const char* bytes2 = env->get_chars(env, stack, object2);\012    \012    int32_t short_string_length"
      " = length1 < length2 ? length1 : length2;\012    int32_t retval = env->api->internal->c_memcmp(env, sta"
      "ck, 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_op_id) {\012    case SPVM_IMPLEMENT_C_EXCEPTION"
      "_COMPARISON_EQ: {\012      flag = cmp == 0;\012      break;\012    }\012    case SPVM_IMPLEMENT_C_EXCEPTION_COMP"
      "ARISON_NE: {\012      flag = cmp != 0;\012      break;\012    }\012    case SPVM_IMPLEMENT_C_EXCEPTION_COMPARISO"
      "N_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_IMPLEMENT_C_EXCEPTION_COMPARISON_LE: {\012      fla"
      "g = cmp <= 0;\012      break;\012    }\012    case SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_CMP: {\012      flag = "
      "cmp;\012      break;\012    }\012    default: {\012      // Unexpected Error\012      flag = 0;\012    }\012  }\012  \012  *out"
      " = flag;\012}\012\012#define SPVM_IMPLEMENT_STRING_COMPARISON_EQ(env, stack, out, in1, in2) (SPVM_IMPLEMENT_S"
      "TRING_COMPARISON(env, stack, SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_EQ, out, in1, in2))\012#define SPVM_"
      "IMPLEMENT_STRING_COMPARISON_NE(env, stack, out, in1, in2) (SPVM_IMPLEMENT_STRING_COMPARISON(env, sta"
      "ck, SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_NE, out, in1, in2))\012#define SPVM_IMPLEMENT_STRING_COMPARIS"
      "ON_GT(env, stack, out, in1, in2) (SPVM_IMPLEMENT_STRING_COMPARISON(env, stack, SPVM_IMPLEMENT_C_EXCE"
      "PTION_COMPARISON_GT, out, in1, in2))\012#define SPVM_IMPLEMENT_STRING_COMPARISON_GE(env, stack, out, in"
      "1, in2) (SPVM_IMPLEMENT_STRING_COMPARISON(env, stack, SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_GE, out,"
      " in1, in2))\012#define SPVM_IMPLEMENT_STRING_COMPARISON_LT(env, stack, out, in1, in2) (SPVM_IMPLEMENT_S"
      "TRING_COMPARISON(env, stack, SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_LT, out, in1, in2))\012#define SPVM_"
      "IMPLEMENT_STRING_COMPARISON_LE(env, stack, out, in1, in2) (SPVM_IMPLEMENT_STRING_COMPARISON(env, sta"
      "ck, SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_LE, out, in1, in2))\012#define SPVM_IMPLEMENT_STRING_COMPARIS"
      "ON_CMP(env, stack, out, in1, in2) (SPVM_IMPLEMENT_STRING_COMPARISON(env, stack, SPVM_IMPLEMENT_C_EXC"
      "EPTION_COMPARISON_CMP, out, in1, in2))\012\012static inline void 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_O"
      "BJ* 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_IMPLEM"
      "ENT_C_EXCEPTION_NEW_OBJECT_FAILED]);\012    env->set_exception(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_IMPLEMENT_NEW_OBJECT_ARRAY(SPVM_ENV* env, SPVM_"
      "VALUE* stack, SPVM_OBJ** out, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t length, int32_t* error_id)"
      " {\012  if (length >= 0) {\012    SPVM_OBJ* object = env->new_object_array_no_mortal(env, stack, basic_typ"
      "e, length);\012    if (object == NULL) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(en"
      "v, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRAY_FAILED]);\012      env->s"
      "et_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* exc"
      "eption = env->new_string_nolen_no_mortal(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_MULDIM_ARRAY("
      "SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t type_d"
      "imension, int32_t length, int32_t* error_id) {\012  if (length >= 0) {\012    SPVM_OBJ* object = env->new_"
      "muldim_array_no_mortal(env, stack, basic_type, type_dimension, 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(en"
      "v, 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_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_MULNUM_ARRAY(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_O"
      "BJ** out, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t length, int32_t* error_id) {\012  if (length >= 0"
      ") {\012    SPVM_OBJ* object = env->new_mulnum_array_no_mortal(env, stack, basic_type, length);\012    if ("
      "object == NULL) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLE"
      "MENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRAY_FAILED]);\012      env->set_exception(env, st"
      "ack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      e"
      "nv->assign_object(env, stack, out, object);\012    }\012  }\012  else {\012    SPVM_OBJ* exception = env->new_st"
      "ring_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRRA"
      "Y_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_BYTE_ARRAY(SPVM_ENV* env, SPVM_VA"
      "LUE* stack, SPVM_OBJ** out, int32_t length, int32_t* error_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_IMPLEM"
      "ENT_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, ou"
      "t, object);\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_e"
      "xception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012}\012\012sta"
      "tic inline void SPVM_IMPLEMENT_NEW_SHORT_ARRAY(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int"
      "32_t length, int32_t* error_id) {\012  if (length >= 0) {\012    SPVM_OBJ* object = env->new_short_array_n"
      "o_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_FAIL"
      "ED]);\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_LITERAL"
      "S[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_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_int_array_no_mortal(env, stack, length);\012    "
      "if (object == NULL) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_I"
      "MPLEMENT_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->ne"
      "w_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_A"
      "RRRAY_LENGTH_SMALL]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_B"
      "ASIC_TYPE_ID_ERROR_CLASS;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_NEW_LONG_ARRAY(SPVM_ENV* env, SPV"
      "M_VALUE* stack, SPVM_OBJ** out, int32_t length, int32_t* error_id) {\012  if (length >= 0) {\012    SPVM_O"
      "BJ* object = env->new_long_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_IM"
      "PLEMENT_C_EXCEPTION_NEW_ARRAY_FAILED]);\012      env->set_exception(env, stack, exception);\012      *erro"
      "r_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, st"
      "ack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRRAY_LENGTH_SMALL]);\012    env->s"
      "et_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_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_float_arr"
      "ay_no_mortal(env, stack, length);\012    if (object == NULL) {\012      SPVM_OBJ* exception = env->new_str"
      "ing_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_TYP"
      "E_ID_ERROR_CLASS;\012    }\012    else {\012      env->assign_object(env, stack, out, object);\012    }\012  }\012  el"
      "se {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LIT"
      "ERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRRAY_LENGTH_SMALL]);\012    env->set_exception(env, stack, excep"
      "tion);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012}\012\012static inline void SPVM_IMPLE"
      "MENT_NEW_DOUBLE_ARRAY(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int32_t length, int32_t* err"
      "or_id) {\012  if (length >= 0) {\012    SPVM_OBJ* object = env->new_double_array_no_mortal(env, stack, len"
      "gth);\012    if (object == NULL) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, sta"
      "ck, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRAY_FAILED]);\012      env->set_exc"
      "eption(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_IMPLEMENT_C_EXCEP"
      "TION_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_STRING(SPVM_ENV* en"
      "v, SPVM_VALUE* stack, SPVM_OBJ** out, const char* constant_string, int32_t constant_string_length, i"
      "nt32_t* error_id) {\012  SPVM_OBJ* string = env->new_string_no_mortal(env, stack, constant_string, cons"
      "tant_string_length);\012  if (string == NULL) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mort"
      "al(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_STRING_FAILED]);\012    en"
      "v->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 , str"
      "ing);\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 (length >= 0) {\012    SPVM_OBJ* string = env->ne"
      "w_string_no_mortal(env, stack, NULL, length);\012    if (string == NULL) {\012      SPVM_OBJ* exception = "
      "env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTIO"
      "N_NEW_STRING_LEN_FAILED]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_N"
      "ATIVE_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_IMP"
      "LEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_STRING_LEN_LENGTH_SMALL]);\012    env->set_except"
      "ion(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 = env->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#d"
      "efine SPVM_IMPLEMENT_IS_OPTIONS(env, stack, out, in) (out = env->is_options(env, stack, in))\012\012#defin"
      "e SPVM_IMPLEMENT_MAKE_READ_ONLY(env, stack, in) (env->make_read_only(env, stack, in))\012\012#define SPVM_"
      "IMPLEMENT_MAKE_FIXED_LENGTH(env, stack, in) (env->make_fixed_length(env, stack, in))\012\012#define SPVM_I"
      "MPLEMENT_ENABLE_OPTIONS(env, stack, in) (env->enable_options(env, stack, in))\012\012#define SPVM_IMPLEMEN"
      "T_DISABLE_OPTIONS(env, stack, in) (env->disable_options(env, stack, in))\012\012static inline void SPVM_IM"
      "PLEMENT_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_exceptio"
      "n(env, stack, env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEM"
      "ENT_C_EXCEPTION_ARRAY_UNDEFINED]));\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      env->set_"
      "exception(env, stack, env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPV"
      "M_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 = ((int8_t*)GET_DATA_ADDRESS(env, stack, array))[i"
      "ndex];\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_ARRAY_ELEMENT_SHORT(SPVM_ENV* env, SPVM_VA"
      "LUE* stack, int16_t* out, SPVM_OBJ* array, int32_t index, int32_t* error_id) {\012  \012  if (__builtin_ex"
      "pect(array == NULL, 0)) { \012    env->set_exception(env, stack, env->new_string_nolen_no_mortal(env, s"
      "tack, 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 (__builtin_expect(index < 0 || index >= GET_"
      "LENGTH(env, stack, array), 0)) { \012      env->set_exception(env, stack, env->new_string_nolen_no_mort"
      "al(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 ="
      " ((int16_t*)GET_DATA_ADDRESS(env, stack, array))[index];\012    }\012  }\012}\012\012static inline void SPVM_IMPLEM"
      "ENT_GET_ARRAY_ELEMENT_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, SPVM_OBJ* array, int32_t i"
      "ndex, int32_t* error_id) {\012  \012  if (__builtin_expect(array == NULL, 0)) { \012    env->set_exception(en"
      "v, 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      index += GET_LENGTH(env, stack, array);\012    }\012   "
      " if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) { \012      env->set_exc"
      "eption(env, stack, env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_I"
      "MPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]));\012      *error_id = SPVM_NATIVE_C_BASIC_TYP"
      "E_ID_ERROR_CLASS;\012    }\012    else { \012      *out = ((int32_t*)GET_DATA_ADDRESS(env, stack, array))[ind"
      "ex];\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_ARRAY_ELEMENT_LONG(SPVM_ENV* env, SPVM_VALUE"
      "* stack, int64_t* out, SPVM_OBJ* array, int32_t index, int32_t* error_id) {\012  \012  if (__builtin_expec"
      "t(array == NULL, 0)) { \012    env->set_exception(env, stack, env->new_string_nolen_no_mortal(env, stac"
      "k, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]));\012    *error_id = SPV"
      "M_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_LEN"
      "GTH(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_RA"
      "NGE]));\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_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 inde"
      "x, 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_E"
      "XCEPTION_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_except"
      "ion(env, stack, env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPL"
      "EMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]));\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_I"
      "D_ERROR_CLASS;\012    }\012    else { \012      *out = ((float*)GET_DATA_ADDRESS(env, stack, array))[index];\012"
      "    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_ARRAY_ELEMENT_DOUBLE(SPVM_ENV* env, SPVM_VALUE* s"
      "tack, double* out, SPVM_OBJ* array, int32_t index, int32_t* error_id) {\012  \012  if (__builtin_expect(ar"
      "ray == NULL, 0)) { \012    env->set_exception(env, stack, env->new_string_nolen_no_mortal(env, stack, S"
      "PVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]));\012    *error_id = SPVM_NA"
      "TIVE_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      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 = ((doub"
      "le*)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, SPVM_OBJ** out, SPVM_OBJ* array, int32_t inde"
      "x, 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_E"
      "XCEPTION_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_except"
      "ion(env, stack, env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPL"
      "EMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]));\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_I"
      "D_ERROR_CLASS;\012    }\012    else { \012      env->assign_object(env, stack, out, ((SPVM_OBJ**)GET_DATA_ADD"
      "RESS(env, stack, array))[index]);\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_B"
      "YTE(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int8_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_e"
      "xception(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* exc"
      "eption = 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_AD"
      "DRESS(env, stack, array))[index] = in;\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_ARRAY_ELEM"
      "ENT_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int16_t in, 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      ((int16_t*)GET"
      "_DATA_ADDRESS(env, stack, array))[index] = in;\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_AR"
      "RAY_ELEMENT_INT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, 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_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012 "
      "   env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLAS"
      "S;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, arra"
      "y);\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[SPV"
      "M_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, ex"
      "ception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_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_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_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    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stac"
      "k, 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_LITER"
      "ALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, st"
      "ack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      ("
      "(int64_t*)GET_DATA_ADDRESS(env, stack, array))[index] = in;\012    }\012  }\012}\012\012static inline void SPVM_IMP"
      "LEMENT_SET_ARRAY_ELEMENT_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, 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_U"
      "NDEFINED]);\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(e"
      "nv, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_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_VALUE* 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_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      ((double*)GET_DATA_ADDRESS(env, stack, array))[index] = in;\012    }\012  }\012}\012\012static inline vo"
      "id 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 (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* excep"
      "tion = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_E"
      "XCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\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(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      SPVM_OBJ** element_address = &((SPVM_OBJ**)GET_DATA_ADDRESS(env, stack, array))"
      "[index];\012      env->assign_object(env, stack, element_address, in);\012    }\012  }\012}\012\012static inline void "
      "SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_OBJECT_CHECK_TYPE(SPVM_ENV* 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_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      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, arr"
      "ay, object);\012      if (elem_isa) {\012        env->assign_object(env, stack, element_address, object);\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->get_chars(env, stack, obj_src_type_name);\012        SPVM_NATIVE_BASIC_TYPE* dist_basic_type = en"
      "v->get_object_basic_type(env, stack, array);\012        const char* dist_basic_type_name = env->api->ba"
      "sic_type->get_name(env->runtime, dist_basic_type);\012        int32_t dist_type_dimension = env->get_ob"
      "ject_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_dimension, 0);\012        const char* dist_type_n"
      "ame = 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].add"
      "ress = (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_NATIVE_C_STACK_TMP_BUFFER_"
      "SIZE, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ASSIGN_NOT_SATISFY_ASSIGNMEN"
      "T_REQUIREMENT], args, 2);\012        \012        SPVM_OBJ* exception = env->new_string_no_mortal(env, stac"
      "k, 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_SET_ARRAY_ELEMENT_UNDEF(SPVM_ENV* env, SPVM_V"
      "ALUE* stack, SPVM_OBJ* array, int32_t index, 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_LITER"
      "ALS[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 || i"
      "ndex >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mo"
      "rtal(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_T"
      "YPE_ID_ERROR_CLASS;\012    }\012    else {\012      SPVM_OBJ** object_address = &((SPVM_OBJ**)GET_DATA_ADDRES"
      "S(env, stack, array))[index];\012      env->assign_object(env, 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_mortal(env, stack, env->get_chars(env, stack, "
      "env->get_exception(env, stack)));\012    env->set_exception(env, stack, exception);\012  }\012}\012\012static inlin"
      "e void SPVM_IMPLEMENT_ARRAY_LENGTH(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, SPVM_OBJ* array, "
      "int32_t* error_id) {\012  if (array == NULL) {\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    *out = GET_LENGTH(env, stack, array);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_STRING_LE"
      "NGTH(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_IM"
      "PLEMENT_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, 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    *out"
      " = GET_CAPACITY(env, stack, object);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_LENGTH(SPVM_ENV* e"
      "nv, 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_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    *error_id = env->set_length(en"
      "v, 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[SPV"
      "M_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_capacity(env, s"
      "tack, object, capacity);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_FIELD_BYTE(SPVM_ENV* env, SPVM"
      "_VALUE* stack, int8_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_CLA"
      "SS;\012  }\012  else {\012    *out = *(int8_t*)(GET_DATA_ADDRESS(env, stack, object) + field_offset);\012  }\012}\012\012"
      "static inline void SPVM_IMPLEMENT_GET_FIELD_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int16_t* out, SP"
      "VM_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_L"
      "ITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_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*)(GET_DATA_ADDRESS(env, stack, object) + field_offset);\012  }\012}\012\012\012static inline void SPVM_IMPL"
      "EMENT_GET_FIELD_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_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_EXCEP"
      "TION_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 = *(int32_t*)(GET_DATA_ADDRESS(env"
      ", stack, object) + field_offset);\012  }\012}\012\012\012static inline void 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_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    *out = *(int64_t*)(GET_DATA_ADDRESS(env, stack, object) + field_offs"
      "et);\012  }\012}\012\012\012static inline void SPVM_IMPLEMENT_GET_FIELD_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, flo"
      "at* out, SPVM_OBJ* object, int32_t field_offset, int32_t* error_id) {\012  \012  if (__builtin_expect(obje"
      "ct == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEME"
      "NT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_except"
      "ion(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, int"
      "32_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_IMPLEM"
      "ENT_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 = *(double*)(GET_DATA_A"
      "DDRESS(env, stack, object) + field_offset);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_FIELD_OBJEC"
      "T(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_strin"
      "g_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    SPVM_OBJ** ref = (SPVM_OBJ**)(GET_DATA_ADDRESS(env, stac"
      "k, 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_FIE"
      "LD_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, 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_mortal(env, stack, SPVM_IMPLEMENT_STRING_LIT"
      "ERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_exception(env, stac"
      "k, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_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\012static inline void SPVM_IMPLEMENT_SET_FIELD_SHOR"
      "T(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t field_offset, int16_t in, int32_t* err"
      "or_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, ex"
      "ception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *(int16_t*)(GET_"
      "DATA_ADDRESS(env, stack, object) + field_offset) = in;\012    SPVM_IMPLEMENT_ENABLE_EXISTS_FLAG(env, st"
      "ack, object, exists_offset, exists_bit);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_FIELD_INT(SPVM"
      "_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t field_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    SP"
      "VM_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, exceptio"
      "n);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *(int32_t*)(GET_DATA_A"
      "DDRESS(env, stack, object) + field_offset) = in;\012    SPVM_IMPLEMENT_ENABLE_EXISTS_FLAG(env, stack, o"
      "bject, exists_offset, exists_bit);\012  }\012}\012\012static inline void 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, int3"
      "2_t exists_offset, int32_t exists_bit) {\012  \012  if (__builtin_expect(object == NULL, 0)) {\012    SPVM_OB"
      "J* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLE"
      "MENT_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    *(int64_t*)(GET_DATA_ADDRES"
      "S(env, stack, object) + field_offset) = in;\012    SPVM_IMPLEMENT_ENABLE_EXISTS_FLAG(env, stack, object"
      ", exists_offset, exists_bit);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_FIELD_FLOAT(SPVM_ENV* env"
      ", SPVM_VALUE* stack, SPVM_OBJ* object, int32_t field_offset, float in, int32_t* error_id, int32_t ex"
      "ists_offset, int32_t exists_bit) {\012  \012  if (__builtin_expect(object == NULL, 0)) {\012    SPVM_OBJ* exc"
      "eption = 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    *er"
      "ror_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *(float*)(GET_DATA_ADDRESS(env, s"
      "tack, object) + field_offset) = in;\012    SPVM_IMPLEMENT_ENABLE_EXISTS_FLAG(env, stack, object, exists"
      "_offset, exists_bit);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_FIELD_DOUBLE(SPVM_ENV* env, SPVM_"
      "VALUE* stack, SPVM_OBJ* object, int32_t field_offset, double in, int32_t* error_id, int32_t exists_o"
      "ffset, 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_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTIO"
      "N_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    *(double*)(GET_DATA_ADDRESS(env, stack, ob"
      "ject) + field_offset) = in;\012    SPVM_IMPLEMENT_ENABLE_EXISTS_FLAG(env, stack, object, exists_offset,"
      " exists_bit);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_FIELD_OBJECT(SPVM_ENV* env, SPVM_VALUE* s"
      "tack, SPVM_OBJ* object, int32_t field_offset, SPVM_OBJ* in, 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_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIE"
      "LD_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->assign_object(env, stack, ref, in);\012    SPVM_IMPLEMENT"
      "_ENABLE_EXISTS_FLAG(env, stack, object, exists_offset, exists_bit);\012  }\012}\012\012static inline void SPVM_I"
      "MPLEMENT_SET_FIELD_UNDEF(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t field_offset, i"
      "nt32_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_STRING_"
      "LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_exception(env, s"
      "tack, 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_object(e"
      "nv, stack, ref, NULL);\012    SPVM_IMPLEMENT_ENABLE_EXISTS_FLAG(env, stack, object, exists_offset, exis"
      "ts_bit);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_WEAKEN_FIELD(SPVM_ENV* env, SPVM_VALUE* stack, SPV"
      "M_OBJ* object, int32_t field_offset, int32_t* error_id) {\012  if (object == NULL) {\012    SPVM_OBJ* exce"
      "ption = 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    *err"
      "or_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    int32_t status = env->weaken(env, stack, (SPVM"
      "_OBJ**)ref);\012    if (status != 0) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env,"
      " stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_WEAKEN_BACK_REFERENCE_ALLOCATION_F"
      "AILED]);\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_IMPLEMENT_UNWEAKEN_FIELD(SPVM_ENV* env, SPVM_V"
      "ALUE* 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[S"
      "PVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_exception(env, stack, exce"
      "ption);\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, (SPV"
      "M_OBJ**)ref);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_ISWEAK_FIELD(SPVM_ENV* env, SPVM_VALUE* stack"
      ", int32_t* out, 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_LITERAL"
      "S[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_exception(env, stack, e"
      "xception);\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    *out = env->isweak(env, sta"
      "ck, (SPVM_OBJ**)ref);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_EXISTS(SPVM_ENV* env, SPVM_VALUE* sta"
      "ck, 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* exception = env->new_string_nolen_no_mortal(env, s"
      "tack, 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_CLAS"
      "S;\012  }\012  else {\012    *out = SPVM_IMPLEMENT_GET_EXISTS_FLAG(env, stack, object, field_exists_offset, f"
      "ield_exists_bit);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_DELETE(SPVM_ENV* env, SPVM_VALUE* stack, "
      "SPVM_OBJ* object, SPVM_NATIVE_FIELD* field, int32_t* error_id) {\012  if (object == NULL) {\012    SPVM_OB"
      "J* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLE"
      "MENT_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    env->delete_field(env, stac"
      "k, object, field);\012  }\012}\012\012#define SPVM_IMPLEMENT_GET_CLASS_VAR_BYTE(env, stack, out, class_var) (out"
      " = env->get_class_var_byte(env, stack, class_var))\012#define SPVM_IMPLEMENT_GET_CLASS_VAR_SHORT(env, s"
      "tack, 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, out, class_var) (out = env->get_class_var_lon"
      "g(env, stack, class_var))\012#define SPVM_IMPLEMENT_GET_CLASS_VAR_FLOAT(env, stack, out, class_var) (ou"
      "t = env->get_class_var_float(env, stack, class_var))\012#define SPVM_IMPLEMENT_GET_CLASS_VAR_DOUBLE(env"
      ", stack, out, class_var) (out = env->get_class_var_double(env, stack, class_var))\012#define SPVM_IMPLE"
      "MENT_GET_CLASS_VAR_OBJECT(env, stack, out, class_var) (env->assign_object(env, stack, out, env->get_"
      "class_var_object(env, stack, class_var)))\012\012#define SPVM_IMPLEMENT_SET_CLASS_VAR_BYTE(env, stack, cla"
      "ss_var, in) (env->set_class_var_byte(env, stack, class_var, in))\012#define SPVM_IMPLEMENT_SET_CLASS_VA"
      "R_SHORT(env, stack, class_var, in) (env->set_class_var_short(env, stack, class_var, in))\012#define SPV"
      "M_IMPLEMENT_SET_CLASS_VAR_INT(env, stack, class_var, in) (env->set_class_var_int(env, stack, class_v"
      "ar, in))\012#define SPVM_IMPLEMENT_SET_CLASS_VAR_LONG(env, stack, class_var, in) (env->set_class_var_lo"
      "ng(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#define SPVM_IMPLEMENT_SET_CLASS_VAR_DOUBLE(e"
      "nv, stack, class_var, in) (env->set_class_var_double(env, stack, class_var, in))\012#define SPVM_IMPLEM"
      "ENT_SET_CLASS_VAR_OBJECT(env, stack, class_var, in) (env->assign_object(env, stack, env->get_class_v"
      "ar_object_ref(env, stack, class_var), in))\012#define SPVM_IMPLEMENT_SET_CLASS_VAR_UNDEF(env, stack, cl"
      "ass_var) (env->assign_object(env, stack, env->get_class_var_object_ref(env, stack, class_var), NULL)"
      ")\012\012#define SPVM_IMPLEMENT_GET_EXCEPTION_VAR(env, stack, out) (env->assign_object(env, stack, out, en"
      "v->get_exception(env, stack)))\012#define SPVM_IMPLEMENT_SET_EXCEPTION_VAR(env, stack, in) (env->set_ex"
      "ception(env, stack, in))\012#define SPVM_IMPLEMENT_SET_EXCEPTION_VAR_UNDEF(env, stack) (env->set_except"
      "ion(env, stack, NULL))\012\012static inline void SPVM_IMPLEMENT_ISA(SPVM_ENV* env, SPVM_VALUE* stack, int3"
      "2_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, dist_basic_type, dist_type_dimension);\012  }\012 "
      " else {\012    *out = 0;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_ISA_ERROR(SPVM_ENV* env, SPVM_VALUE* "
      "stack, int32_t* out, SPVM_NATIVE_BASIC_TYPE* src_basic_type, 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, i"
      "nt32_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, SPVM_NATIVE_BASIC_TYPE* src_basic_type, SPVM_N"
      "ATIVE_BASIC_TYPE* dist_basic_type, int32_t dist_type_dimension) {\012  *out = (dist_basic_type == src_b"
      "asic_type && dist_type_dimension == 0);\012}\012\012#define SPVM_IMPLEMENT_CAN(env, stack, out, object, metho"
      "d_name) (out = (env->get_instance_method(env, stack, object, method_name) != NULL))\012\012static inline v"
      "oid 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(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* st"
      "ring, int32_t is_stderr) {\012  if (is_stderr) {\012    env->say_stderr(env, stack, string);\012  }\012  else {\012"
      "    env->say(env, stack, string);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_WARN(SPVM_ENV* env, SPVM_"
      "VALUE* stack, SPVM_OBJ* string, const char* func_name, const char* file, int32_t line) {\012  env->warn"
      "(env, stack, string, func_name, file, line);\012}\012\012#define SPVM_IMPLEMENT_CLEAR_EVAL_ERROR_ID(eval_erro"
      "r_id) (eval_error_id = 0)\012#define SPVM_IMPLEMENT_GET_EVAL_ERROR_ID(out, eval_error_id) (out = eval_e"
      "rror_id)\012#define SPVM_IMPLEMENT_SET_ERROR_ID(error_id, die_error_id) (error_id = die_error_id)\012#defi"
      "ne SPVM_IMPLEMENT_SET_EVAL_ERROR_ID(eval_error_id, die_error_id) (eval_error_id = die_error_id)\012#def"
      "ine SPVM_IMPLEMENT_ARGS_WIDTH(env, stack, out) (out = env->args_width(env, stack))\012#define SPVM_IMPL"
      "EMENT_GET_BASIC_TYPE_ID(env, stack, out, basic_type_arg) ((out) = (env)->api->basic_type->get_id((en"
      "v)->runtime, (basic_type_arg)))\012\012static inline void SPVM_IMPLEMENT_TYPE_NAME(SPVM_ENV* env, SPVM_VAL"
      "UE* stack, SPVM_OBJ** out, SPVM_OBJ* object) {\012  if (object == NULL) {\012    *out = NULL;\012  }\012  else {"
      "\012    SPVM_OBJ* type_name = env->get_type_name_no_mortal(env, stack, object);\012    env->assign_object("
      "env, stack, out, type_name);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_DUMP(SPVM_ENV* env, SPVM_VALUE"
      "* stack, SPVM_OBJ** out, SPVM_OBJ* object) {\012  SPVM_OBJ* dump = env->dump_no_mortal(env, stack, obje"
      "ct);\012  env->assign_object(env, stack, out, dump);\012}\012\012static inline void SPVM_IMPLEMENT_COPY(SPVM_ENV"
      "* env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_OBJ* object, int32_t* error_id) {\012  SPVM_OBJ* object_"
      "copy = env->copy_no_mortal(env, stack, object);\012  env->assign_object(env, stack, out, object_copy);\012"
      "}\012\012static inline void SPVM_IMPLEMENT_GET_ADDRESS(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, v"
      "oid* 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 string_length = env->api->internal->c_snprint"
      "f_len(env, stack, tmp_buffer, SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE, \"%p\", args, 1);\012  \012  SPVM_OBJ* ob"
      "ject_address = env->new_string_no_mortal(env, stack, tmp_buffer, string_length);\012  env->assign_objec"
      "t(env, stack, out, object_address);\012}\012\012#define SPVM_IMPLEMENT_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_IMPL"
      "EMENT_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* ex"
      "ception = 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_NAT"
      "IVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *(int8_t*)*(int8_t**)in;\012  }\012  \012}\012\012static i"
      "nline 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_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 = *(int16_t*)*(int16_t**)in;\012  }\012  \012}\012\012static inline void S"
      "PVM_IMPLEMENT_GET_DEREF_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, int32_t** in, int32_t* e"
      "rror_id) {\012  \012  if (__builtin_expect(*in == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_no"
      "len_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_CL"
      "ASS;\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_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  el"
      "se {\012    *out = *(int64_t*)*(int64_t**)in;\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_GET_DEREF_FLO"
      "AT(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, 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 = "
      "*(float*)*(float**)in;\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_GET_DEREF_DOUBLE(SPVM_ENV* env, S"
      "PVM_VALUE* stack, double* out, double** in, int32_t* error_id) {\012  \012  if (__builtin_expect(*in == NU"
      "LL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRIN"
      "G_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*)*(doubl"
      "e**)in;\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_SET_DEREF_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    SPV"
      "M_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_I"
      "MPLEMENT_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    *(int8_t*)*(int8_t**)out = in;\012  }\012  \012}\012\012"
      "static inline void SPVM_IMPLEMENT_SET_DEREF_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int16_t** out, i"
      "nt16_t in, int32_t* error_id) {\012  \012  if (__builtin_expect(*out == 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    *(int16_t*)*(int16_t**)out = in;\012  }\012}\012\012static inline vo"
      "id 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_strin"
      "g_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINE"
      "D]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERRO"
      "R_CLASS;\012  }\012  else {\012    *(int32_t*)*(int32_t**)out = in;\012  }\012  \012}\012\012static inline void SPVM_IMPLEME"
      "NT_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_OBJ* exception = env->new_string_nolen_no_mor"
      "tal(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*)*(int64_t**)out = in;\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_SET_DEREF_F"
      "LOAT(SPVM_ENV* env, SPVM_VALUE* stack, float** out, float in, int32_t* error_id) {\012  \012  if (__builti"
      "n_expect(*out == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, S"
      "PVM_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    *(flo"
      "at*)*(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* error_id) {\012  \012  if (__builtin_expect(*out == N"
      "ULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRI"
      "NG_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    *(double*)*(double**)ou"
      "t = in;\012  }\012  \012}\012\012#define SPVM_IMPLEMENT_GET_MULNUM_FIELD_BYTE(out, in, field_index) (out = *(in + f"
      "ield_index))\012#define SPVM_IMPLEMENT_GET_MULNUM_FIELD_SHORT(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#d"
      "efine SPVM_IMPLEMENT_GET_MULNUM_FIELD_FLOAT(out, in, field_index) (out = *(in + field_index))\012#defin"
      "e SPVM_IMPLEMENT_GET_MULNUM_FIELD_DOUBLE(out, in, field_index) (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_IMPL"
      "EMENT_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 + field_index) = in)\012#define SPVM_IMPLEMENT_SET_M"
      "ULNUM_FIELD_FLOAT(out, field_index, in) (*(out + field_index) = in)\012#define SPVM_IMPLEMENT_SET_MULNU"
      "M_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_length; field_index++) {\012    *(out + field_ind"
      "ex) = *(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 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_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* ou"
      "t, int32_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_IM"
      "PLEMENT_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, int32_t fields_length) {\012  for (int32_t field_i"
      "ndex = 0; field_index < fields_length; field_index++) {\012    *(out + field_index) = *(in + field_inde"
      "x);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_MOVE_MULNUM_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, do"
      "uble* out, double* 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_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_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        *(out + field_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_VALUE* stack, int16_t* out, SPVM_OBJ* array, in"
      "t32_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_LITERAL"
      "S[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 || ind"
      "ex >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mort"
      "al(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_TYP"
      "E_ID_ERROR_CLASS;\012    }\012    else {\012      int32_t field_index;\012      for (field_index = 0; field_inde"
      "x < 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_IM"
      "PLEMENT_GET_MULNUM_ARRAY_INT(SPVM_ENV* env, SPVM_VALUE* stack, 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(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SP"
      "VM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *erro"
      "r_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(e"
      "nv, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RAN"
      "GE]);\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) = ((int32_t*)GET_DATA_ADDRESS(env, stac"
      "k, array))[fields_length * index + field_index];\012      }\012    }\012  }\012}\012\012static inline void SPVM_IMPLEM"
      "ENT_GET_MULNUM_ARRAY_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* out, SPVM_OBJ* array, int32_t i"
      "ndex, int32_t fields_length, int32_t* error_id) {\012  if (__builtin_expect(array == NULL, 0)) {\012    SP"
      "VM_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_i"
      "d = 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 >= G"
      "ET_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_ER"
      "ROR_CLASS;\012    }\012    else {\012      int32_t field_index;\012      for (field_index = 0; field_index < fie"
      "lds_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 (__builtin_expect(array == NULL, 0)) {\012    SPVM_O"
      "BJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPL"
      "EMENT_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_L"
      "ENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, sta"
      "ck, 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) = ((float*)GET_DATA_ADDRESS(env, stack, array)"
      ")[fields_length * index + field_index];\012      }\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_M"
      "ULNUM_ARRAY_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, double* out, SPVM_OBJ* array, int32_t index, in"
      "t32_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_IMPLEMEN"
      "T_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      in"
      "dex += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGT"
      "H(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_CLAS"
      "S;\012    }\012    else {\012      int32_t field_index;\012      for (field_index = 0; field_index < fields_leng"
      "th; field_index++) {\012        *(out + field_index) = ((double*)GET_DATA_ADDRESS(env, stack, array))[f"
      "ields_length * index + field_index];\012      }\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULN"
      "UM_ARRAY_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int32_t fields_lengt"
      "h, int8_t* in, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* exception = e"
      "nv->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_BAS"
      "IC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LE"
      "NGTH(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_IMPLEMEN"
      "T_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exc"
      "eption(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_ind"
      "ex++) {\012        ((int8_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_ARRAY_SHORT"
      "(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int32_t fields_length, int16_t* i"
      "n, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* exception = env->new_stri"
      "ng_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEF"
      "INED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_E"
      "RROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, st"
      "ack, 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_LIT"
      "ERALS[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    "
      "    ((int16_t*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_index] = *(in + fi"
      "eld_index);\012      }\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_ARRAY_INT(SPVM_ENV* en"
      "v, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int32_t fields_length, int32_t* in, int32_t* e"
      "rror_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_m"
      "ortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    e"
      "nv->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_IM"
      "PLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, except"
      "ion);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      int32_t fiel"
      "d_index;\012      for (field_index = 0; field_index < fields_length; field_index++) {\012        ((int32_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_ARRAY_LONG(SPVM_ENV* env, SPVM_VALU"
      "E* 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* exception = env->new_string_nolen_no_mortal(env, s"
      "tack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exce"
      "ption(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* except"
      "ion = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EX"
      "CEPTION_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        ((int64_t*)GET_DATA_A"
      "DDRESS(env, stack, array))[fields_length * index + field_index] = *(in + field_index);\012      }\012    }"
      "\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, S"
      "PVM_OBJ* array, int32_t index, int32_t fields_length, float* in, int32_t* error_id) {\012  if (__builti"
      "n_expect(!array, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IM"
      "PLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, st"
      "ack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__bui"
      "ltin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_e"
      "xpect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = env->ne"
      "w_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEME"
      "NT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012      *error_id = S"
      "PVM_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, sta"
      "ck, array))[fields_length * index + field_index] = *(in + field_index);\012      }\012    }\012  }\012}\012\012static "
      "inline void SPVM_IMPLEMENT_SET_MULNUM_ARRAY_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array"
      ", int32_t index, int32_t fields_length, double* in, int32_t* error_id) {\012  if (__builtin_expect(!arr"
      "ay, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRIN"
      "G_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exceptio"
      "n);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(i"
      "ndex < 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_nole"
      "n_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_IND"
      "EX_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; f"
      "ield_index < fields_length; field_index++) {\012        ((double*)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 (__built"
      "in_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_exception"
      "(env, stack, exception);\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      SPVM_OBJ* exception ="
      " env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTI"
      "ON_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012      *erro"
      "r_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      *out = ((int8_t*)GET_DATA_ADD"
      "RESS(env, stack, array))[fields_length * index + field_index];\012    }\012  }\012}\012\012static inline void SPVM_"
      "IMPLEMENT_GET_MULNUM_ARRAY_FIELD_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int16_t* out, SPVM_OBJ* arr"
      "ay, 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, 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      *out = ((int16_t*)GET_DATA_ADDRE"
      "SS(env, stack, array))[fields_length * index + field_index];\012    }\012  }\012}\012\012static inline void SPVM_IM"
      "PLEMENT_GET_MULNUM_ARRAY_FIELD_INT(SPVM_ENV* env, SPVM_VALUE* 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_expe"
      "ct(array == NULL, 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      *out = ((int32_t*)GET_DATA_ADDRESS(e"
      "nv, stack, array))[fields_length * index + field_index];\012    }\012  }\012}\012\012static inline void SPVM_IMPLEM"
      "ENT_GET_MULNUM_ARRAY_FIELD_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* out, SPVM_OBJ* array, int"
      "32_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_IMPL"
      "EMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stac"
      "k, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__built"
      "in_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_exp"
      "ect(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 = SPV"
      "M_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(arra"
      "y == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMEN"
      "T_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, e"
      "xception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_e"
      "xpect(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_stri"
      "ng_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACC"
      "ESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NA"
      "TIVE_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_M"
      "ULNUM_ARRAY_FIELD_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, double* out, SPVM_OBJ* array, int32_t ind"
      "ex, 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_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      *out = ((double*)GET_DATA_ADDRESS(env, stack, a"
      "rray))[fields_length * index + field_index];\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULN"
      "UM_ARRAY_FIELD_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int32_t field_"
      "index, int32_t fields_length, int8_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      ((int8_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_S"
      "HORT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int32_t field_index, int32_t "
      "fields_length, int16_t in, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* e"
      "xception = 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      ind"
      "ex += 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, S"
      "PVM_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      ((int16_t*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + fie"
      "ld_index] = in;\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FIELD_INT(SPVM_ENV* "
      "env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int32_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_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_AR"
      "RAY_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_LENGT"
      "H(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, ar"
      "ray), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_S"
      "TRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_except"
      "ion(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    els"
      "e {\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_MULNUM_ARRAY_FIELD_LONG(SPVM_ENV* env, SPVM_VALU"
      "E* stack, SPVM_OBJ* array, int32_t index, int32_t field_index, int32_t fields_length, int64_t in, in"
      "t32_t* error_id) {\012  if (__builtin_expect(!array, 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      ((in"
      "t64_t*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + field_index] = in;\012    }\012  }\012}\012\012"
      "static inline void SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FIELD_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, SPV"
      "M_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* exception = env->new_string_nolen_no_mortal(e"
      "nv, 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  el"
      "se {\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* e"
      "xception = 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      ((float*)GET_DATA_A"
      "DDRESS(env, stack, array))[fields_length * index + field_index] = in;\012    }\012  }\012}\012\012static inline voi"
      "d SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FIELD_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, in"
      "t32_t index, int32_t field_index, int32_t fields_length, double in, int32_t* error_id) {\012  if (__bui"
      "ltin_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(env, stack, array);\012    }\012    if (__builti"
      "n_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_EL"
      "EMENT_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      ((double*)GET_DATA_ADDRESS(env, st"
      "ack, array))[fields_length * index + field_index] = in;\012    }\012  }\012}\012\012static inline void SPVM_IMPLEME"
      "NT_DEREF_MULNUM_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, int8_t* out, int8_t* mulnum_ref, int32_t fiel"
      "ds_length, int32_t* error_id) {\012  \012  if (__builtin_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* ex"
      "ception = 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_NAT"
      "IVE_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) = *((int8_t*)mulnum_ref + field_index);\012    }\012 "
      " }\012  \012}\012\012static inline void SPVM_IMPLEMENT_DEREF_MULNUM_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int1"
      "6_t* out, int16_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) = *("
      "(int16_t*)mulnum_ref + field_index);\012    }\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_DEREF_MULNUM_"
      "INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, int32_t* mulnum_ref, int32_t fields_length, int3"
      "2_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_TYP"
      "E_ID_ERROR_CLASS;\012  }\012  else {\012    for (int32_t field_index = 0; field_index < fields_length; field_"
      "index++) {\012      *(out + field_index) = *((int32_t*)mulnum_ref + field_index);\012    }\012  }\012}\012\012static i"
      "nline 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 == NUL"
      "L, 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_r"
      "ef + field_index);\012    }\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_DEREF_MULNUM_FLOAT(SPVM_ENV* en"
      "v, SPVM_VALUE* stack, float* out, float* 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    en"
      "v->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      *(o"
      "ut + field_index) = *((float*)mulnum_ref + field_index);\012    }\012  }\012}\012\012static inline void SPVM_IMPLEM"
      "ENT_DEREF_MULNUM_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, double* out, double* mulnum_ref, int32_t f"
      "ields_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_IMPLEME"
      "NT_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 < fie"
      "lds_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_index, int32_t* error_id) {\012  \012  if (__builti"
      "n_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, st"
      "ack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_excepti"
      "on(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\012static inline void SPVM_IMPLEMENT_GET_MULNUM"
      "_FIELD_DEREF_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int16_t* out, int16_t* mulnum_ref, int32_t fiel"
      "d_index, int32_t* error_id) {\012  \012  if (__builtin_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exce"
      "ption = 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_NATIV"
      "E_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_DEREF_INT(SPVM_ENV* env, SPVM_VALUE* stack, i"
      "nt32_t* out, int32_t* mulnum_ref, int32_t field_index, 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    *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* out, int64_t* 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_LITERALS[SPVM_IMPLEMENT_C_EXCEPTI"
      "ON_REF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BAS"
      "IC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *((int64_t*)mulnum_ref + field_index);\012  }\012  \012}\012\012sta"
      "tic inline void SPVM_IMPLEMENT_GET_MULNUM_FIELD_DEREF_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, float*"
      " out, float* 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_IMPLEM"
      "ENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, e"
      "xception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *((float"
      "*)mulnum_ref + field_index);\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_FIELD_DEREF_DOUB"
      "LE(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_s"
      "tring_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDE"
      "FINED]);\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_ref + field_index);\012  }\012  \012}\012\012static inline v"
      "oid 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_LI"
      "TERALS[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    *((int8_t*)mulnum_ref + fiel"
      "d_index) = in;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_FIELD_DEREF_SHORT(SPVM_ENV* env, "
      "SPVM_VALUE* stack, int16_t* mulnum_ref, int32_t field_index, int16_t in, int32_t* error_id) {\012  \012  i"
      "f (__builtin_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mor"
      "tal(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    *((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_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* e"
      "xception = 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_NA"
      "TIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *((int32_t*)mulnum_ref + field_index) = in;\012  }\012}"
      "\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_FIELD_DEREF_LONG(SPVM_ENV* env, SPVM_VALUE* stack, in"
      "t64_t* mulnum_ref, int32_t field_index, int64_t in, 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    *((int64_"
      "t*)mulnum_ref + field_index) = in;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_FIELD_DEREF_F"
      "LOAT(SPVM_ENV* env, SPVM_VALUE* stack, float* mulnum_ref, int32_t field_index, float in, 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    *((float*)mulnum_ref +field_index) = in;\012  }\012}\012\012static inline void SPVM_"
      "IMPLEMENT_SET_MULNUM_FIELD_DEREF_DOUBLE(SPVM_ENV* env, SPVM_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    *erro"
      "r_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *((double*)mulnum_ref + field_index"
      ") = in;\012  }\012}\012\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_TO_SHORT(out, in) (out = (int16_t)in)\012#de"
      "fine 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_BYT"
      "E_TO_FLOAT(out, in) (out = (float)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_TO_DOUBLE(out, in)"
      " (out = (double)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_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_IMPLE"
      "MENT_TYPE_CONVERSION_SHORT_TO_LONG(out, in) (out = (int64_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSI"
      "ON_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_CONVERSION_INT_TO_BYTE(out, in) (out = (int8"
      "_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_INT_TO_SHORT(out, in) (out = (int16_t)in)\012#define SPVM"
      "_IMPLEMENT_TYPE_CONVERSION_INT_TO_LONG(out, in) (out = (int64_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONV"
      "ERSION_INT_TO_FLOAT(out, in) (out = (float)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_INT_TO_DOUBLE("
      "out, in) (out = (double)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_BYTE(out, in) (out = (int"
      "8_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_SHORT(out, in) (out = (int16_t)in)\012#define SP"
      "VM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_INT(out, in) (out = (int32_t)in)\012#define SPVM_IMPLEMENT_TYPE_CO"
      "NVERSION_LONG_TO_FLOAT(out, in) (out = (float)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_DOU"
      "BLE(out, in) (out = (double)in)\012#define SPVM_IMPLEMENT_TYPE_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#def"
      "ine 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_FL"
      "OAT_TO_DOUBLE(out, in) (out = (double)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_DOUBLE_TO_BYTE(out,"
      " in) (out = (int8_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_DOUBLE_TO_SHORT(out, in) (out = (int1"
      "6_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_DOUBLE_TO_INT(out, in) (out = (int32_t)in)\012#define SP"
      "VM_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\012static inline void SPVM_IMPLEMENT_TYPE_CONVE"
      "RSION_BYTE_TO_STRING(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int8_t value) {\012  char* tmp_b"
      "uffer = env->api->internal->get_stack_tmp_buffer(env, stack);\012  \012  SPVM_VALUE args[1];\012  args[0].iva"
      "l = (int32_t)value;\012  int32_t string_length = env->api->internal->c_snprintf_len(env, stack, tmp_buf"
      "fer, SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE, \"%\" PRId8, args, 1);\012  \012  SPVM_OBJ* string = env->new_stri"
      "ng_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_SHORT_TO_STRING(SPVM_ENV* env, SPVM_VALUE* stac"
      "k, SPVM_OBJ** out, int16_t value) {\012  char* tmp_buffer = env->api->internal->get_stack_tmp_buffer(en"
      "v, stack);\012  \012  SPVM_VALUE args[1];\012  args[0].ival = (int32_t)value;\012  int32_t string_length = env->"
      "api->internal->c_snprintf_len(env, stack, tmp_buffer, SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE, \"%\" PRId1"
      "6, 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_CONVERSI"
      "ON_INT_TO_STRING(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int32_t value) {\012  char* tmp_buff"
      "er = 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_snprintf_len(env, stack, tmp_buffer, SPVM_NA"
      "TIVE_C_STACK_TMP_BUFFER_SIZE, \"%\" PRId32, args, 1);\012  \012  SPVM_OBJ* string = env->new_string_no_morta"
      "l(env, stack, tmp_buffer, string_length);\012  env->assign_object(env, stack, out, string);\012}\012\012static i"
      "nline 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->internal->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_snpr"
      "intf_len(env, stack, tmp_buffer, SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE, \"%\" PRId64, args, 1);\012  \012  SPV"
      "M_OBJ* string = env->new_string_no_mortal(env, stack, tmp_buffer, string_length);\012  env->assign_obje"
      "ct(env, stack, out, string);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_FLOAT_TO_STRING(SP"
      "VM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, float value) {\012  char* tmp_buffer = env->api->intern"
      "al->get_stack_tmp_buffer(env, stack);\012  \012  SPVM_VALUE args[1];\012  args[0].dval = (double)value;\012  int"
      "32_t string_length = env->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_b"
      "uffer, string_length);\012  env->assign_object(env, stack, out, string);\012}\012\012static inline void SPVM_IMP"
      "LEMENT_TYPE_CONVERSION_DOUBLE_TO_STRING(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, double 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 = value;\012  int32_t string_length = env->api->internal->c_snprintf_len(env, stac"
      "k, 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, stri"
      "ng);\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 > INT8_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    num = env->api->internal->c_strtoll(env, sta"
      "ck, string, &end, 10);\012    if (num > INT16_MAX) {\012      num = INT16_MAX;\012    }\012    else if (num < IN"
      "T16_MIN) {\012      num = INT16_MIN;\012    }\012  }\012  \012  *out = (int16_t)num;\012}\012\012static inline void SPVM_IMP"
      "LEMENT_TYPE_CONVERSION_STRING_TO_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, SPVM_OBJ* src_s"
      "tring) {\012  \012  int64_t num = 0;\012  if (src_string) {\012    const char* string = env->get_chars(env, stac"
      "k, src_string);\012    \012    char *end;\012    num = env->api->internal->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\012static inline void SPVM_IMPLEMENT_TYPE_CONV"
      "ERSION_STRING_TO_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* out, SPVM_OBJ* src_string) {\012  \012  i"
      "nt64_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  }\012  \012 "
      " *out = (int64_t)num;\012}\012\012static inline void SPVM_IMPLEMENT_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 voi"
      "d SPVM_IMPLEMENT_TYPE_CONVERSION_STRING_TO_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, double* out, SPV"
      "M_OBJ* src_string) {\012  \012  double num = 0;\012  if (src_string) {\012    const char* string = env->get_char"
      "s(env, stack, src_string);\012    \012    char *end;\012    num = env->api->internal->c_strtod(env, stack, st"
      "ring, &end);\012  }\012  \012  *out = (double)num;\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_STRIN"
      "G_TO_BYTE_ARRAY(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_OBJ* src_string) {\012  \012  if (s"
      "rc_string) {\012    int32_t src_string_length = env->length(env, stack, src_string);\012    const char* sr"
      "c_string_data = env->get_chars(env, stack, src_string);\012    SPVM_OBJ* byte_array = env->new_byte_arr"
      "ay_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, s"
      "rc_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** out, SPVM_OBJ* src_byte_array) {\012  int32_t sr"
      "c_byte_array_length = env->length(env, stack, src_byte_array);\012  int8_t* src_byte_array_data = env->"
      "get_elems_byte(env, stack, src_byte_array);\012  SPVM_OBJ* string = env->new_string_no_mortal(env, stac"
      "k, (const char*)src_byte_array_data, src_byte_array_length);\012  env->assign_object(env, stack, out, s"
      "tring);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_TO_BYTE_OBJECT(SPVM_ENV* env, SPVM"
      "_VALUE* stack, SPVM_OBJ** out, int8_t value) {\012  SPVM_NATIVE_BASIC_TYPE* basic_type = env->api->runt"
      "ime->get_basic_type_by_id(env->runtime, SPVM_NATIVE_C_BASIC_TYPE_ID_BYTE_CLASS);\012  SPVM_OBJ* object "
      "= env->new_object_no_mortal(env, stack, basic_type);\012  int8_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_SHORT_TO_SHORT_OBJECT(SPVM_ENV* env, SPVM_VAL"
      "UE* 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  int16_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_INT_TO_INT_OBJECT(SPVM_ENV* env, SPVM_VALUE*"
      " stack, SPVM_OBJ** out, int32_t value) {\012  SPVM_NATIVE_BASIC_TYPE* basic_type = env->api->runtime->g"
      "et_basic_type_by_id(env->runtime, SPVM_NATIVE_C_BASIC_TYPE_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_TO_LONG_OBJECT(SPVM_ENV* env, SPVM_VALUE* st"
      "ack, 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_ID_LONG_CLASS);\012  SPVM_OBJ* object = env->ne"
      "w_object_no_mortal(env, stack, basic_type);\012  int64_t** fields = (int64_t**)(GET_DATA_ADDRESS(env, s"
      "tack, object));\012  *(int64_t*)&fields[0] = value;\012  env->assign_object(env, stack, out, object);\012}\012\012s"
      "tatic inline void SPVM_IMPLEMENT_TYPE_CONVERSION_FLOAT_TO_FLOAT_OBJECT(SPVM_ENV* env, SPVM_VALUE* st"
      "ack, SPVM_OBJ** out, float value) {\012  SPVM_NATIVE_BASIC_TYPE* basic_type = env->api->runtime->get_ba"
      "sic_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** fields = (float**)(GET_DATA_ADDRESS(env, stack,"
      " object));\012  *(float*)&fields[0] = value;\012  env->assign_object(env, stack, out, object);\012}\012\012static i"
      "nline void SPVM_IMPLEMENT_TYPE_CONVERSION_DOUBLE_TO_DOUBLE_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_DOUBLE_CLASS);\012  SPVM_OBJ* object = env->new_ob"
      "ject_no_mortal(env, stack, basic_type);\012  double** fields = (double**)(GET_DATA_ADDRESS(env, stack, "
      "object));\012  *(double*)&fields[0] = value;\012  env->assign_object(env, stack, out, object);\012}\012\012static i"
      "nline void SPVM_IMPLEMENT_TYPE_CONVERSION_ANY_OBJECT_TO_BYTE(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, o"
      "bject, error_id);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_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->numer"
      "ic_object_to_short(env, stack, object, error_id);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSI"
      "ON_ANY_OBJECT_TO_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, SPVM_OBJ* object, int32_t* erro"
      "r_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_ENV* env, SPVM_VALUE* stack, int64_t* out, SP"
      "VM_OBJ* object, int32_t* error_id) {\012  \012  *out = env->numeric_object_to_long(env, stack, object, err"
      "or_id);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_ANY_OBJECT_TO_FLOAT(SPVM_ENV* env, SPVM"
      "_VALUE* stack, float* out, SPVM_OBJ* object, int32_t* error_id) {\012  \012  *out = env->numeric_object_to"
      "_float(env, stack, object, error_id);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_ANY_OBJEC"
      "T_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, object, error_id);\012}\012\012#define SPVM_IMPLEMENT_SET"
      "_STACK_BYTE(stack, stack_index, in) (*(int8_t*)&stack[stack_index] = in)\012#define SPVM_IMPLEMENT_SET_"
      "STACK_SHORT(stack, stack_index, in) (*(int16_t*)&stack[stack_index] = in)\012#define SPVM_IMPLEMENT_SET"
      "_STACK_INT(stack, stack_index, in) (*(int32_t*)&stack[stack_index] = in)\012#define SPVM_IMPLEMENT_SET_"
      "STACK_LONG(stack, stack_index, in) (*(int64_t*)&stack[stack_index] = in)\012#define SPVM_IMPLEMENT_SET_"
      "STACK_FLOAT(stack, stack_index, in) (*(float*)&stack[stack_index] = in)\012#define SPVM_IMPLEMENT_SET_S"
      "TACK_DOUBLE(stack, stack_index, in) (*(double*)&stack[stack_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**)&stack[stack_index] = in)\012#define SPVM_IMPLEMENT"
      "_SET_STACK_UNDEF(stack, stack_index) (*(SPVM_OBJ**)&stack[stack_index] = NULL)\012\012static inline void S"
      "PVM_IMPLEMENT_SET_STACK_MULNUM_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, int32_t stack_base, int32_t ar"
      "gs_width, int8_t* in) {\012  for (int32_t stack_index = 0; stack_index < args_width; stack_index++) {\012 "
      "   *(int8_t*)&stack[stack_base + stack_index] = *(in + stack_index);\012  }\012}\012\012static inline void SPVM_"
      "IMPLEMENT_SET_STACK_MULNUM_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t stack_base, int32_t args_"
      "width, int16_t* in) {\012  for (int32_t stack_index = 0; stack_index < args_width; stack_index++) {\012   "
      " *(int16_t*)&stack[stack_base + stack_index] = *(in + stack_index);\012  }\012}\012\012static inline void SPVM_I"
      "MPLEMENT_SET_STACK_MULNUM_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t stack_base, int32_t args_wid"
      "th, 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_IMPL"
      "EMENT_SET_STACK_MULNUM_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int32_t stack_base, int32_t args_width"
      ", int64_t* in) {\012  for (int32_t stack_index = 0; stack_index < args_width; stack_index++) {\012    *(in"
      "t64_t*)&stack[stack_base + stack_index] = *(in + stack_index);\012  }\012}\012\012static inline void SPVM_IMPLEM"
      "ENT_SET_STACK_MULNUM_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, 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_S"
      "ET_STACK_MULNUM_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, int32_t stack_base, int32_t args_width, dou"
      "ble* 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_index])\012#define SPVM_IMPLEMENT_GET_STACK_SHO"
      "RT(out, stack, stack_index) (out = *(int16_t*)&stack[stack_index])\012#define SPVM_IMPLEMENT_GET_STACK_"
      "INT(out, stack, stack_index) (out = *(int32_t*)&stack[stack_index])\012#define SPVM_IMPLEMENT_GET_STACK"
      "_LONG(out, stack, stack_index) (out = *(int64_t*)&stack[stack_index])\012#define SPVM_IMPLEMENT_GET_STA"
      "CK_FLOAT(out, stack, stack_index) (out = *(float*)&stack[stack_index])\012#define SPVM_IMPLEMENT_GET_ST"
      "ACK_DOUBLE(out, stack, stack_index) (out = *(double*)&stack[stack_index])\012\012static inline void SPVM_I"
      "MPLEMENT_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_GE"
      "T_STACK_REF(out, stack, stack_index) (out = *(SPVM_REF**)&stack[stack_index])\012\012static inline void SP"
      "VM_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; stack_index < args_width; stack_index++) {\012 "
      "   *(out + stack_index) = *(int8_t*)&stack[(stack_base) + stack_index];\012  }\012}\012\012static inline void SP"
      "VM_IMPLEMENT_GET_STACK_MULNUM_SHORT(SPVM_ENV* env, int16_t* out, SPVM_VALUE* stack, int32_t stack_ba"
      "se, 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_b"
      "ase, 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_base) + stack_index];\012  }\012}\012\012static inline voi"
      "d SPVM_IMPLEMENT_GET_STACK_MULNUM_LONG(SPVM_ENV* env, int64_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_base) + stack_index];\012  }\012}\012\012static inline v"
      "oid SPVM_IMPLEMENT_GET_STACK_MULNUM_FLOAT(SPVM_ENV* env, float* out, SPVM_VALUE* stack, int32_t stac"
      "k_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_base) + stack_index];\012  }\012}\012\012static inline vo"
      "id SPVM_IMPLEMENT_GET_STACK_MULNUM_DOUBLE(SPVM_ENV* env, double* out, SPVM_VALUE* stack, int32_t sta"
      "ck_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 s"
      "tack_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  else {\012    *out = *(int8_t*)&stack[stack_inde"
      "x];\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_STACK_OPTIONAL_SHORT(SPVM_ENV* env, int16_t* out, S"
      "PVM_VALUE* stack, int32_t stack_index, int16_t default_value) {\012  int32_t args_width = env->args_wid"
      "th(env, stack);\012  if (stack_index >= args_width) {\012    *out = default_value;\012  }\012  else {\012    *out ="
      " *(int16_t*)&stack[stack_index];\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_STACK_OPTIONAL_INT(SPV"
      "M_ENV* env, int32_t* out, SPVM_VALUE* stack, int32_t stack_index, int32_t default_value) {\012  int32_t"
      " args_width = env->args_width(env, stack);\012  if (stack_index >= args_width) {\012    *out = default_val"
      "ue;\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, SPVM_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_wid"
      "th) {\012    *out = default_value;\012  }\012  else {\012    *out = *(int64_t*)&stack[stack_index];\012  }\012}\012\012stati"
      "c inline void SPVM_IMPLEMENT_GET_STACK_OPTIONAL_FLOAT(SPVM_ENV* env, float* out, SPVM_VALUE* stack, "
      "int32_t stack_index, float 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 = *(float*)&stack[sta"
      "ck_index];\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_STACK_OPTIONAL_DOUBLE(SPVM_ENV* env, double*"
      " out, SPVM_VALUE* stack, int32_t stack_index, double default_value) {\012  int32_t args_width = env->ar"
      "gs_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 inline void SPVM_IMPLEMENT_GET_STACK_OPTIONAL_OB"
      "JECT(SPVM_ENV* env, SPVM_OBJ** out, SPVM_VALUE* stack, int32_t stack_index) {\012  int32_t args_width ="
      " env->args_width(env, stack);\012  if (stack_index >= args_width) {\012    env->assign_object(env, stack, "
      "out, NULL);\012  }\012  else {\012    env->assign_object(env, stack, out, *(SPVM_OBJ**)&stack[stack_index]);\012"
      "  }\012}\012\012#define SPVM_IMPLEMENT_RETURN_BYTE(stack, in) (*(int8_t*)&stack[0] = in)\012#define SPVM_IMPLEME"
      "NT_RETURN_SHORT(stack, in) (*(int16_t*)&stack[0] = in)\012#define 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_RE"
      "TURN_DOUBLE(stack, in) (*(double*)&stack[0] = in)\012\012static inline void SPVM_IMPLEMENT_RETURN_OBJECT(S"
      "PVM_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(st"
      "ack) (*(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_ind"
      "ex < args_width; stack_index++) {\012    *(int8_t*)&stack[stack_index] = *(in + stack_index);\012  }\012}\012\012st"
      "atic inline void SPVM_IMPLEMENT_RETURN_MULNUM_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int16_t* in, i"
      "nt32_t args_width) {\012  for (int32_t stack_index = 0; stack_index < args_width; stack_index++) {\012    "
      "*(int16_t*)&stack[stack_index] = *(in + stack_index);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_RETUR"
      "N_MULNUM_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* in, int32_t args_width) {\012  for (int32_t sta"
      "ck_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_RETURN_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 vo"
      "id SPVM_IMPLEMENT_RETURN_MULNUM_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, float* in, int32_t args_widt"
      "h) {\012  for (int32_t stack_index = 0; stack_index < args_width; stack_index++) {\012    *(float*)&stack["
      "stack_index] = *(in + stack_index);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_RETURN_MULNUM_DOUBLE(SP"
      "VM_ENV* env, SPVM_VALUE* stack, double* in, int32_t args_width) {\012  for (int32_t stack_index = 0; st"
      "ack_index < args_width; stack_index++) {\012    *(double*)&stack[stack_index] = *(in + stack_index);\012  "
      "}\012}\012\012#define SPVM_IMPLEMENT_CALL_CLASS_METHOD(env, stack, error_id, method, args_width, func_name, f"
      "ile, line) (error_id = env->call_method_no_mortal_no_check_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->call_method_no_mortal_no_check_args(env, stack"
      ", method, args_width, func_name, file, line))\012\012#define SPVM_IMPLEMENT_CALL_INSTANCE_METHOD(env, stac"
      "k, error_id, method_name, args_width, decl_args_signature, func_name, file, line) (error_id = env->c"
      "all_instance_method_no_mortal_less_check_args(env, stack, method_name, args_width, decl_args_signatu"
      "re, func_name, file, line))\012\012#endif\012"
;

const char* get_precompile_header_content() {
  return spvm_precompile_header_content;
}
