/* 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#ifndef __builtin_expect\012#  ifdef __has_builtin\012#    if !__has_builtin(__builtin_expect)\012#     "
      " define __builtin_expect(x, expected_value) (x)\012#    endif\012#  else\012#    define __builtin_expect(x, e"
      "xpected_value) (x)\012#  endif\012#endif\012 \012\012#define PRId8 \"d\"\012#define PRId16 \"d\"\012#define PRId32 \"d\"\012#defin"
      "e INT8_MIN (-128)\012#define INT8_MAX 127\012#define INT16_MIN (-32768)\012#define INT16_MAX 32767\012#define IN"
      "T32_MIN (-2147483647 - 1)\012#define INT32_MAX 2147483647\012\012#define INT64_MIN (-9223372036854775807LL - "
      "1)\012#define INT64_MAX 9223372036854775807LL\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\012stru"
      "ct spvm_native_allocator;\012typedef struct spvm_native_allocator SPVM_NATIVE_ALLOCATOR;\012\012struct spvm_n"
      "ative_string_buffer;\012typedef struct spvm_native_string_buffer SPVM_NATIVE_STRING_BUFFER;\012\012struct spv"
      "m_native_compiler;\012typedef struct spvm_native_compiler SPVM_NATIVE_COMPILER;\012\012struct spvm_native_cla"
      "ss_file;\012typedef struct spvm_native_class_file SPVM_NATIVE_CLASS_FILE;\012\012struct spvm_native_runtime;\012"
      "typedef struct spvm_native_runtime SPVM_NATIVE_RUNTIME;\012\012struct spvm_native_basic_type;\012typedef stru"
      "ct spvm_native_basic_type SPVM_NATIVE_BASIC_TYPE;\012\012struct spvm_native_class_var;\012typedef struct spvm"
      "_native_class_var SPVM_NATIVE_CLASS_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;\012typedef struct spvm_native_arg SPVM_NATIVE_ARG;\012\012struct spvm_native_mutex"
      ";\012typedef struct spvm_native_mutex SPVM_NATIVE_MUTEX;\012\012struct spvm_native_opcode;\012typedef struct spv"
      "m_native_opcode SPVM_NATIVE_OPCODE;\012\012struct spvm_obj;\012typedef struct spvm_obj SPVM_OBJ;\012\012struct spvm"
      "_ref;\012typedef struct spvm_ref SPVM_REF;\012\012#define SPVM_NATIVE_GET_POINTER(object) (*(void**)object)\012\012"
      "#define SPVM_NATIVE_SET_POINTER(object, pointer) (*(void**)object = pointer)\012\012/*\012 * spvm_warnf and s"
      "pvm_warn macros\012 * * These macros provide a way to print formatted warning messages to a stream (or "
      "stderr),\012 * including the function name, file name, and line number.\012 * * Special care is taken for "
      "MSVC's traditional preprocessor which handles __VA_ARGS__ \012 * as a single token. The SPVM_EXPAND mac"
      "ro forces a rescan of arguments to 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 cases where the variable arguments are empty. */\012  #define spvm_warnf(s"
      "tream, format, ...) fprintf(stream, 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, ##__VA_ARGS__)\012\012typedef union spvm_value SPVM_VALUE;\012\012struct spvm_env;\012t"
      "ypedef struct spvm_env SPVM_ENV;\012\012struct spvm_env_api;\012typedef struct spvm_env_api SPVM_ENV_API;\012\012st"
      "ruct spvm_api_allocator;\012typedef struct spvm_api_allocator SPVM_API_ALLOCATOR;\012\012struct spvm_api_stri"
      "ng_buffer;\012typedef struct spvm_api_string_buffer SPVM_API_STRING_BUFFER;\012\012struct spvm_api_compiler;\012"
      "typedef struct spvm_api_compiler SPVM_API_COMPILER;\012\012struct spvm_api_class_file;\012typedef struct spvm"
      "_api_class_file SPVM_API_CLASS_FILE;\012\012struct spvm_api_runtime;\012typedef struct spvm_api_runtime SPVM_"
      "API_RUNTIME;\012\012struct spvm_api_basic_type;\012typedef struct spvm_api_basic_type SPVM_API_BASIC_TYPE;\012\012s"
      "truct spvm_api_class_var;\012typedef struct spvm_api_class_var SPVM_API_CLASS_VAR;\012\012struct spvm_api_fie"
      "ld;\012typedef struct spvm_api_field SPVM_API_FIELD;\012\012struct spvm_api_method;\012typedef struct spvm_api_m"
      "ethod SPVM_API_METHOD;\012\012struct spvm_api_arg;\012typedef struct spvm_api_arg SPVM_API_ARG;\012\012struct spvm_"
      "api_mutex;\012typedef struct spvm_api_mutex SPVM_API_MUTEX;\012\012struct spvm_api_type;\012typedef struct spvm_"
      "api_type SPVM_API_TYPE;\012\012struct spvm_api_internal;\012typedef struct spvm_api_internal SPVM_API_INTERNA"
      "L;\012\012union spvm_value {\012  int8_t bval;\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_ENV_API* api;\012  SPVM_ENV* (*new_env)(void);\012  void (*free_env)(SPVM_"
      "ENV* env);\012  int32_t (*call_init_methods)(SPVM_ENV* env, SPVM_VALUE* stack);\012  int32_t (*set_command"
      "_info_program_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* obj_program_name);\012  int32_t (*set_c"
      "ommand_info_argv)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* obj_argv);\012  int32_t (*set_command_inf"
      "o_basetime)(SPVM_ENV* env, SPVM_VALUE* stack, int64_t base_time);\012  void (*destroy_class_vars)(SPVM_"
      "ENV* env, SPVM_VALUE* stack);\012  int32_t (*args_width)(SPVM_ENV* env, SPVM_VALUE* stack);\012  SPVM_NATI"
      "VE_BASIC_TYPE* (*get_object_basic_type)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int32"
      "_t (*get_object_basic_type_id)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  const char* (*"
      "get_object_basic_type_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int32_t (*get_obj"
      "ect_type_dimension)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  SPVM_NATIVE_BASIC_TYPE* ("
      "*get_basic_type)(SPVM_ENV* env, SPVM_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, int3"
      "2_t* error_id, const char* func_name, const char* file, int32_t line);\012  SPVM_NATIVE_BASIC_TYPE* (*g"
      "et_basic_type_by_id)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t basic_type_id);\012  int32_t (*get_basic"
      "_type_id)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name);\012  int32_t (*get_basic_type"
      "_id_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, int32_t* error_id, const"
      " char* func_name, const char* file, int32_t line);\012  SPVM_NATIVE_CLASS_VAR* (*get_class_var)(SPVM_EN"
      "V* env, SPVM_VALUE* stack, const char* basic_type_name, const char* class_var_name);\012  int8_t (*get_"
      "class_var_byte)(SPVM_ENV* env, SPVM_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 (*g"
      "et_class_var_int)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var);\012  int64_t (*g"
      "et_class_var_long)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var);\012  float (*ge"
      "t_class_var_float)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var);\012  double (*g"
      "et_class_var_double)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var);\012  SPVM_OBJ"
      "* (*get_class_var_object)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* class_var);\012  SPV"
      "M_OBJ* (*get_class_var_string)(SPVM_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, int"
      "8_t value);\012  void (*set_class_var_short)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CLASS_VAR* c"
      "lass_var, int16_t value);\012  void (*set_class_var_int)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_"
      "CLASS_VAR* class_var, int32_t value);\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_E"
      "NV* 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_OB"
      "J* value);\012  SPVM_OBJ** (*get_class_var_object_ref)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_CL"
      "ASS_VAR* class_var);\012  int8_t (*get_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 c"
      "har* file, int32_t line);\012  int16_t (*get_class_var_short_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  int32_t (*get_class_var_int_by_name)(SPVM_ENV* env, SPVM_VALUE* s"
      "tack, const char* basic_type_name, const char* class_var_name, int32_t* error_id, const char* func_n"
      "ame, const char* file, int32_t line);\012  int64_t (*get_class_var_long_by_name)(SPVM_ENV* env, SPVM_VA"
      "LUE* 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  float (*get_class_var_float_by_name)(SPVM_ENV* env, SP"
      "VM_VALUE* stack, const char* basic_type_name, const char* class_var_name, int32_t* error_id, const c"
      "har* func_name, const char* file, int32_t line);\012  double (*get_class_var_double_by_name)(SPVM_ENV* "
      "env, SPVM_VALUE* stack, const char* basic_type_name, const char* class_var_name, int32_t* error_id, "
      "const char* func_name, const char* file, int32_t line);\012  SPVM_OBJ* (*get_class_var_object_by_name)("
      "SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* class_var_name, int32_t* "
      "error_id, const char* func_name, const char* file, int32_t line);\012  SPVM_OBJ* (*get_class_var_string"
      "_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* class_var_name,"
      " int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  void (*set_class_var_b"
      "yte_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* class_var_na"
      "me, int8_t value, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  void "
      "(*set_class_var_short_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const "
      "char* class_var_name, int16_t value, int32_t* error_id, const char* func_name, const char* file, int"
      "32_t line);\012  void (*set_class_var_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, cons"
      "t char* file, int32_t line);\012  void (*set_class_var_long_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, "
      "const char* basic_type_name, const char* class_var_name, int64_t value, int32_t* error_id, const cha"
      "r* func_name, const char* file, int32_t line);\012  void (*set_class_var_float_by_name)(SPVM_ENV* env, "
      "SPVM_VALUE* stack, const char* basic_type_name, const char* class_var_name, float value, int32_t* er"
      "ror_id, const char* func_name, const char* file, int32_t line);\012  void (*set_class_var_double_by_nam"
      "e)(SPVM_ENV* env, SPVM_VALUE* stack, 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_clas"
      "s_var_object_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* cla"
      "ss_var_name, SPVM_OBJ* value, int32_t* error_id, const char* func_name, const char* file, int32_t li"
      "ne);\012  void (*set_class_var_string_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type"
      "_name, const char* class_var_name, SPVM_OBJ* value, int32_t* error_id, const char* func_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_name);\012  SPVM_NATIVE_FIELD* (*get_field_static)(SPVM_ENV* env, SPVM_V"
      "ALUE* stack, const char* basic_type_name, const char* field_name);\012  int8_t (*get_field_byte)(SPVM_E"
      "NV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field);\012  int16_t (*get_field_short"
      ")(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field);\012  int32_t (*get_fie"
      "ld_int)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field);\012  int64_t (*g"
      "et_field_long)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field);\012  floa"
      "t (*get_field_float)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field);\012"
      "  double (*get_field_double)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* "
      "field);\012  SPVM_OBJ* (*get_field_object)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NAT"
      "IVE_FIELD* field);\012  SPVM_OBJ* (*get_field_string)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* objec"
      "t, SPVM_NATIVE_FIELD* field);\012  void (*set_field_byte)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* o"
      "bject, SPVM_NATIVE_FIELD* field, int8_t value);\012  void (*set_field_short)(SPVM_ENV* env, SPVM_VALUE*"
      " stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field, int16_t value);\012  void (*set_field_int)(SPVM_ENV"
      "* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field, int32_t value);\012  void (*set_f"
      "ield_long)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field, int64_t val"
      "ue);\012  void (*set_field_float)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD"
      "* field, float value);\012  void (*set_field_double)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object"
      ", SPVM_NATIVE_FIELD* field, double value);\012  void (*set_field_object)(SPVM_ENV* env, SPVM_VALUE* sta"
      "ck, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field, SPVM_OBJ* value);\012  void (*set_field_string)(SPVM_EN"
      "V* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field, SPVM_OBJ* value);\012  int8_t (*"
      "get_field_byte_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, "
      "int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  int16_t (*get_field_sho"
      "rt_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, int32_t* err"
      "or_id, const char* func_name, const char* file, int32_t line);\012  int32_t (*get_field_int_by_name)(SP"
      "VM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, int32_t* error_id, const c"
      "har* func_name, const char* file, int32_t line);\012  int64_t (*get_field_long_by_name)(SPVM_ENV* env, "
      "SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, int32_t* error_id, const char* func_nam"
      "e, const char* file, int32_t line);\012  float (*get_field_float_by_name)(SPVM_ENV* env, SPVM_VALUE* st"
      "ack, 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_OB"
      "J* 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_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const c"
      "har* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  void ("
      "*set_field_byte_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name,"
      " int8_t value, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  void (*s"
      "et_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 (*s"
      "et_field_int_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, in"
      "t32_t value, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  void (*set"
      "_field_long_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, int"
      "64_t value, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  void (*set_"
      "field_float_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, flo"
      "at value, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  void (*set_fi"
      "eld_double_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, doub"
      "le value, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  void (*set_fi"
      "eld_object_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, SPVM"
      "_OBJ* value, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  void (*set"
      "_field_string_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* field_name, S"
      "PVM_OBJ* value, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  const c"
      "har* (*get_field_string_chars_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const cha"
      "r* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  SPVM_NAT"
      "IVE_METHOD* (*get_method)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char*"
      " method_name);\012  SPVM_NATIVE_METHOD* (*get_class_method)(SPVM_ENV* env, SPVM_VALUE* stack, const cha"
      "r* basic_type_name, const char* method_name);\012  SPVM_NATIVE_METHOD* (*get_instance_method_static)(SP"
      "VM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* method_name);\012  SPVM_NATIVE"
      "_METHOD* (*get_instance_method)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* meth"
      "od_name);\012  int32_t (*call_method_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_METHOD* m"
      "ethod, int32_t args_width, const char* func_name, const char* file, int32_t line);\012  int32_t (*call_"
      "method)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_METHOD* method, int32_t args_width, const char"
      "* func_name, const char* file, int32_t line);\012  void (*call_class_method_by_name)(SPVM_ENV* env, SPV"
      "M_VALUE* stack, const char* basic_type_name, const char* method_name, int32_t args_width, int32_t* e"
      "rror_id, const char* func_name, const char* file, int32_t line);\012  void (*call_instance_method_stati"
      "c_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* method_name, i"
      "nt32_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, const 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_OB"
      "J* (*new_object_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, int32_t* err"
      "or_id, const char* func_name, const char* file, int32_t line);\012  SPVM_OBJ* (*new_pointer_object_no_m"
      "ortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic_type, void* pointer);\012  SPVM_"
      "OBJ* (*new_pointer_object)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic_type, voi"
      "d* pointer);\012  SPVM_OBJ* (*new_pointer_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)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  void (*set_poi"
      "nter)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, void* pointer);\012  SPVM_OBJ* (*new_string_n"
      "olen_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, const char* bytes);\012  SPVM_OBJ* (*new_string_nolen"
      ")(SPVM_ENV* env, SPVM_VALUE* stack, const char* bytes);\012  SPVM_OBJ* (*new_string_no_mortal)(SPVM_ENV"
      "* env, SPVM_VALUE* stack, const char* bytes, int32_t length);\012  SPVM_OBJ* (*new_string)(SPVM_ENV* en"
      "v, SPVM_VALUE* stack, const char* bytes, int32_t length);\012  SPVM_OBJ* (*new_byte_array_no_mortal)(SP"
      "VM_ENV* env, SPVM_VALUE* stack, int32_t length);\012  SPVM_OBJ* (*new_byte_array)(SPVM_ENV* env, SPVM_V"
      "ALUE* stack, int32_t length);\012  SPVM_OBJ* (*new_short_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* st"
      "ack, int32_t length);\012  SPVM_OBJ* (*new_short_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t lengt"
      "h);\012  SPVM_OBJ* (*new_int_array_no_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_arr"
      "ay_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);\012  SPVM_OBJ* (*new_long_array)(SPVM_"
      "ENV* env, SPVM_VALUE* stack, int32_t length);\012  SPVM_OBJ* (*new_float_array_no_mortal)(SPVM_ENV* env"
      ", SPVM_VALUE* stack, int32_t length);\012  SPVM_OBJ* (*new_float_array)(SPVM_ENV* env, SPVM_VALUE* stac"
      "k, int32_t length);\012  SPVM_OBJ* (*new_double_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int3"
      "2_t length);\012  SPVM_OBJ* (*new_double_array)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t length);\012  SP"
      "VM_OBJ* (*new_object_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basi"
      "c_type, int32_t length);\012  SPVM_OBJ* (*new_object_array)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATI"
      "VE_BASIC_TYPE* basic_type, int32_t length);\012  SPVM_OBJ* (*new_object_array_by_name)(SPVM_ENV* env, S"
      "PVM_VALUE* stack, const char* basic_type_name, int32_t length, int32_t* error_id, const char* func_n"
      "ame, const char* file, int32_t line);\012  SPVM_OBJ* (*new_string_array)(SPVM_ENV* env, SPVM_VALUE* sta"
      "ck, int32_t length);\012  SPVM_OBJ* (*new_muldim_array_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPV"
      "M_NATIVE_BASIC_TYPE* basic_type, int32_t type_dimension, int32_t length);\012  SPVM_OBJ* (*new_muldim_a"
      "rray)(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_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const cha"
      "r* 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_VAL"
      "UE* stack, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t length);\012  SPVM_OBJ* (*new_mulnum_array)(SPVM"
      "_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t length);\012  SPVM_OBJ* (*new"
      "_mulnum_array_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, 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, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t length);\012  int32_t (*len"
      "gth)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int8_t* (*get_elems_byte)(SPVM_ENV* env,"
      " SPVM_VALUE* stack, SPVM_OBJ* array);\012  int16_t* (*get_elems_short)(SPVM_ENV* env, SPVM_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_elem"
      "s_float)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array);\012  double* (*get_elems_double)(SPVM_ENV*"
      " env, SPVM_VALUE* stack, SPVM_OBJ* array);\012  SPVM_OBJ* (*get_elem_object)(SPVM_ENV* env, SPVM_VALUE*"
      " stack, SPVM_OBJ* array, int32_t index);\012  SPVM_OBJ* (*get_elem_string)(SPVM_ENV* env, SPVM_VALUE* s"
      "tack, SPVM_OBJ* array, int32_t index);\012  void (*set_elem_object)(SPVM_ENV* env, SPVM_VALUE* stack, S"
      "PVM_OBJ* array, int32_t index, SPVM_OBJ* object);\012  void (*set_elem_string)(SPVM_ENV* env, SPVM_VALU"
      "E* stack, SPVM_OBJ* array, int32_t index, SPVM_OBJ* string);\012  const char* (*get_chars)(SPVM_ENV* en"
      "v, SPVM_VALUE* stack, SPVM_OBJ* string_object);\012  int32_t (*get_bool_object_value)(SPVM_ENV* env, SP"
      "VM_VALUE* stack, SPVM_OBJ* bool_object);\012  SPVM_OBJ* (*concat_no_mortal)(SPVM_ENV* env, SPVM_VALUE* "
      "stack, SPVM_OBJ* string1, SPVM_OBJ* string2);\012  SPVM_OBJ* (*concat)(SPVM_ENV* env, SPVM_VALUE* stack"
      ", SPVM_OBJ* string1, SPVM_OBJ* string2);\012  void (*shorten)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OB"
      "J* string, int32_t new_length);\012  void (*make_read_only)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ*"
      " string);\012  int32_t (*is_read_only)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* string);\012  void (*pr"
      "int)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* string);\012  void (*print_stderr)(SPVM_ENV* env, SPVM"
      "_VALUE* stack, SPVM_OBJ* string);\012  SPVM_OBJ* (*dump_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SP"
      "VM_OBJ* object);\012  SPVM_OBJ* (*dump)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  const ch"
      "ar* (*dumpc)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  SPVM_OBJ* (*copy_no_mortal)(SPVM"
      "_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  SPVM_OBJ* (*copy)(SPVM_ENV* env, SPVM_VALUE* stac"
      "k, SPVM_OBJ* object);\012  const char* (*get_spvm_version_string)(SPVM_ENV* env, SPVM_VALUE* stack);\012  "
      "double (*get_spvm_version_number)(SPVM_ENV* env, SPVM_VALUE* stack);\012  const char* (*get_version_str"
      "ing)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  double (*get_version_n"
      "umber)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  int32_t (*die)(SPVM_"
      "ENV* env, SPVM_VALUE* stack, const char* exception_format, const char* func_name, const 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_VALUE* stack, SPVM_OBJ* exception);\012  SPVM_OBJ* (*new_stack_trace_no_"
      "mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* exception, SPVM_NATIVE_METHOD* method, int32_t l"
      "ine);\012  SPVM_OBJ* (*new_stack_trace)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* exception, SPVM_NAT"
      "IVE_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, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int32_t (*is_array)(SPVM_ENV*"
      " env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int32_t (*is_object_array)(SPVM_ENV* env, 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_array)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int32_t"
      " (*isa)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_BASIC_TYPE* basic_type, int3"
      "2_t type_dimension);\012  int32_t (*isa_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, co"
      "nst char* basic_type_name, int32_t type_dimension);\012  int32_t (*is_type)(SPVM_ENV* env, SPVM_VALUE* "
      "stack, SPVM_OBJ* object, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t type_dimension);\012  int32_t (*is"
      "_type_by_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, const char* basic_type_name, int3"
      "2_t type_dimension);\012  int32_t (*elem_isa)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, SPVM_O"
      "BJ* element);\012  int32_t (*get_elem_size)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array);\012  SPVM_"
      "OBJ* (*get_type_name_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  SPVM_OBJ* (*g"
      "et_type_name)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  SPVM_OBJ* (*get_compile_type_na"
      "me_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 ch"
      "ar* 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_stac"
      "k_top);\012  int32_t (*push_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int32_t (*we"
      "aken)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** object_address);\012  int32_t (*isweak)(SPVM_ENV* en"
      "v, 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 errn"
      "o_value, int32_t length);\012  SPVM_OBJ* (*strerror_string_nolen)(SPVM_ENV* env, SPVM_VALUE* stack, int"
      "32_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_val"
      "ue);\012  int32_t (*is_binary_compatible_object)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012 "
      " int32_t (*is_binary_compatible_stack)(SPVM_ENV* env, SPVM_VALUE* stack);\012  SPVM_VALUE* (*new_stack)"
      "(SPVM_ENV* env);\012  void (*free_stack)(SPVM_ENV* env, SPVM_VALUE* stack);\012  SPVM_OBJ* (*get_field_obj"
      "ect_defined_and_has_pointer_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_name, int32_t line);\012  SPVM_"
      "OBJ** (*get_field_object_ref)(SPVM_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* ob"
      "ject, const char* field_name, int32_t* error_id, const char* func_name, const char* file, int32_t li"
      "ne);\012  int32_t (*check_bootstrap_method)(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_na"
      "me);\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  vo"
      "id* (*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* stack, SPVM_OBJ* string, const char* func_name, const char* file, int32"
      "_t line);\012  FILE* (*spvm_stdin)(SPVM_ENV* env, SPVM_VALUE* stack);\012  FILE* (*spvm_stdout)(SPVM_ENV* "
      "env, SPVM_VALUE* stack);\012  FILE* (*spvm_stderr)(SPVM_ENV* env, SPVM_VALUE* stack);\012  SPVM_OBJ* (*new"
      "_array_proto_element_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* element, int32_t length)"
      ";\012  SPVM_OBJ* (*new_array_proto_element)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* element, int32_"
      "t length);\012  int32_t (*get_byte_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* byte_objec"
      "t);\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_flo"
      "at_object_value)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* float_object);\012  double (*get_double_ob"
      "ject_value)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* double_object);\012  int32_t (*no_free)(SPVM_EN"
      "V* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  void (*set_no_free)(SPVM_ENV* env, SPVM_VALUE* stack"
      ", SPVM_OBJ* object, int32_t no_free);\012  char* (*get_stack_tmp_buffer)(SPVM_ENV* env, SPVM_VALUE* sta"
      "ck);\012  void (*print_exception_to_stderr)(SPVM_ENV* env, SPVM_VALUE* stack);\012  SPVM_OBJ* (*dump_objec"
      "t_internal)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int32_t (*get_seed)(SPVM_ENV* env"
      ", SPVM_VALUE* stack);\012  void (*set_seed)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t seed);\012  int32_t "
      "(*seed_initialized)(SPVM_ENV* env, SPVM_VALUE* stack);\012  const char* (*get_basic_type_name_in_versio"
      "n_from)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  int32_t (*set_comma"
      "nd_info_warning)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t warning);\012  void (*destroy_cache_class_va"
      "rs)(SPVM_ENV* env, SPVM_VALUE* stack);\012  SPVM_VALUE* (*new_stack_with_all_method_call_permitted)(SPV"
      "M_ENV* env);\012  int32_t (*call_instance_method_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, const cha"
      "r* method_name, int32_t args_width);\012  int32_t (*call_instance_method)(SPVM_ENV* env, SPVM_VALUE* st"
      "ack, const char* method_name, int32_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_n"
      "ame, const char* file_name, int32_t line);\012  int32_t (*call_instance_method_no_mortal_less_check_arg"
      "s)(SPVM_ENV* env, SPVM_VALUE* stack, const char* method_name, int32_t args_width, const char* decl_a"
      "rgs_signature, const char* func_name, 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_object_array)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  in"
      "t32_t (*exists_field)(SPVM_ENV* env, 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* f"
      "ield_name, int32_t* error_id, const char* func_name, const char* file, int32_t line);\012  void (*delet"
      "e_field)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, SPVM_NATIVE_FIELD* field);\012  void (*del"
      "ete_field_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  void (*make_fixed_length)(SP"
      "VM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  int32_t (*is_fixed_length)(SPVM_ENV* env, SPVM_"
      "VALUE* stack, SPVM_OBJ* object);\012  int32_t (*set_length)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ*"
      " object, int32_t length);\012  int32_t (*capacity)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);"
      "\012  int32_t (*set_capacity)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t 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_to_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  float (*numeric_object_to_float)(SPVM_ENV* env, SPVM_VALUE* stack, SP"
      "VM_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_s"
      "tring)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t* error_id);\012  int32_t (*is_numeri"
      "c_object)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  void (*say_stderr)(SPVM_ENV* env, S"
      "PVM_VALUE* stack, SPVM_OBJ* string);\012  int32_t (*get_call_depth)(SPVM_ENV* env, SPVM_VALUE* stack);\012"
      "  SPVM_VALUE* (*get_caller_info_stack)(SPVM_ENV* env, SPVM_VALUE* stack);\012  int32_t (*get_caller_inf"
      "o_stack_record_size)(SPVM_ENV* env, 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 li"
      "ne);\012  SPVM_OBJ* (*build_exception_message_no_mortal)(SPVM_ENV* env, SPVM_VALUE* stack, int32_t leve"
      "l);\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_V"
      "ALUE* stack, SPVM_OBJ* obj_string, int32_t* error_id);\012  void (*set_byte_object_value)(SPVM_ENV* env"
      ", SPVM_VALUE* stack, SPVM_OBJ* byte_object, int8_t value);\012  void (*set_short_object_value)(SPVM_ENV"
      "* env, SPVM_VALUE* stack, SPVM_OBJ* short_object, int16_t value);\012  void (*set_int_object_value)(SPV"
      "M_ENV* env, SPVM_VALUE* stack, SPVM_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_o"
      "bject_value)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* double_object, double value);\012};\012\012struct sp"
      "vm_env_api {\012  SPVM_API_ALLOCATOR* allocator;\012  SPVM_API_STRING_BUFFER* string_buffer;\012  SPVM_API_CO"
      "MPILER* compiler;\012  SPVM_API_CLASS_FILE* class_file;\012  SPVM_API_RUNTIME* runtime;\012  SPVM_API_BASIC_T"
      "YPE* 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_inst"
      "ance)(SPVM_NATIVE_ALLOCATOR* allocator);\012};\012\012struct spvm_api_arg {\012  const char* (*get_name)(SPVM_NA"
      "TIVE_RUNTIME* runtime, SPVM_NATIVE_ARG* arg);\012  int32_t (*get_index)(SPVM_NATIVE_RUNTIME* runtime, S"
      "PVM_NATIVE_ARG* arg);\012  SPVM_NATIVE_BASIC_TYPE* (*get_basic_type)(SPVM_NATIVE_RUNTIME* runtime, SPVM"
      "_NATIVE_ARG* arg);\012  int32_t (*get_type_dimension)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_ARG* ar"
      "g);\012  int32_t (*get_type_flag)(SPVM_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_curren"
      "t_method)(SPVM_NATIVE_RUNTIME* runtime, 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* runt"
      "ime, SPVM_NATIVE_ARG* arg);\012};\012\012struct spvm_api_basic_type {\012  const char* (*get_name)(SPVM_NATIVE_R"
      "UNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  int32_t (*get_id)(SPVM_NATIVE_RUNTIME* runti"
      "me, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  int32_t (*get_category)(SPVM_NATIVE_RUNTIME* runtime, SPV"
      "M_NATIVE_BASIC_TYPE* basic_type);\012  SPVM_NATIVE_BASIC_TYPE* (*get_parent)(SPVM_NATIVE_RUNTIME* runti"
      "me, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  const char* (*get_version_string)(SPVM_NATIVE_RUNTIME* ru"
      "ntime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  const char* (*get_class_dir)(SPVM_NATIVE_RUNTIME* runt"
      "ime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  const char* (*get_class_rel_file)(SPVM_NATIVE_RUNTIME* r"
      "untime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  int32_t (*is_pointer)(SPVM_NATIVE_RUNTIME* runtime, S"
      "PVM_NATIVE_BASIC_TYPE* basic_type);\012  int32_t (*is_anon)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_B"
      "ASIC_TYPE* basic_type);\012  SPVM_NATIVE_CLASS_VAR* (*get_class_var_by_index)(SPVM_NATIVE_RUNTIME* runt"
      "ime, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t class_var_index);\012  SPVM_NATIVE_CLASS_VAR* (*get_cl"
      "ass_var_by_name)(SPVM_NATIVE_RUNTIME* 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_B"
      "ASIC_TYPE* basic_type, int32_t field_index);\012  SPVM_NATIVE_FIELD* (*get_field_by_name)(SPVM_NATIVE_R"
      "UNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type, const char* field_name);\012  int32_t (*get_fields"
      "_length)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  SPVM_NATIVE_METHOD* (*"
      "get_method_by_index)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t metho"
      "d_index);\012  SPVM_NATIVE_METHOD* (*get_method_by_name)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASI"
      "C_TYPE* basic_type, const char* method_name);\012  int32_t (*get_methods_length)(SPVM_NATIVE_RUNTIME* r"
      "untime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  SPVM_NATIVE_BASIC_TYPE* (*get_anon_basic_type_by_inde"
      "x)(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* basi"
      "c_type);\012  int32_t (*has_interface)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type"
      ", SPVM_NATIVE_BASIC_TYPE* interface_basic_type);\012  int32_t (*is_super_class)(SPVM_NATIVE_RUNTIME* ru"
      "ntime, SPVM_NATIVE_BASIC_TYPE* dist_basic_type, SPVM_NATIVE_BASIC_TYPE* src_basic_type);\012  const cha"
      "r* (*get_file)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  SPVM_NATIVE_RUNT"
      "IME* (*get_current_runtime)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  SPV"
      "M_NATIVE_BASIC_TYPE* (*get_basic_type_in_version_from)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BAS"
      "IC_TYPE* basic_type);\012  int32_t (*get_fields_size)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_T"
      "YPE* basic_type);\012  int32_t (*get_monitor_var_type)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_"
      "TYPE* basic_type, int32_t* ret_basic_type_id, int32_t* ret_dimension, int32_t* ret_flag);\012  int32_t "
      "(*has_monitor_var)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012  int32_t (*is"
      "_generated_from_anon_method)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type);\012};\012\012"
      "struct spvm_api_class_file {\012  const char* (*get_class_name)(SPVM_NATIVE_COMPILER* compiler, SPVM_NA"
      "TIVE_CLASS_FILE* class_file);\012  const 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* c"
      "lass_file, const char* dir);\012  const char* (*get_rel_file)(SPVM_NATIVE_COMPILER* compiler, SPVM_NATI"
      "VE_CLASS_FILE* class_file);\012  void (*set_rel_file)(SPVM_NATIVE_COMPILER* compiler, SPVM_NATIVE_CLASS"
      "_FILE* class_file, const char* rel_file);\012  const char* (*get_content)(SPVM_NATIVE_COMPILER* compile"
      "r, SPVM_NATIVE_CLASS_FILE* class_file);\012  void (*set_content)(SPVM_NATIVE_COMPILER* compiler, SPVM_N"
      "ATIVE_CLASS_FILE* class_file, const char* content);\012  int32_t (*get_content_length)(SPVM_NATIVE_COMP"
      "ILER* compiler, SPVM_NATIVE_CLASS_FILE* class_file);\012  void (*set_content_length)(SPVM_NATIVE_COMPIL"
      "ER* compiler, SPVM_NATIVE_CLASS_FILE* class_file, int32_t content_length);\012};\012\012struct spvm_api_class"
      "_var {\012  const char* (*get_name)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_CLASS_VAR* 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)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_CLASS_VAR* class_var);\012  int"
      "32_t (*get_type_dimension)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_CLASS_VAR* class_var);\012  int32_"
      "t (*get_type_flag)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_CLASS_VAR* class_var);\012  SPVM_NATIVE_BA"
      "SIC_TYPE* (*get_current_basic_type)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_CLASS_VAR* class_var);"
      "\012  int32_t (*is_cache)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_CLASS_VAR* class_var);\012};\012\012struct s"
      "pvm_api_compiler {\012  SPVM_NATIVE_COMPILER* (*new_instance)(void);\012  void (*free_instance)(SPVM_NATIV"
      "E_COMPILER* compiler);\012  int32_t (*get_start_line)(SPVM_NATIVE_COMPILER* compiler);\012  void (*set_sta"
      "rt_line)(SPVM_NATIVE_COMPILER* compiler, int32_t start_line);\012  const char* (*get_start_file)(SPVM_N"
      "ATIVE_COMPILER* compiler);\012  void (*set_start_file)(SPVM_NATIVE_COMPILER* compiler, const char* star"
      "t_file);\012  int32_t (*get_include_dirs_length )(SPVM_NATIVE_COMPILER* compiler);\012  const char* (*get_"
      "include_dir )(SPVM_NATIVE_COMPILER* compiler, int32_t index);\012  void (*add_include_dir)(SPVM_NATIVE_"
      "COMPILER* compiler, const char* include_dir);\012  void (*clear_include_dirs)(SPVM_NATIVE_COMPILER* com"
      "piler);\012  void (*add_class_file)(SPVM_NATIVE_COMPILER* compiler, const char* class_name);\012  void (*d"
      "elete_class_file)(SPVM_NATIVE_COMPILER* compiler, const char* class_name);\012  SPVM_NATIVE_CLASS_FILE*"
      " (*get_class_file)(SPVM_NATIVE_COMPILER* compiler, const char* class_name);\012  int32_t (*compile)(SPV"
      "M_NATIVE_COMPILER* compiler, const char* basic_type_name);\012  const char* (*get_error_message)(SPVM_N"
      "ATIVE_COMPILER* compiler, int32_t index);\012  int32_t (*get_error_messages_length)(SPVM_NATIVE_COMPILE"
      "R* compiler);\012  SPVM_NATIVE_RUNTIME* (*get_runtime)(SPVM_NATIVE_COMPILER* compiler);\012  void (*prepen"
      "d_include_dir)(SPVM_NATIVE_COMPILER* compiler, const char* include_dir);\012  int32_t (*compile_anon_cl"
      "ass)(SPVM_NATIVE_COMPILER* compiler, const char* source, const char** anon_basic_type_name_ptr);\012  i"
      "nt32_t (*compile_script)(SPVM_NATIVE_COMPILER* compiler, const char* source, const char** anon_basic"
      "_type_name_ptr);\012};\012\012struct spvm_api_field {\012  const char* (*get_name)(SPVM_NATIVE_RUNTIME* runtime,"
      " SPVM_NATIVE_FIELD* field);\012  int32_t (*get_index)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_FIELD* "
      "field);\012  int32_t (*get_offset)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_FIELD* field);\012  SPVM_NATI"
      "VE_BASIC_TYPE* (*get_basic_type)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_FIELD* field);\012  int32_t "
      "(*get_type_dimension)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_FIELD* field);\012  int32_t (*get_type_"
      "flag)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_FIELD* field);\012  SPVM_NATIVE_BASIC_TYPE* (*get_curre"
      "nt_basic_type)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_FIELD* field);\012  int32_t (*get_exists_offse"
      "t)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_FIELD* field);\012  int32_t (*get_exists_bit)(SPVM_NATIVE_"
      "RUNTIME* runtime, SPVM_NATIVE_FIELD* field);\012};\012\012struct spvm_api_method {\012  const char* (*get_name)("
      "SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_index)(SPVM_NATIVE_RUNTIM"
      "E* runtime, SPVM_NATIVE_METHOD* method);\012  SPVM_NATIVE_BASIC_TYPE* (*get_return_basic_type)(SPVM_NAT"
      "IVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_return_type_dimension)(SPVM_NATIV"
      "E_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_return_type_flag)(SPVM_NATIVE_RUNTI"
      "ME* runtime, SPVM_NATIVE_METHOD* method);\012  SPVM_NATIVE_ARG* (*get_arg_by_index)(SPVM_NATIVE_RUNTIME"
      "* runtime, SPVM_NATIVE_METHOD* method, int32_t arg_index);\012  int32_t (*get_args_length)(SPVM_NATIVE_"
      "RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_required_args_length)(SPVM_NATIVE_RUN"
      "TIME* runtime, SPVM_NATIVE_METHOD* method);\012  SPVM_NATIVE_BASIC_TYPE* (*get_current_basic_type)(SPVM"
      "_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  SPVM_NATIVE_OPCODE* (*get_opcode_by_index)("
      "SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method, int32_t opcode_index);\012  int32_t (*get_opc"
      "odes_length)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*is_class_method)"
      "(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*is_anon)(SPVM_NATIVE_RUNTIME"
      "* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*is_native)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NA"
      "TIVE_METHOD* method);\012  int32_t (*is_precompile)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* m"
      "ethod);\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_shor"
      "t_vars_width)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_int_vars_wi"
      "dth)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_long_vars_width)(SPV"
      "M_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_float_vars_width)(SPVM_NATIV"
      "E_RUNTIME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_double_vars_width)(SPVM_NATIVE_RUNT"
      "IME* runtime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_object_vars_width)(SPVM_NATIVE_RUNTIME* r"
      "untime, SPVM_NATIVE_METHOD* method);\012  int32_t (*get_ref_vars_width)(SPVM_NATIVE_RUNTIME* runtime, S"
      "PVM_NATIVE_METHOD* method);\012  int32_t (*get_mortal_stack_length)(SPVM_NATIVE_RUNTIME* runtime, SPVM_"
      "NATIVE_METHOD* method);\012  void* (*get_native_address)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METH"
      "OD* method);\012  void (*set_native_address)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method, "
      "void* address);\012  void* (*get_precompile_address)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* "
      "method);\012  void (*set_precompile_address)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* method, "
      "void* address);\012  int32_t (*is_precompile_fallback)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD"
      "* method);\012  void (*set_is_precompile_fallback)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_METHOD* me"
      "thod, int32_t is_precompile_fallback);\012  const char* (*get_args_signature)(SPVM_NATIVE_RUNTIME* runt"
      "ime, SPVM_NATIVE_METHOD* method);\012  const char* (*get_abs_name)(SPVM_NATIVE_RUNTIME* runtime, SPVM_N"
      "ATIVE_METHOD* method);\012};\012\012struct spvm_api_runtime {\012  int32_t (*get_object_data_offset)(SPVM_NATIVE"
      "_RUNTIME* runtime);\012  int32_t (*get_object_ref_count_offset)(SPVM_NATIVE_RUNTIME* runtime);\012  int32_"
      "t (*get_object_length_offset)(SPVM_NATIVE_RUNTIME* runtime);\012  SPVM_NATIVE_BASIC_TYPE* (*get_basic_t"
      "ype_by_id)(SPVM_NATIVE_RUNTIME* runtime, int32_t basic_type_id);\012  SPVM_NATIVE_BASIC_TYPE* (*get_bas"
      "ic_type_by_name)(SPVM_NATIVE_RUNTIME* runtime, const char* basic_type_name);\012  int32_t (*get_basic_t"
      "ypes_length)(SPVM_NATIVE_RUNTIME* runtime);\012  void (*build_precompile_class_source)(SPVM_NATIVE_RUNT"
      "IME* 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* st"
      "ring_buffer, SPVM_NATIVE_METHOD* method);\012  SPVM_NATIVE_COMPILER* (*get_compiler)(SPVM_NATIVE_RUNTIM"
      "E* runtime);\012  void (*set_compiler)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_COMPILER* compiler);\012 "
      " FILE* (*get_spvm_stdin)(SPVM_NATIVE_RUNTIME* runtime);\012  FILE* (*get_spvm_stdout)(SPVM_NATIVE_RUNTI"
      "ME* 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  v"
      "oid* method_begin_cb;\012  void* method_end_cb;\012  void* object_data_offset;\012  void* object_length_offse"
      "t;\012  void* object_capacity_offset;\012  void* stack_index_call_depth;\012  void* stack_index_caller_info_s"
      "tack;\012  void* stack_index_caller_info_stack_record_size;\012};\012\012struct spvm_api_mutex {\012  SPVM_NATIVE_M"
      "UTEX* (*new_instance)(SPVM_ENV* env, SPVM_VALUE* stack);\012  void (*free_instance)(SPVM_ENV* env, SPVM"
      "_VALUE* stack, SPVM_NATIVE_MUTEX* mutex);\012  void (*lock)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATI"
      "VE_MUTEX* mutex);\012  void (*unlock)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_MUTEX* mutex);\012  vo"
      "id (*reader_lock)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_MUTEX* mutex);\012  void (*reader_unloc"
      "k)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_NATIVE_MUTEX* mutex);\012};\012\012struct spvm_api_string_buffer {\012"
      "  SPVM_NATIVE_STRING_BUFFER* (*new_instance)(SPVM_NATIVE_ALLOCATOR* allocator, int32_t capacity);\012  "
      "void (*free_instance)(SPVM_NATIVE_STRING_BUFFER* string_buffer);\012  const char* (*get_string)(SPVM_NA"
      "TIVE_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_count)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  void (*"
      "dec_ref_count)(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object);\012  char* (*get_stack_tmp_buffer)("
      "SPVM_ENV* env, SPVM_VALUE* stack);\012  void (*leave_scope_local)(SPVM_ENV* env, SPVM_VALUE* stack, SPV"
      "M_OBJ** object_vars, int32_t* mortal_stack_typed_var_index, int32_t* mortal_stack_top_ptr, int32_t* "
      "mortal_stack_tops, int32_t mortal_stack_tops_index);\012  size_t (*c_strlen)(SPVM_ENV* env, SPVM_VALUE*"
      " stack, const char* str);\012  void* (*c_memcpy)(SPVM_ENV* env, SPVM_VALUE* stack, void* dest, const vo"
      "id* src, size_t n);\012  void* (*c_memset)(SPVM_ENV* env, SPVM_VALUE* stack, void* s, int c, size_t n);"
      "\012  int (*c_memcmp)(SPVM_ENV* env, SPVM_VALUE* stack, const void* s1, const void* s2, size_t n);\012  lo"
      "ng long (*c_strtoll)(SPVM_ENV* env, SPVM_VALUE* stack, const char* str, char** endptr, int base);\012  "
      "float (*c_strtof)(SPVM_ENV* env, SPVM_VALUE* stack, const char* str, char** endptr);\012  double (*c_st"
      "rtod)(SPVM_ENV* env, SPVM_VALUE* stack, const char* str, char** endptr);\012  int (*c_fputs)(SPVM_ENV* "
      "env, SPVM_VALUE* stack, const char* s, void* stream);\012  int (*c_fgetc)(SPVM_ENV* env, SPVM_VALUE* st"
      "ack, void* stream);\012  int (*c_snprintf_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_typ"
      "e_dimension, int32_t dist_type_flag, SPVM_NATIVE_BASIC_TYPE* src_basic_type, int32_t src_type_dimens"
      "ion, int32_t src_type_flag);\012  int32_t (*get_type_width)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_B"
      "ASIC_TYPE* basic_type, int32_t type_dimension, int32_t type_flag);\012  int32_t (*is_object_type)(SPVM_"
      "NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t type_dimension, int32_t type_fl"
      "ag);\012  int32_t (*is_any_object_type)(SPVM_NATIVE_RUNTIME* runtime, SPVM_NATIVE_BASIC_TYPE* basic_typ"
      "e, 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_flag);\012  int32_t (*is_numeric_type)(SPVM_NATIVE_RUNTIME* runtime, SP"
      "VM_NATIVE_BASIC_TYPE* basic_type, int32_t type_dimension, int32_t type_flag);\012  int32_t (*is_class_t"
      "ype)(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_VOID,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_BYTE,\012  SPVM_NATIVE_C_BASIC_TYPE"
      "_ID_SHORT,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_INT,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_LONG,\012  SPVM_NATIVE_C_BA"
      "SIC_TYPE_ID_FLOAT,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_DOUBLE,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_STRING,\012  SPV"
      "M_NATIVE_C_BASIC_TYPE_ID_ANY_OBJECT,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_BYTE_CLASS,\012  SPVM_NATIVE_C_BASIC"
      "_TYPE_ID_SHORT_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_INT_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_LONG_CL"
      "ASS,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_FLOAT_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_DOUBLE_CLASS,\012  SPVM_N"
      "ATIVE_C_BASIC_TYPE_ID_BOOL_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS,\012  SPVM_NATIVE_C_BASIC_T"
      "YPE_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  SPVM_NATIVE_C_BASIC_TYPE_ID_SPVM_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_I"
      "D_ERROR_METHOD_CALL_NOT_PERMITTED_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_ID_STRINGABLE_CLASS,\012  SPVM_NATI"
      "VE_C_BASIC_TYPE_ID_COUNTABLE_CLASS,\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_NATIV"
      "E_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_ST"
      "RING,\012  SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_CLASS,\012  SPVM_NATIVE_C_BASIC_TYPE_CATEGORY_INTERFACE,\012  SP"
      "VM_NATIVE_C_BASIC_TYPE_CATEGORY_ANY_OBJECT,\012};\012\012enum {\012  SPVM_NATIVE_C_TYPE_FLAG_REF = 1,\012  SPVM_NAT"
      "IVE_C_TYPE_FLAG_MUTABLE = 2,\012  SPVM_NATIVE_C_TYPE_FLAG_VARARGS = 4,\012};\012\012enum {\012  SPVM_NATIVE_C_STACK"
      "_TMP_BUFFER_SIZE = 512,\012};\012\012// These 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 (heade"
      "rs-stripped) */\012// Copyright (c) 2023 Yuki Kimoto\012// MIT License\012\012#ifndef SPVM_IMPLEMENT_H\012#define S"
      "PVM_IMPLEMENT_H\012\012// Do not include any header files.\012// SPVM precompiled code will be executed in a "
      "security sandbox via JIT in the future.\012\012\012\012\012\012\012\012\012\012\012enum {\012  SPVM_IMPLEMENT_C_EXCEPTION_ASSIGN_NOT_SAT"
      "ISFY_ASSIGNMENT_REQUIREMENT,\012  SPVM_IMPLEMENT_C_EXCEPTION_ASSIGN_READ_ONLY_STRING_TO_MUTABLE_TYPE,\012 "
      " SPVM_IMPLEMENT_C_EXCEPTION_DIVIDE_ZERO,\012  SPVM_IMPLEMENT_C_EXCEPTION_STRING_CONCAT_LEFT_UNDEFINED,\012"
      "  SPVM_IMPLEMENT_C_EXCEPTION_STRING_CONCAT_RIGHT_UNDEFINED,\012  SPVM_IMPLEMENT_C_EXCEPTION_NEW_OBJECT_"
      "FAILED,\012  SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRAY_FAILED,\012  SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRRAY_LENGT"
      "H_SMALL,\012  SPVM_IMPLEMENT_C_EXCEPTION_NEW_STRING_FAILED,\012  SPVM_IMPLEMENT_C_EXCEPTION_NEW_STRING_LEN"
      "_FAILED,\012  SPVM_IMPLEMENT_C_EXCEPTION_NEW_STRING_LEN_LENGTH_SMALL,\012  SPVM_IMPLEMENT_C_EXCEPTION_ARRA"
      "Y_UNDEFINED,\012  SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE,\012  SPVM_IMPLEMENT_C_EXCE"
      "PTION_ELEMENT_ASSIGN_NOT_SATISFY_ASSIGNMENT_REQUIREMENT,\012  SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_I"
      "NVOCANT_UNDEFINED,\012  SPVM_IMPLEMENT_C_EXCEPTION_WEAKEN_BACK_REFERENCE_ALLOCATION_FAILED,\012  SPVM_IMPL"
      "EMENT_C_EXCEPTION_ERROR_BASIC_TYPE_NOT_FOUND,\012  SPVM_IMPLEMENT_C_EXCEPTION_ERROR_FIELD_NOT_FOUND,\012  "
      "SPVM_IMPLEMENT_C_EXCEPTION_ERROR_CLASS_VAR_NOT_FOUND,\012  SPVM_IMPLEMENT_C_EXCEPTION_ERROR_METHOD_NOT_"
      "FOUND,\012  SPVM_IMPLEMENT_C_EXCEPTION_CALL_INSTANCE_METHOD_INVOCANT_UNDEF,\012  SPVM_IMPLEMENT_C_EXCEPTIO"
      "N_CALL_INSTANCE_METHOD_IMPLEMENT_NOT_FOUND,\012  SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED,\012};\012\012\012\012static"
      " const char* SPVM_IMPLEMENT_STRING_LITERALS[] = {\012  \"An assignment failed. %s type cannot be assigne"
      "d to %s type.\",\012  \"A read-only string cannnot be cast to mutable string type.\",\012  \"A value of an int"
      "eger type cannnot be divided by 0.\",\012  \"The left operand of . operator must be defined.\",\012  \"The rig"
      "ht operand of . operator must be defined.\",\012  \"A new operator failed. Memory allocation failed.\",\012  "
      "\"A new operator to create an array failed. Memory allocation failed.\",\012  \"A new operator to create a"
      "n array failed. The length must be a non-negative integer.\",\012  \"A string creation failed. Memory all"
      "ocation failed.\",\012  \"The new_string_len operator failed. Memory allocation failed.\",\012  \"The new_stri"
      "ng_len operator failed. The length of the string must be a non-negative integer.\",\012  \"An array acces"
      "s failed. The array must be defined.\",\012  \"An array access failed. The index is out of range.\",\012  \"An"
      " array element set failed. %s type cannot be assigned to %s type.\",\012  \"An field access failed. The i"
      "nvocant must be defined.\",\012  \"The weaken operator failed. The memory allocation for the weaken back "
      "reference failed.\",\012  \"%s basic type is not found.\",\012  \"%s#%s field is not found.\",\012  \"%s#%s class v"
      "ariable is not found.\",\012  \"%s#%s method is not found.\",\012  \"Can't call %s method on undefined value.\""
      ",\012  \"An instance method call failed. %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_IMPLEMEN"
      "T_C_EXCEPTION_COMPARISON_NE,\012  SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_GT,\012  SPVM_IMPLEMENT_C_EXCEPTIO"
      "N_COMPARISON_GE,\012  SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_LT,\012  SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON"
      "_LE,\012  SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_CMP,\012};\012\012#define GET_DATA_ADDRESS(env, stack, object) ("
      "(intptr_t)*(void**)((intptr_t)(SPVM_OBJ*)object + (intptr_t)env->api->runtime->object_data_offset))\012"
      "#define GET_LENGTH(env, stack, object) (*(int32_t*)((intptr_t)(SPVM_OBJ*)object + (intptr_t)env->api"
      "->runtime->object_length_offset))\012#define GET_CAPACITY(env, stack, object) (*(int32_t*)((intptr_t)(S"
      "PVM_OBJ*)object + (intptr_t)env->api->runtime->object_capacity_offset))\012\012static inline SPVM_NATIVE_B"
      "ASIC_TYPE* SPVM_IMPLEMENT_GET_BASIC_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(en"
      "v, stack);\012  \012  SPVM_NATIVE_BASIC_TYPE* basic_type = env->api->runtime->get_basic_type_by_name(env->"
      "runtime, basic_type_name);\012  \012  if (!basic_type) {\012    SPVM_VALUE args[1];\012    args[0].address = (vo"
      "id*)basic_type_name;\012    env->api->internal->c_snprintf_len(env, stack, tmp_buffer, SPVM_NATIVE_C_ST"
      "ACK_TMP_BUFFER_SIZE, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ERROR_BASIC_TYPE_NOT_"
      "FOUND], args, 1);\012    \012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, tmp_buf"
      "fer);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERR"
      "OR_CLASS;\012  }\012  \012  return basic_type;\012}\012\012static inline SPVM_NATIVE_FIELD* SPVM_IMPLEMENT_GET_FIELD_B"
      "Y_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 = env->api->internal->get_stack_tmp_buffer(env, stack);\012  \012  SP"
      "VM_NATIVE_FIELD* field = env->get_field_static(env, stack, basic_type_name, field_name);\012  \012  if (!f"
      "ield) {\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_STAC"
      "K_TMP_BUFFER_SIZE, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ERROR_FIELD_NOT_FOUND],"
      " args, 2);\012    \012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, tmp_buffer);\012 "
      "   env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLAS"
      "S;\012    return NULL;\012  }\012  \012  return 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_buffer = env->api->internal->get_stack_tmp_buffer(env, stack);\012  \012  S"
      "PVM_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_STA"
      "CK_TMP_BUFFER_SIZE, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ERROR_FIELD_NOT_FOUND]"
      ", args, 2);\012    \012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, tmp_buffer);\012"
      "    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLA"
      "SS;\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\012static inline int32_t SPVM_IMPLEMENT_GET_FIELD_EXISTS_OFFSET_BY_NAME(S"
      "PVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* field_name, int32_t* error"
      "_id) {\012  \012  char* tmp_buffer = env->api->internal->get_stack_tmp_buffer(env, stack);\012  \012  SPVM_NATIV"
      "E_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*)f"
      "ield_name;\012    env->api->internal->c_snprintf_len(env, stack, tmp_buffer, SPVM_NATIVE_C_STACK_TMP_BU"
      "FFER_SIZE, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ERROR_FIELD_NOT_FOUND], args, 2"
      ");\012    \012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, tmp_buffer);\012    env->"
      "set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    r"
      "eturn -1;\012  }\012  \012  int32_t field_exists_offset = env->api->field->get_exists_offset(env->runtime, fi"
      "eld);\012  \012  return field_exists_offset;\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_buffer = env->api->internal->get_stack_tmp_buffer(env, stack);\012  \012  S"
      "PVM_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_STA"
      "CK_TMP_BUFFER_SIZE, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ERROR_FIELD_NOT_FOUND]"
      ", args, 2);\012    \012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, tmp_buffer);\012"
      "    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLA"
      "SS;\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_CL"
      "ASS_VAR_BY_NAME(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, const char* class_var"
      "_name, int32_t* error_id) {\012  \012  char* tmp_buffer = env->api->internal->get_stack_tmp_buffer(env, st"
      "ack);\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_na"
      "me;\012    args[1].address = (void*)class_var_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_EXC"
      "EPTION_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_CLASS;\012  }\012  \012  return class_var;\012}\012\012static inline SPVM_NATIVE_METHOD*"
      " SPVM_IMPLEMENT_GET_METHOD_BY_NAME(SPVM_ENV* env, SPVM_VALUE* stack, const char* basic_type_name, co"
      "nst char* method_name, int32_t* error_id) {\012  \012  char* tmp_buffer = env->api->internal->get_stack_tm"
      "p_buffer(env, stack);\012  \012  SPVM_NATIVE_METHOD* method = env->get_method(env, stack, basic_type_name,"
      " method_name);\012  \012  if (!method) {\012    SPVM_VALUE args[2];\012    args[0].address = (void*)basic_type_n"
      "ame;\012    args[1].address = (void*)method_name;\012    env->api->internal->c_snprintf_len(env, stack, tm"
      "p_buffer, SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEP"
      "TION_ERROR_METHOD_NOT_FOUND], args, 2);\012    \012    SPVM_OBJ* exception = env->new_string_nolen_no_mort"
      "al(env, stack, tmp_buffer);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATI"
      "VE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  \012  return method;\012}\012\012static inline void SPVM_IMPLEMENT_MOVE_OB"
      "JECT_UNDEF(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** dist_address) {\012  env->assign_object(env, st"
      "ack, dist_address, NULL);\012}\012\012static inline void SPVM_IMPLEMENT_ENABLE_EXISTS_FLAG(SPVM_ENV* env, SPV"
      "M_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_IMPLEMENT_DISABLE_EXISTS_FLAG(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ"
      "* object, int32_t exists_offset, int32_t exists_bit) {\012  \012  uint8_t* block = (uint8_t*)(GET_DATA_ADD"
      "RESS(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 flag = !!(*block & (1 << exists_bit));\012  \012  return flag;\012}\012\012#define "
      "SPVM_IMPLEMENT_DROP_TAG_POINTERS(address) ((SPVM_OBJ*)((intptr_t)address & ~(intptr_t)1))\012\012#define S"
      "PVM_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_MORTA"
      "L(mortal_stack_typed_var_index, mortal_stack_top, object_vars_index) (mortal_stack_typed_var_index[m"
      "ortal_stack_top++] = object_vars_index)\012\012static inline void SPVM_IMPLEMENT_LEAVE_SCOPE(SPVM_ENV* env"
      ", SPVM_VALUE* stack, SPVM_OBJ** object_vars, int32_t* mortal_stack_typed_var_index, int32_t* mortal_"
      "stack_top_ptr, int32_t* mortal_stack_tops, int32_t mortal_stack_tops_index) {\012  if (*mortal_stack_to"
      "p_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_to"
      "ps, 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(o"
      "ut, in1, in2) (out = in1 + in2)\012#define SPVM_IMPLEMENT_ADD_DOUBLE(out, in1, in2) (out = in1 + in2)\012\012"
      "#define SPVM_IMPLEMENT_SUBTRACT_INT(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 = i"
      "n1 - in2)\012#define SPVM_IMPLEMENT_SUBTRACT_DOUBLE(out, in1, in2) (out = in1 - in2)\012\012#define SPVM_IMPL"
      "EMENT_MULTIPLY_INT(out, in1, in2) (out = in1 * in2)\012#define SPVM_IMPLEMENT_MULTIPLY_LONG(out, in1, i"
      "n2) (out = in1 * in2)\012#define SPVM_IMPLEMENT_MULTIPLY_FLOAT(out, in1, in2) (out = in1 * in2)\012#define"
      " SPVM_IMPLEMENT_MULTIPLY_DOUBLE(out, in1, in2) (out = in1 * in2)\012\012#define SPVM_IMPLEMENT_DIVIDE_FLOA"
      "T(out, in1, in2) (out = in1 / in2)\012#define SPVM_IMPLEMENT_DIVIDE_DOUBLE(out, in1, in2) (out = in1 / "
      "in2)\012\012static inline void SPVM_IMPLEMENT_DIVIDE_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, i"
      "nt32_t in1, int32_t in2, int32_t* error_id) {\012  if (__builtin_expect(in2 == 0, 0)) {\012    SPVM_OBJ* e"
      "xception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT"
      "_C_EXCEPTION_DIVIDE_ZERO]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATI"
      "VE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = in1 / in2;\012  }\012}\012\012static inline void SPVM_IM"
      "PLEMENT_DIVIDE_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_nole"
      "n_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_DIVIDE_ZERO]);\012   "
      " env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;"
      "\012  }\012  else {\012    *out = in1 / in2;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_DIVIDE_UNSIGNED_INT(SPV"
      "M_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_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_DIVIDE_UNSIGNED_LONG(SPVM_"
      "ENV* env, SPVM_VALUE* stack, int64_t* out, int64_t in1, int64_t in2, int32_t* error_id) {\012  if (__bu"
      "iltin_expect(in2 == 0, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, S"
      "PVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_DIVIDE_ZERO]);\012    env->set_exception(env, "
      "stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = "
      "(uint64_t)in1 / (uint64_t)in2;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_MODULO_INT(SPVM_ENV* env, SP"
      "VM_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_IMPLEMEN"
      "T_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_DIVIDE_ZERO]);\012    env->set_exception(env, stack, excep"
      "tion);\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\012static inline vo"
      "id SPVM_IMPLEMENT_MODULO_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* out, int64_t in1, int64_t i"
      "n2, int32_t* error_id) {\012  if (__builtin_expect(in2 == 0, 0)) {\012    SPVM_OBJ* exception = env->new_s"
      "tring_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_DIVIDE_Z"
      "ERO]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ER"
      "ROR_CLASS;\012  }\012  else {\012    int64_t ret = in1 % in2;\012    if ((in1 < 0) != (in2 < 0) && ret) { ret +="
      " in2; }\012    *out = ret;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_MODULO_UNSIGNED_INT(SPVM_ENV* env, "
      "SPVM_VALUE* stack, int32_t* out, int32_t in1, int32_t in2, int32_t* error_id) {\012  if (__builtin_expe"
      "ct(in2 == 0, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEM"
      "ENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_DIVIDE_ZERO]);\012    env->set_exception(env, stack, exc"
      "eption);\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_ENV* env, SP"
      "VM_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_IMPLEMEN"
      "T_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_DIVIDE_ZERO]);\012    env->set_exception(env, stack, excep"
      "tion);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = (uint64_t)in"
      "1 % (uint64_t)in2;\012  }\012}\012\012#define SPVM_IMPLEMENT_LEFT_SHIFT_INT(out, in1, in2) (out = in1 << in2)\012#d"
      "efine SPVM_IMPLEMENT_LEFT_SHIFT_LONG(out, in1, in2) (out = in1 << in2)\012\012#define SPVM_IMPLEMENT_RIGHT"
      "_ARITHMETIC_SHIFT_INT(out, in1, in2) (out = in1 >> in2)\012#define SPVM_IMPLEMENT_RIGHT_ARITHMETIC_SHIF"
      "T_LONG(out, in1, in2) (out = in1 >> in2)\012\012#define SPVM_IMPLEMENT_RIGHT_LOGICAL_SHIFT_INT(out, in1, i"
      "n2) (out = (int32_t)((uint32_t)in1 >> in2))\012#define SPVM_IMPLEMENT_RIGHT_LOGICAL_SHIFT_LONG(out, in1"
      ", in2) (out = (int64_t)((uint64_t)in1 >> in2))\012\012#define SPVM_IMPLEMENT_BIT_AND_INT(out, in1, in2) (o"
      "ut = in1 & in2)\012#define SPVM_IMPLEMENT_BIT_AND_LONG(out, in1, in2) (out = in1 & in2)\012\012#define SPVM_I"
      "MPLEMENT_BIT_OR_INT(out, in1, in2) (out = in1 | in2)\012#define SPVM_IMPLEMENT_BIT_OR_LONG(out, in1, in"
      "2) (out = in1 | in2)\012\012#define SPVM_IMPLEMENT_BIT_XOR_INT(out, in1, in2) (out = in1 ^ in2)\012#define SP"
      "VM_IMPLEMENT_BIT_XOR_LONG(out, in1, in2) (out = in1 ^ in2)\012\012#define SPVM_IMPLEMENT_MOVE_BYTE_ZERO(ou"
      "t) (out = 0)\012#define SPVM_IMPLEMENT_MOVE_SHORT_ZERO(out) (out = 0)\012#define SPVM_IMPLEMENT_MOVE_INT_Z"
      "ERO(out) (out = 0)\012#define SPVM_IMPLEMENT_MOVE_LONG_ZERO(out) (out = 0)\012#define SPVM_IMPLEMENT_MOVE_"
      "FLOAT_ZERO(out) (out = 0)\012#define SPVM_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, int32_t fields_"
      "length) {\012  for (int32_t field_index = 0; field_index < fields_length; field_index++) {\012    *(out + "
      "field_index) = 0;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_MOVE_MULNUM_SHORT_ZERO(SPVM_ENV* env, SPV"
      "M_VALUE* stack, int16_t* out, int32_t fields_length) {\012  for (int32_t field_index = 0; field_index <"
      " fields_length; field_index++) {\012    *(out + field_index) = 0;\012  }\012}\012\012static inline void SPVM_IMPLEM"
      "ENT_MOVE_MULNUM_INT_ZERO(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, int32_t fields_length) {\012  "
      "for (int32_t field_index = 0; field_index < fields_length; field_index++) {\012    *(out + field_index)"
      " = 0;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_MOVE_MULNUM_LONG_ZERO(SPVM_ENV* env, SPVM_VALUE* stac"
      "k, int64_t* out, int32_t fields_length) {\012  for (int32_t field_index = 0; field_index < fields_lengt"
      "h; field_index++) {\012    *(out + field_index) = 0;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_MOVE_MULN"
      "UM_FLOAT_ZERO(SPVM_ENV* env, SPVM_VALUE* stack, float* out, int32_t fields_length) {\012  for (int32_t "
      "field_index = 0; field_index < fields_length; field_index++) {\012    *(out + field_index) = 0;\012  }\012}\012\012"
      "static inline void SPVM_IMPLEMENT_MOVE_MULNUM_DOUBLE_ZERO(SPVM_ENV* env, SPVM_VALUE* stack, double* "
      "out, int32_t fields_length) {\012  for (int32_t field_index = 0; field_index < fields_length; field_ind"
      "ex++) {\012    *(out + field_index) = 0;\012  }\012}\012\012#define SPVM_IMPLEMENT_MOVE_CONSTANT_BYTE(out, in) (out"
      " = in)\012#define SPVM_IMPLEMENT_MOVE_CONSTANT_INT(out, in) (out = in)\012#define SPVM_IMPLEMENT_MOVE_CONS"
      "TANT_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_BYTE(out, in) "
      "(out = in)\012#define SPVM_IMPLEMENT_MOVE_SHORT(out, in) (out = in)\012#define SPVM_IMPLEMENT_MOVE_INT(out"
      ", in) (out = in)\012#define SPVM_IMPLEMENT_MOVE_LONG(out, in) (out = in)\012#define SPVM_IMPLEMENT_MOVE_FL"
      "OAT(out, in) (out = in)\012#define SPVM_IMPLEMENT_MOVE_DOUBLE(out, in) (out = in)\012#define SPVM_IMPLEMEN"
      "T_MOVE_OBJECT(env, stack, out, in) (env->assign_object(env, stack, out, in))\012\012static inline void SPV"
      "M_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  SPV"
      "M_OBJ* object = in;\012  int32_t isa = env->isa(env, stack, object, dist_basic_type, dist_type_dimensio"
      "n);\012  if (isa) {\012    env->assign_object(env, stack, out, in);\012  }\012  else {\012    int32_t scope_id = en"
      "v->enter_scope(env, stack);\012    \012    SPVM_OBJ* obj_src_type_name = env->get_type_name(env, stack, ob"
      "ject);\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_dimens"
      "ion, 0);\012    const char* dist_type_name = env->get_chars(env, stack, obj_dist_type_name);\012    \012    c"
      "har* tmp_buffer = env->api->internal->get_stack_tmp_buffer(env, stack);\012    \012    SPVM_VALUE args[2];"
      "\012    args[0].address = (void*)src_type_name;\012    args[1].address = (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_SATISFY_ASSIGNMEN"
      "T_REQUIREMENT], args, 2);\012    \012    SPVM_OBJ* exception = env->new_string_no_mortal(env, stack, tmp_b"
      "uffer, string_length);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_"
      "BASIC_TYPE_ID_ERROR_CLASS;\012    \012    env->leave_scope(env, stack, scope_id);\012  }\012}\012\012static inline voi"
      "d SPVM_IMPLEMENT_MOVE_OBJECT_CHECK_READ_ONLY_STRING(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out"
      ", SPVM_OBJ* in, int32_t* error_id) {\012  \012  SPVM_OBJ* string = in;\012  if (string && env->is_read_only(e"
      "nv, stack, string)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMP"
      "LEMENT_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, SPVM_OBJ* in,"
      " int32_t is_mutable, int32_t* error_id) {\012  \012  SPVM_OBJ* object = in;\012  if (!object) {\012    env->assi"
      "gn_object(env, stack, out, object);\012  }\012  else if (is_mutable && env->is_read_only(env, stack, objec"
      "t)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LI"
      "TERALS[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 if (env-"
      ">is_numeric_object(env, stack, object)) {\012    env->assign_object(env, stack, out, env->numeric_objec"
      "t_to_string_no_mortal(env, stack, object, error_id));\012  }\012  else if (!env->is_string(env, stack, obj"
      "ect)) {\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, o"
      "bj_src_type_name);\012    const char* dist_basic_type_name = \"string\";\012    SPVM_OBJ* obj_dist_type_name"
      " = env->get_compile_type_name(env, stack, dist_basic_type_name, 0, 0);\012    const char* dist_type_nam"
      "e = env->get_chars(env, stack, obj_dist_type_name);\012    \012    char* tmp_buffer = env->api->internal->"
      "get_stack_tmp_buffer(env, stack);\012    \012    SPVM_VALUE args[2];\012    args[0].address = (void*)src_type"
      "_name;\012    args[1].address = (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_LI"
      "TERALS[SPVM_IMPLEMENT_C_EXCEPTION_ASSIGN_NOT_SATISFY_ASSIGNMENT_REQUIREMENT], args, 2);\012    \012    SPV"
      "M_OBJ* exception = env->new_string_no_mortal(env, stack, tmp_buffer, string_length);\012    env->set_ex"
      "ception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    \012    en"
      "v->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_IMPLEMENT_MOVE_RE"
      "F_UNDEF(out) (out = (SPVM_REF*)NULL)\012\012#define SPVM_IMPLEMENT_BIT_NOT_INT(out, in) (out = ~in)\012#defin"
      "e SPVM_IMPLEMENT_BIT_NOT_LONG(out, in) (out = ~in)\012#define SPVM_IMPLEMENT_NEGATE_INT(out, in) (out ="
      " -in)\012#define SPVM_IMPLEMENT_NEGATE_LONG(out, in) (out = -in)\012#define SPVM_IMPLEMENT_NEGATE_FLOAT(ou"
      "t, in) (out = -in)\012#define SPVM_IMPLEMENT_NEGATE_DOUBLE(out, in) (out = -in)\012\012static inline void SPV"
      "M_IMPLEMENT_STRING_CONCAT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_OBJ* in1, SPVM_OBJ*"
      " in2, int32_t* error_id) {\012  SPVM_OBJ* string1 = in1;\012  SPVM_OBJ* string2 = in2;\012  if (string1 == NU"
      "LL) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LI"
      "TERALS[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 (string2 == NULL"
      ") {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITE"
      "RALS[SPVM_IMPLEMENT_C_EXCEPTION_STRING_CONCAT_RIGHT_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* stri"
      "ng3 = env->concat_no_mortal(env, stack, string1, string2);\012    env->assign_object(env, stack, out, s"
      "tring3);\012  }\012}\012\012#define SPVM_IMPLEMENT_CONDITION_EVALUATION_INT(out, in) (out = in)\012#define SPVM_IMP"
      "LEMENT_CONDITION_EVALUATION_LONG(out, in) (out = !!in)\012#define SPVM_IMPLEMENT_CONDITION_EVALUATION_F"
      "LOAT(out, in) (out = !!in)\012#define SPVM_IMPLEMENT_CONDITION_EVALUATION_DOUBLE(out, in) (out = !!in)\012"
      "#define SPVM_IMPLEMENT_CONDITION_EVALUATION_OBJECT(out, in) (out = !!(SPVM_OBJ*)in)\012#define SPVM_IMP"
      "LEMENT_CONDITION_EVALUATION_REF(out, in) (out = !!(SPVM_OBJ*)in)\012#define SPVM_IMPLEMENT_CONDITION_EV"
      "ALUATION_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 SPVM_IMPLEMENT"
      "_NUMERIC_COMPARISON_EQ_FLOAT(out, in1, in2) (out = (in1 == in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMP"
      "ARISON_EQ_DOUBLE(out, in1, in2) (out = (in1 == in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_EQ_OB"
      "JECT(out, in1, in2) (out = ((SPVM_OBJ*)in1 == (SPVM_OBJ*)in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPAR"
      "ISON_EQ_REF(out, in1, in2) (out = ((SPVM_OBJ*)in1 == (SPVM_OBJ*)in2))\012\012#define SPVM_IMPLEMENT_NUMERI"
      "C_COMPARISON_NE_INT(out, in1, in2) (out = (in1 != in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_NE"
      "_LONG(out, in1, in2) (out = (in1 != in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_NE_FLOAT(out, in"
      "1, 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_OB"
      "J*)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 > in"
      "2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_GT_FLOAT(out, in1, in2) (out = (in1 > in2))\012#define SP"
      "VM_IMPLEMENT_NUMERIC_COMPARISON_GT_DOUBLE(out, in1, in2) (out = (in1 > in2))\012\012#define SPVM_IMPLEMENT"
      "_NUMERIC_COMPARISON_GE_INT(out, in1, in2) (out = (in1 >= in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPAR"
      "ISON_GE_LONG(out, in1, in2) (out = (in1 >= in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_GE_FLOAT("
      "out, in1, in2) (out = (in1 >= in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_GE_DOUBLE(out, in1, in"
      "2) (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 < in2))\012#defin"
      "e SPVM_IMPLEMENT_NUMERIC_COMPARISON_LT_FLOAT(out, in1, in2) (out = (in1 < in2))\012#define SPVM_IMPLEME"
      "NT_NUMERIC_COMPARISON_LT_DOUBLE(out, in1, in2) (out = (in1 < in2))\012\012#define SPVM_IMPLEMENT_NUMERIC_C"
      "OMPARISON_LE_INT(out, in1, in2) (out = (in1 <= in2))\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_LE_LO"
      "NG(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, in2) (out = "
      "(in1 <= in2))\012\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_CMP_INT(out, in1, in2) (out = in1 > in2 ? 1"
      " : in1 < in2 ? -1 : 0)\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_CMP_LONG(out, in1, in2) (out = in1 "
      "> in2 ? 1 : in1 < in2 ? -1 : 0)\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_CMP_FLOAT(out, in1, in2) ("
      "out = in1 > in2 ? 1 : in1 < in2 ? -1 : 0)\012#define SPVM_IMPLEMENT_NUMERIC_COMPARISON_CMP_DOUBLE(out, "
      "in1, in2) (out = in1 > in2 ? 1 : in1 < in2 ? -1 : 0)\012\012#define SPVM_IMPLEMENT_IS_UNDEF_OBJECT(out, in"
      ") (out = ((SPVM_OBJ*)in == NULL))\012#define SPVM_IMPLEMENT_IS_UNDEF_REF(out, in) (out = ((SPVM_OBJ*)in"
      " == NULL))\012#define SPVM_IMPLEMENT_IS_NOT_UNDEF_OBJECT(out, in) (out = ((SPVM_OBJ*)in != NULL))\012#defi"
      "ne SPVM_IMPLEMENT_IS_NOT_UNDEF_REF(out, in) (out = ((SPVM_OBJ*)in != NULL))\012\012static inline void SPVM"
      "_IMPLEMENT_STRING_COMPARISON(SPVM_ENV* env, SPVM_VALUE* stack, int32_t comparison_op_id, int32_t* ou"
      "t, SPVM_OBJ* in1, SPVM_OBJ* in2) {\012  SPVM_OBJ* object1 = in1;\012  SPVM_OBJ* object2 = in2;\012  \012  int32_"
      "t cmp = 0;\012  if (object1 == NULL && object2 == NULL) {\012    cmp = 0;\012  }\012  else if (object1 != NULL &"
      "& object2 == NULL) {\012    cmp = 1;\012  }\012  else 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_LENGT"
      "H(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, stack, bytes1,"
      " bytes2, short_string_length);\012    if (retval) {\012      cmp = retval < 0 ? -1 : 1;\012    }\012    else if "
      "(length1 == length2) {\012      cmp = 0;\012    }\012    else {\012      cmp = length1 < length2 ? -1 : 1;\012    }"
      "\012  }\012  \012  int32_t flag;\012  switch (comparison_op_id) {\012    case SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON"
      "_EQ: {\012      flag = cmp == 0;\012      break;\012    }\012    case SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_NE: "
      "{\012      flag = cmp != 0;\012      break;\012    }\012    case SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_GT: {\012   "
      "   flag = cmp > 0;\012      break;\012    }\012    case SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_GE: {\012      fla"
      "g = cmp >= 0;\012      break;\012    }\012    case SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_LT: {\012      flag = c"
      "mp < 0;\012      break;\012    }\012    case SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_LE: {\012      flag = cmp <= "
      "0;\012      break;\012    }\012    case SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_CMP: {\012      flag = cmp;\012      "
      "break;\012    }\012    default: {\012      // 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_STRING_COMPA"
      "RISON(env, stack, SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_EQ, out, in1, in2))\012#define SPVM_IMPLEMENT_S"
      "TRING_COMPARISON_NE(env, stack, out, in1, in2) (SPVM_IMPLEMENT_STRING_COMPARISON(env, stack, SPVM_IM"
      "PLEMENT_C_EXCEPTION_COMPARISON_NE, out, in1, in2))\012#define SPVM_IMPLEMENT_STRING_COMPARISON_GT(env, "
      "stack, out, in1, in2) (SPVM_IMPLEMENT_STRING_COMPARISON(env, stack, SPVM_IMPLEMENT_C_EXCEPTION_COMPA"
      "RISON_GT, out, in1, in2))\012#define SPVM_IMPLEMENT_STRING_COMPARISON_GE(env, stack, out, in1, in2) (SP"
      "VM_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_STRING_COMPA"
      "RISON(env, stack, SPVM_IMPLEMENT_C_EXCEPTION_COMPARISON_LT, out, in1, in2))\012#define SPVM_IMPLEMENT_S"
      "TRING_COMPARISON_LE(env, stack, out, in1, in2) (SPVM_IMPLEMENT_STRING_COMPARISON(env, stack, SPVM_IM"
      "PLEMENT_C_EXCEPTION_COMPARISON_LE, out, in1, in2))\012#define SPVM_IMPLEMENT_STRING_COMPARISON_CMP(env,"
      " stack, out, in1, in2) (SPVM_IMPLEMENT_STRING_COMPARISON(env, stack, SPVM_IMPLEMENT_C_EXCEPTION_COMP"
      "ARISON_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_OBJ* object "
      "= env->new_object_no_mortal(env, stack, basic_type);\012  if (object == NULL) {\012    SPVM_OBJ* exception"
      " = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEP"
      "TION_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* stac"
      "k, SPVM_OBJ** out, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t length, int32_t* error_id) {\012  if (le"
      "ngth >= 0) {\012    SPVM_OBJ* object = env->new_object_array_no_mortal(env, stack, basic_type, length);"
      "\012    if (object == NULL) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, S"
      "PVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRAY_FAILED]);\012      env->set_exceptio"
      "n(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 = en"
      "v->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_NATIV"
      "E_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_NEW_MULDIM_ARRAY(SPVM_ENV* e"
      "nv, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_NATIVE_BASIC_TYPE* basic_type, int32_t type_dimension, i"
      "nt32_t length, int32_t* error_id) {\012  if (length >= 0) {\012    SPVM_OBJ* object = env->new_muldim_arra"
      "y_no_mortal(env, stack, basic_type, type_dimension, length);\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_NEW_ARRAY_FAILED]);\012      env->set_exception(env, stack, exception);\012      *error_i"
      "d = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      env->assign_object(env, stack, o"
      "ut, 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\012st"
      "atic inline void SPVM_IMPLEMENT_NEW_MULNUM_ARRAY(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, S"
      "PVM_NATIVE_BASIC_TYPE* basic_type, int32_t length, int32_t* error_id) {\012  if (length >= 0) {\012    SPV"
      "M_OBJ* object = env->new_mulnum_array_no_mortal(env, stack, basic_type, length);\012    if (object == N"
      "ULL) {\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, except"
      "ion);\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_EXCEPTION_NEW_ARRRAY_LENGTH_SM"
      "ALL]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ER"
      "ROR_CLASS;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_NEW_BYTE_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 = en"
      "v->new_byte_array_no_mortal(env, stack, length);\012    if (object == NULL) {\012      SPVM_OBJ* exception"
      " = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEP"
      "TION_NEW_ARRAY_FAILED]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NAT"
      "IVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      env->assign_object(env, stack, out, object);"
      "\012    }\012  }\012  else {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLE"
      "MENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRRAY_LENGTH_SMALL]);\012    env->set_exception(en"
      "v, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012}\012\012static inline "
      "void SPVM_IMPLEMENT_NEW_SHORT_ARRAY(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int32_t length"
      ", int32_t* error_id) {\012  if (length >= 0) {\012    SPVM_OBJ* object = env->new_short_array_no_mortal(en"
      "v, stack, length);\012    if (object == NULL) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mo"
      "rtal(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_CLAS"
      "S;\012    }\012    else {\012      env->assign_object(env, stack, out, object);\012    }\012  }\012  else {\012    SPVM_O"
      "BJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPL"
      "EMENT_C_EXCEPTION_NEW_ARRRAY_LENGTH_SMALL]);\012    env->set_exception(env, stack, exception);\012    *err"
      "or_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_NEW_INT_AR"
      "RAY(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int32_t length, int32_t* error_id) {\012  if (len"
      "gth >= 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_IMPLEMENT_ST"
      "RING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRAY_FAILED]);\012      env->set_exception(env, stack, ex"
      "ception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      env->ass"
      "ign_object(env, stack, out, object);\012    }\012  }\012  else {\012    SPVM_OBJ* exception = env->new_string_no"
      "len_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRRAY_LENGT"
      "H_SMALL]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_I"
      "D_ERROR_CLASS;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_NEW_LONG_ARRAY(SPVM_ENV* env, SPVM_VALUE* st"
      "ack, SPVM_OBJ** out, int32_t length, int32_t* error_id) {\012  if (length >= 0) {\012    SPVM_OBJ* object "
      "= env->new_long_array_no_mortal(env, stack, length);\012    if (object == NULL) {\012      SPVM_OBJ* excep"
      "tion = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_E"
      "XCEPTION_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, obje"
      "ct);\012    }\012  }\012  else {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_I"
      "MPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRRAY_LENGTH_SMALL]);\012    env->set_exceptio"
      "n(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012}\012\012static inl"
      "ine void SPVM_IMPLEMENT_NEW_FLOAT_ARRAY(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int32_t le"
      "ngth, int32_t* error_id) {\012  if (length >= 0) {\012    SPVM_OBJ* object = env->new_float_array_no_morta"
      "l(env, stack, length);\012    if (object == NULL) {\012      SPVM_OBJ* exception = env->new_string_nolen_n"
      "o_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRAY_FAILED]);\012 "
      "     env->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_"
      "CLASS;\012    }\012    else {\012      env->assign_object(env, stack, out, object);\012    }\012  }\012  else {\012    SP"
      "VM_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_DO"
      "UBLE_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_double_array_no_mortal(env, stack, length);\012    i"
      "f (object == NULL) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IM"
      "PLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_ARRAY_FAILED]);\012      env->set_exception(env,"
      " stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012    "
      "  env->assign_object(env, stack, out, object);\012    }\012  }\012  else {\012    SPVM_OBJ* exception = env->new"
      "_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_AR"
      "RRAY_LENGTH_SMALL]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BA"
      "SIC_TYPE_ID_ERROR_CLASS;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_NEW_STRING(SPVM_ENV* env, SPVM_VAL"
      "UE* stack, SPVM_OBJ** out, const char* constant_string, int32_t constant_string_length, int32_t* err"
      "or_id) {\012  SPVM_OBJ* string = env->new_string_no_mortal(env, stack, constant_string, constant_string"
      "_length);\012  if (string == NULL) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, sta"
      "ck, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_STRING_FAILED]);\012    env->set_exce"
      "ption(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012"
      "    env->make_read_only(env, stack, string);\012    env->assign_object(env, stack, out , string);\012  }\012}"
      "\012\012static inline void SPVM_IMPLEMENT_NEW_STRING_LEN(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out,"
      " int32_t length, int32_t* error_id) {\012  if (length >= 0) {\012    SPVM_OBJ* string = env->new_string_no"
      "_mortal(env, stack, NULL, length);\012    if (string == NULL) {\012      SPVM_OBJ* exception = env->new_st"
      "ring_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_STRIN"
      "G_LEN_FAILED]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BAS"
      "IC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      env->assign_object(env, stack, out, string);\012    }\012  "
      "}\012  else {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRI"
      "NG_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_NEW_STRING_LEN_LENGTH_SMALL]);\012    env->set_exception(env, st"
      "ack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012}\012\012#define SPVM_IMPLEM"
      "ENT_IS_READ_ONLY(env, stack, out, in) (out = env->is_read_only(env, stack, in))\012\012#define SPVM_IMPLEM"
      "ENT_IS_FIXED_LENGTH(env, stack, out, in) (out = env->is_fixed_length(env, stack, in))\012\012#define SPVM_"
      "IMPLEMENT_IS_OPTIONS(env, stack, out, in) (out = env->is_options(env, stack, in))\012\012#define SPVM_IMPL"
      "EMENT_MAKE_READ_ONLY(env, stack, in) (env->make_read_only(env, stack, in))\012\012#define SPVM_IMPLEMENT_M"
      "AKE_FIXED_LENGTH(env, stack, in) (env->make_fixed_length(env, stack, in))\012\012#define SPVM_IMPLEMENT_EN"
      "ABLE_OPTIONS(env, stack, in) (env->enable_options(env, stack, in))\012\012#define SPVM_IMPLEMENT_DISABLE_O"
      "PTIONS(env, stack, in) (env->disable_options(env, stack, in))\012\012static inline void SPVM_IMPLEMENT_GET"
      "_ARRAY_ELEMENT_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, int8_t* out, SPVM_OBJ* array, int32_t index, i"
      "nt32_t* error_id) {\012  \012  if (__builtin_expect(array == NULL, 0)) { \012    env->set_exception(env, stac"
      "k, env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEP"
      "TION_ARRAY_UNDEFINED]));\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    i"
      "f (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__b"
      "uiltin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) { \012      env->set_exception(e"
      "nv, stack, env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT"
      "_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]));\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERR"
      "OR_CLASS;\012    }\012    else { \012      *out = ((int8_t*)GET_DATA_ADDRESS(env, stack, array))[index];\012    "
      "}\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_ARRAY_ELEMENT_SHORT(SPVM_ENV* env, SPVM_VALUE* stack,"
      " int16_t* out, SPVM_OBJ* array, int32_t index, int32_t* error_id) {\012  \012  if (__builtin_expect(array "
      "== NULL, 0)) { \012    env->set_exception(env, 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_exception(env, stack, env->new_string_nolen_no_mortal(env, sta"
      "ck, 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_IMPLEMENT_GET_ARR"
      "AY_ELEMENT_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, SPVM_OBJ* array, int32_t index, int32"
      "_t* error_id) {\012  \012  if (__builtin_expect(array == NULL, 0)) { \012    env->set_exception(env, stack, e"
      "nv->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 (__buil"
      "tin_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 = ((int32_t*)GET_DATA_ADDRESS(env, stack, array))[index];\012    }\012"
      "  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_ARRAY_ELEMENT_LONG(SPVM_ENV* env, SPVM_VALUE* stack, in"
      "t64_t* out, SPVM_OBJ* array, int32_t index, int32_t* error_id) {\012  \012  if (__builtin_expect(array == "
      "NULL, 0)) { \012    env->set_exception(env, stack, env->new_string_nolen_no_mortal(env, stack, SPVM_IMP"
      "LEMENT_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 += GE"
      "T_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, st"
      "ack, 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 = ((int64_t*)GE"
      "T_DATA_ADDRESS(env, stack, array))[index];\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_ARRAY_"
      "ELEMENT_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, float* out, SPVM_OBJ* array, int32_t index, int32_t*"
      " error_id) {\012  \012  if (__builtin_expect(array == NULL, 0)) { \012    env->set_exception(env, stack, env-"
      ">new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_AR"
      "RAY_UNDEFINED]));\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else { \012    if (__b"
      "uiltin_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, st"
      "ack, env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXC"
      "EPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]));\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLA"
      "SS;\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* stack, doubl"
      "e* out, SPVM_OBJ* array, int32_t index, int32_t* error_id) {\012  \012  if (__builtin_expect(array == NULL"
      ", 0)) { \012    env->set_exception(env, stack, env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEME"
      "NT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]));\012    *error_id = SPVM_NATIVE_C_BASI"
      "C_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      env->set_exception(env, stack, env->new_string_nolen_no_mortal(env, stack, SPV"
      "M_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 = ((double*)GET_DAT"
      "A_ADDRESS(env, stack, array))[index];\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_ARRAY_ELEME"
      "NT_OBJECT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_OBJ* array, int32_t index, int32_t*"
      " error_id) {\012  \012  if (__builtin_expect(array == NULL, 0)) { \012    env->set_exception(env, stack, env-"
      ">new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_AR"
      "RAY_UNDEFINED]));\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else { \012    if (__b"
      "uiltin_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, st"
      "ack, env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXC"
      "EPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]));\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLA"
      "SS;\012    }\012    else { \012      env->assign_object(env, stack, out, ((SPVM_OBJ**)GET_DATA_ADDRESS(env, s"
      "tack, array))[index]);\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_BYTE(SPVM_EN"
      "V* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int8_t in, int32_t* error_id) {\012  if (__b"
      "uiltin_expect(!array, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SP"
      "VM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(en"
      "v, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if ("
      "__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__buil"
      "tin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = en"
      "v->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_"
      "ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012      *error_i"
      "d = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      ((int8_t*)GET_DATA_ADDRESS(env, "
      "stack, array))[index] = in;\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_SHORT(S"
      "PVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int16_t in, int32_t* error_id) {\012  "
      "if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, st"
      "ack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_excep"
      "tion(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* excepti"
      "on = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXC"
      "EPTION_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_ADDRE"
      "SS(env, stack, array))[index] = in;\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_ARRAY_ELEMENT"
      "_INT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_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(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      ((int32_t*)GET_DATA"
      "_ADDRESS(env, stack, array))[index] = in;\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_ARRAY_E"
      "LEMENT_LONG(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int64_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      ((int64_t*)G"
      "ET_DATA_ADDRESS(env, stack, array))[index] = in;\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_"
      "ARRAY_ELEMENT_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, float in, int3"
      "2_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* exception = env->new_string_nole"
      "n_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_CL"
      "ASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, ar"
      "ray);\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[S"
      "PVM_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      ((floa"
      "t*)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_strin"
      "g_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFI"
      "NED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ER"
      "ROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, sta"
      "ck, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) "
      "{\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITE"
      "RALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, s"
      "tack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      "
      "((double*)GET_DATA_ADDRESS(env, stack, array))[index] = in;\012    }\012  }\012}\012\012static inline void SPVM_IMP"
      "LEMENT_SET_ARRAY_ELEMENT_OBJECT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, SP"
      "VM_OBJ* in, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* exception = env-"
      ">new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_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      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_IMPLEM"
      "ENT_SET_ARRAY_ELEMENT_OBJECT_CHECK_TYPE(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t i"
      "ndex, SPVM_OBJ* in, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* exceptio"
      "n = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCE"
      "PTION_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 += G"
      "ET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, s"
      "tack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMP"
      "LEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->se"
      "t_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))[in"
      "dex];\012      SPVM_OBJ* object = in;\012      int32_t elem_isa = env->elem_isa(env, stack, array, 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_sr"
      "c_type_name = env->get_type_name(env, stack, object);\012        const char* src_type_name = env->get_c"
      "hars(env, stack, obj_src_type_name);\012        SPVM_NATIVE_BASIC_TYPE* dist_basic_type = env->get_obje"
      "ct_basic_type(env, stack, array);\012        const char* dist_basic_type_name = env->api->basic_type->g"
      "et_name(env->runtime, dist_basic_type);\012        int32_t dist_type_dimension = env->get_object_type_d"
      "imension(env, stack, array) - 1;\012        SPVM_OBJ* obj_dist_type_name = env->get_compile_type_name(e"
      "nv, 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->g"
      "et_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 = e"
      "nv->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_ASSIGNMENT_REQUIREME"
      "NT], args, 2);\012        \012        SPVM_OBJ* exception = env->new_string_no_mortal(env, stack, tmp_buff"
      "er, string_length);\012        env->set_exception(env, stack, exception);\012        *error_id = SPVM_NATI"
      "VE_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_VALUE* 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_LITERALS[SPVM_IM"
      "PLEMENT_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, s"
      "tack, 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_ERRO"
      "R_CLASS;\012    }\012    else {\012      SPVM_OBJ** object_address = &((SPVM_OBJ**)GET_DATA_ADDRESS(env, stac"
      "k, array))[index];\012      env->assign_object(env, stack, object_address, NULL);\012    }\012  }\012}\012\012static i"
      "nline void SPVM_IMPLEMENT_CALLER(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int32_t level, in"
      "t32_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_ex"
      "ception(env, stack)));\012    env->set_exception(env, stack, exception);\012  }\012}\012\012static inline void SPVM"
      "_IMPLEMENT_ARRAY_LENGTH(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, SPVM_OBJ* array, int32_t* er"
      "ror_id) {\012  if (array == NULL) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stac"
      "k, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_excepti"
      "on(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012   "
      " *out = GET_LENGTH(env, stack, array);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_STRING_LENGTH(SPVM_E"
      "NV* env, SPVM_VALUE* stack, int32_t* out, SPVM_OBJ* string) {\012  if (string == NULL) {\012    *out = 0;\012"
      "  }\012  else {\012    *out = GET_LENGTH(env, stack, string);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_CAP"
      "ACITY(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, SPVM_OBJ* object, int32_t* error_id) {\012  if (o"
      "bject == NULL) {\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    *out = GET_CAPA"
      "CITY(env, stack, object);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_LENGTH(SPVM_ENV* env, SPVM_VA"
      "LUE* 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_LITERALS[SPVM_IMP"
      "LEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id ="
      " SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *error_id = env->set_length(env, stack, o"
      "bject, length);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_CAPACITY(SPVM_ENV* env, SPVM_VALUE* sta"
      "ck, SPVM_OBJ* object, int32_t capacity, int32_t* error_id) {\012  if (object == NULL) {\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    *error_id = env->set_capacity(env, stack, objec"
      "t, capacity);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_FIELD_BYTE(SPVM_ENV* env, SPVM_VALUE* sta"
      "ck, int8_t* out, SPVM_OBJ* object, int32_t field_offset, int32_t* error_id) {\012  \012  if (__builtin_exp"
      "ect(object == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM"
      "_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->se"
      "t_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  e"
      "lse {\012    *out = *(int8_t*)(GET_DATA_ADDRESS(env, stack, object) + field_offset);\012  }\012}\012\012static inli"
      "ne void SPVM_IMPLEMENT_GET_FIELD_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int16_t* out, SPVM_OBJ* obj"
      "ect, 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[SPV"
      "M_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_exception(env, stack, except"
      "ion);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *(int16_t*)(G"
      "ET_DATA_ADDRESS(env, stack, object) + field_offset);\012  }\012}\012\012\012static inline void SPVM_IMPLEMENT_GET_F"
      "IELD_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, SPVM_OBJ* object, int32_t field_offset, int"
      "32_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_NAT"
      "IVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *(int32_t*)(GET_DATA_ADDRESS(env, stack, ob"
      "ject) + 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_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 = *(int64_t*)(GET_DATA_ADDRESS(env, stack, object) + field_offset);\012  }\012}\012"
      "\012\012static inline void SPVM_IMPLEMENT_GET_FIELD_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, float* out, 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 = *("
      "float*)(GET_DATA_ADDRESS(env, stack, object) + field_offset);\012  }\012}\012\012\012static inline void SPVM_IMPLEM"
      "ENT_GET_FIELD_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, double* out, SPVM_OBJ* object, int32_t field_"
      "offset, int32_t* error_id) {\012  \012  if (__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 = *(double*)(GET_DATA_ADDRESS(env,"
      " stack, object) + field_offset);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_FIELD_OBJECT(SPVM_ENV*"
      " env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_OBJ* object, int32_t field_offset, int32_t* error_id) "
      "{  \012  if (__builtin_expect(object == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_"
      "mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_U"
      "NDEFINED]);\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    SPVM_OBJ* field_object = SPVM_IMPLEMENT_DROP_TAG_POINTERS(*ref);\012    env->assig"
      "n_object(env, stack, out, field_object);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_FIELD_BYTE(SPV"
      "M_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    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    *(int8_t*)(GET_DATA_AD"
      "DRESS(env, stack, object) + field_offset) = in;\012    SPVM_IMPLEMENT_ENABLE_EXISTS_FLAG(env, stack, ob"
      "ject, exists_offset, exists_bit);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_FIELD_SHORT(SPVM_ENV*"
      " env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t field_offset, int16_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    *(int16_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_INT(SPVM_ENV* env, "
      "SPVM_VALUE* stack, SPVM_OBJ* object, int32_t field_offset, int32_t 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    *(int32_t*)(GET_DATA_ADDRESS(env,"
      " stack, object) + field_offset) = in;\012    SPVM_IMPLEMENT_ENABLE_EXISTS_FLAG(env, stack, object, exis"
      "ts_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, int32_t exists_"
      "offset, int32_t exists_bit) {\012  \012  if (__builtin_expect(object == NULL, 0)) {\012    SPVM_OBJ* exceptio"
      "n = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCE"
      "PTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_i"
      "d = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *(int64_t*)(GET_DATA_ADDRESS(env, stac"
      "k, object) + field_offset) = in;\012    SPVM_IMPLEMENT_ENABLE_EXISTS_FLAG(env, stack, object, exists_of"
      "fset, exists_bit);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_FIELD_FLOAT(SPVM_ENV* env, SPVM_VALU"
      "E* stack, SPVM_OBJ* object, int32_t field_offset, float 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 = en"
      "v->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 = SP"
      "VM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *(float*)(GET_DATA_ADDRESS(env, stack, objec"
      "t) + field_offset) = in;\012    SPVM_IMPLEMENT_ENABLE_EXISTS_FLAG(env, stack, object, exists_offset, ex"
      "ists_bit);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_FIELD_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stac"
      "k, SPVM_OBJ* object, int32_t field_offset, double in, int32_t* error_id, int32_t exists_offset, int3"
      "2_t exists_bit) {\012  if (__builtin_expect(object == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_st"
      "ring_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACC"
      "ESS_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, object) + fie"
      "ld_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* stack, SPVM_"
      "OBJ* object, int32_t field_offset, SPVM_OBJ* in, int32_t* error_id, int32_t exists_offset, int32_t e"
      "xists_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_I"
      "NVOCANT_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BA"
      "SIC_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_EXI"
      "STS_FLAG(env, stack, object, exists_offset, exists_bit);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SE"
      "T_FIELD_UNDEF(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* object, int32_t field_offset, int32_t* err"
      "or_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[SP"
      "VM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_exception(env, stack, excep"
      "tion);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    SPVM_OBJ** ref = (S"
      "PVM_OBJ**)(GET_DATA_ADDRESS(env, stack, object) + field_offset);\012    env->assign_object(env, stack, "
      "ref, NULL);\012    SPVM_IMPLEMENT_ENABLE_EXISTS_FLAG(env, stack, object, exists_offset, exists_bit);\012  "
      "}\012}\012\012static inline void SPVM_IMPLEMENT_WEAKEN_FIELD(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* obje"
      "ct, int32_t field_offset, int32_t* error_id) {\012  if (object == NULL) {\012    SPVM_OBJ* exception = env"
      "->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_F"
      "IELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPV"
      "M_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    SPVM_OBJ** ref = (SPVM_OBJ**)(GET_DATA_ADDRES"
      "S(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, SPV"
      "M_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_WEAKEN_BACK_REFERENCE_ALLOCATION_FAILED]);\012  "
      "    env->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_C"
      "LASS;\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_UNWEAKEN_FIELD(SPVM_ENV* env, SPVM_VALUE* stack"
      ", SPVM_OBJ* object, int32_t field_offset, int32_t* error_id) {\012  if (object == NULL) {\012    SPVM_OBJ*"
      " exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEME"
      "NT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012   "
      " *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    SPVM_OBJ** ref = (SPVM_OBJ**)"
      "(GET_DATA_ADDRESS(env, stack, object) + field_offset);\012    env->unweaken(env, stack, (SPVM_OBJ**)ref"
      ");\012  }\012}\012\012static inline void SPVM_IMPLEMENT_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_O"
      "BJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPL"
      "EMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012"
      "    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    SPVM_OBJ** ref = (SPVM_OBJ"
      "**)(GET_DATA_ADDRESS(env, stack, object) + field_offset);\012    *out = env->isweak(env, stack, (SPVM_O"
      "BJ**)ref);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_EXISTS(SPVM_ENV* env, SPVM_VALUE* stack, int32_t"
      "* out, SPVM_OBJ* object, int32_t field_exists_offset, int32_t field_exists_bit, int32_t* error_id) {"
      "\012  if (object == NULL) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_"
      "IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set"
      "_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  el"
      "se {\012    *out = SPVM_IMPLEMENT_GET_EXISTS_FLAG(env, stack, object, field_exists_offset, field_exists"
      "_bit);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_DELETE(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* o"
      "bject, SPVM_NATIVE_FIELD* field, int32_t* error_id) {\012  if (object == NULL) {\012    SPVM_OBJ* exceptio"
      "n = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCE"
      "PTION_FIELD_ACCESS_INVOCANT_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_i"
      "d = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    env->delete_field(env, stack, object, "
      "field);\012  }\012}\012\012#define SPVM_IMPLEMENT_GET_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, stack, out, "
      "class_var) (out = env->get_class_var_short(env, stack, class_var))\012#define SPVM_IMPLEMENT_GET_CLASS_"
      "VAR_INT(env, stack, out, class_var) (out = env->get_class_var_int(env, stack, class_var))\012#define SP"
      "VM_IMPLEMENT_GET_CLASS_VAR_LONG(env, stack, out, class_var) (out = env->get_class_var_long(env, stac"
      "k, class_var))\012#define SPVM_IMPLEMENT_GET_CLASS_VAR_FLOAT(env, stack, out, class_var) (out = env->ge"
      "t_class_var_float(env, stack, class_var))\012#define SPVM_IMPLEMENT_GET_CLASS_VAR_DOUBLE(env, stack, ou"
      "t, class_var) (out = env->get_class_var_double(env, stack, class_var))\012#define SPVM_IMPLEMENT_GET_CL"
      "ASS_VAR_OBJECT(env, stack, out, class_var) (env->assign_object(env, stack, out, env->get_class_var_o"
      "bject(env, stack, class_var)))\012\012#define SPVM_IMPLEMENT_SET_CLASS_VAR_BYTE(env, stack, class_var, in)"
      " (env->set_class_var_byte(env, stack, class_var, in))\012#define SPVM_IMPLEMENT_SET_CLASS_VAR_SHORT(env"
      ", stack, class_var, in) (env->set_class_var_short(env, stack, class_var, in))\012#define SPVM_IMPLEMENT"
      "_SET_CLASS_VAR_INT(env, stack, class_var, in) (env->set_class_var_int(env, stack, class_var, in))\012#d"
      "efine SPVM_IMPLEMENT_SET_CLASS_VAR_LONG(env, stack, class_var, in) (env->set_class_var_long(env, sta"
      "ck, 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(env, stack, "
      "class_var, in) (env->set_class_var_double(env, stack, class_var, in))\012#define SPVM_IMPLEMENT_SET_CLA"
      "SS_VAR_OBJECT(env, stack, class_var, in) (env->assign_object(env, stack, env->get_class_var_object_r"
      "ef(env, stack, class_var), in))\012#define SPVM_IMPLEMENT_SET_CLASS_VAR_UNDEF(env, stack, class_var) (e"
      "nv->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, env->get_exce"
      "ption(env, stack)))\012#define SPVM_IMPLEMENT_SET_EXCEPTION_VAR(env, stack, in) (env->set_exception(env"
      ", stack, in))\012#define SPVM_IMPLEMENT_SET_EXCEPTION_VAR_UNDEF(env, stack) (env->set_exception(env, st"
      "ack, NULL))\012\012static inline void SPVM_IMPLEMENT_ISA(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, S"
      "PVM_OBJ* object, SPVM_NATIVE_BASIC_TYPE* dist_basic_type, int32_t dist_type_dimension) {\012  if (objec"
      "t) {\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, int3"
      "2_t* out, SPVM_NATIVE_BASIC_TYPE* src_basic_type, SPVM_NATIVE_BASIC_TYPE* dist_basic_type, int32_t d"
      "ist_type_dimension) {\012  *out = env->api->type->can_assign(env->runtime, dist_basic_type, dist_type_d"
      "imension, 0, src_basic_type, 0, 0);\012}\012\012static inline void SPVM_IMPLEMENT_IS_TYPE(SPVM_ENV* env, SPVM"
      "_VALUE* stack, int32_t* out, SPVM_OBJ* object, SPVM_NATIVE_BASIC_TYPE* dist_basic_type, int32_t dist"
      "_type_dimension) {\012  if (object) {\012    *out = env->is_type(env, stack, object, dist_basic_type, dist"
      "_type_dimension);\012  }\012  else {\012    *out = 0;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_IS_ERROR(SPVM_"
      "ENV* env, SPVM_VALUE* stack, int32_t* out, SPVM_NATIVE_BASIC_TYPE* src_basic_type, SPVM_NATIVE_BASIC"
      "_TYPE* dist_basic_type, int32_t dist_type_dimension) {\012  *out = (dist_basic_type == src_basic_type &"
      "& dist_type_dimension == 0);\012}\012\012#define SPVM_IMPLEMENT_CAN(env, stack, out, object, method_name) (ou"
      "t = (env->get_instance_method(env, stack, object, method_name) != NULL))\012\012static inline void SPVM_IM"
      "PLEMENT_PRINT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* string, int32_t is_stderr) {\012  if (is_stde"
      "rr) {\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* string, int32"
      "_t is_stderr) {\012  if (is_stderr) {\012    env->say_stderr(env, stack, string);\012  }\012  else {\012    env->sa"
      "y(env, stack, string);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_WARN(SPVM_ENV* env, SPVM_VALUE* stac"
      "k, 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_error_id) (eval"
      "_error_id = 0)\012#define SPVM_IMPLEMENT_GET_EVAL_ERROR_ID(out, eval_error_id) (out = eval_error_id)\012#d"
      "efine SPVM_IMPLEMENT_SET_ERROR_ID(error_id, die_error_id) (error_id = die_error_id)\012#define SPVM_IMP"
      "LEMENT_SET_EVAL_ERROR_ID(eval_error_id, die_error_id) (eval_error_id = die_error_id)\012#define SPVM_IM"
      "PLEMENT_ARGS_WIDTH(env, stack, out) (out = env->args_width(env, stack))\012#define SPVM_IMPLEMENT_GET_B"
      "ASIC_TYPE_ID(env, stack, out, basic_type_arg) ((out) = (env)->api->basic_type->get_id((env)->runtime"
      ", (basic_type_arg)))\012\012static inline void SPVM_IMPLEMENT_TYPE_NAME(SPVM_ENV* env, SPVM_VALUE* stack, "
      "SPVM_OBJ** out, SPVM_OBJ* object) {\012  if (object == NULL) {\012    *out = NULL;\012  }\012  else {\012    SPVM_O"
      "BJ* 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, SP"
      "VM_OBJ** out, SPVM_OBJ* object) {\012  SPVM_OBJ* dump = env->dump_no_mortal(env, stack, object);\012  env-"
      ">assign_object(env, stack, out, dump);\012}\012\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 i"
      "nline void SPVM_IMPLEMENT_GET_ADDRESS(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, void* addres"
      "s) {\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_snprintf_len(env, "
      "stack, tmp_buffer, SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE, \"%p\", args, 1);\012  \012  SPVM_OBJ* object_addres"
      "s = env->new_string_no_mortal(env, stack, tmp_buffer, string_length);\012  env->assign_object(env, stac"
      "k, out, object_address);\012}\012\012#define SPVM_IMPLEMENT_REF_BYTE(out, in) (out = (void*)(in))\012#define SPV"
      "M_IMPLEMENT_REF_SHORT(out, in) (out = (void*)(in))\012#define SPVM_IMPLEMENT_REF_INT(out, in) (out = (v"
      "oid*)(in))\012#define SPVM_IMPLEMENT_REF_LONG(out, in) (out = (void*)(in))\012#define SPVM_IMPLEMENT_REF_F"
      "LOAT(out, in) (out = (void*)(in))\012#define SPVM_IMPLEMENT_REF_DOUBLE(out, in) (out = (void*)(in))\012\012st"
      "atic inline void SPVM_IMPLEMENT_GET_DEREF_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, int8_t* out, int8_t"
      "** in, int32_t* error_id) {\012  \012  if (__builtin_expect(*in == NULL, 0)) {\012    SPVM_OBJ* exception = e"
      "nv->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION"
      "_REF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC"
      "_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *(int8_t*)*(int8_t**)in;\012  }\012  \012}\012\012static inline void "
      "SPVM_IMPLEMENT_GET_DEREF_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int16_t* out, int16_t** in, int32_t"
      "* error_id) {\012  \012  if (__builtin_expect(*in == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string"
      "_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_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 = *(int16_t*)*(int16_t**)in;\012  }\012  \012}\012\012static inline void SPVM_IMPLEME"
      "NT_GET_DEREF_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, int32_t** in, int32_t* error_id) {\012"
      "  \012  if (__builtin_expect(*in == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mort"
      "al(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->s"
      "et_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  "
      "else {\012    *out = *(int32_t*)*(int32_t**)in;\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_GET_DEREF_L"
      "ONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* out, int64_t** in, int32_t* error_id) {\012  \012  if (__bu"
      "iltin_expect(*in == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack"
      ", SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception("
      "env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *o"
      "ut = *(int64_t*)*(int64_t**)in;\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_GET_DEREF_FLOAT(SPVM_ENV"
      "* env, SPVM_VALUE* stack, float* out, float** in, int32_t* error_id) {\012  \012  if (__builtin_expect(*in"
      " == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT"
      "_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, exce"
      "ption);\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, SPVM_VALUE* "
      "stack, double* out, double** in, int32_t* error_id) {\012  \012  if (__builtin_expect(*in == NULL, 0)) {\012 "
      "   SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS["
      "SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *erro"
      "r_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *(double*)*(double**)in;\012  }"
      "\012  \012}\012\012static inline void SPVM_IMPLEMENT_SET_DEREF_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, int8_t** o"
      "ut, int8_t in, int32_t* error_id) {\012  \012  if (__builtin_expect(*out == 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    *(int8_t*)*(int8_t**)out = in;\012  }\012  \012}\012\012static inli"
      "ne void SPVM_IMPLEMENT_SET_DEREF_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int16_t** out, int16_t in, "
      "int32_t* error_id) {\012  \012  if (__builtin_expect(*out == NULL, 0)) {\012    SPVM_OBJ* exception = env->ne"
      "w_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_U"
      "NDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_"
      "ID_ERROR_CLASS;\012  }\012  else {\012    *(int16_t*)*(int16_t**)out = in;\012  }\012}\012\012static inline void SPVM_IMP"
      "LEMENT_SET_DEREF_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t** out, int32_t in, int32_t* error_id)"
      " {\012  \012  if (__builtin_expect(*out == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_"
      "mortal(env, stack, SPVM_IMPLEMENT_STRING_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    *(int32_t*)*(int32_t**)out = in;\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_SET_DERE"
      "F_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_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   "
      " *(int64_t*)*(int64_t**)out = in;\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_SET_DEREF_FLOAT(SPVM_E"
      "NV* env, SPVM_VALUE* stack, float** out, float in, int32_t* error_id) {\012  \012  if (__builtin_expect(*o"
      "ut == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEME"
      "NT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, ex"
      "ception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *(float*)*(float"
      "**)out = in;\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_SET_DEREF_DOUBLE(SPVM_ENV* env, SPVM_VALUE*"
      " stack, double** out, double in, int32_t* error_id) {\012  \012  if (__builtin_expect(*out == NULL, 0)) {\012"
      "    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS"
      "[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *err"
      "or_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *(double*)*(double**)out = in;\012  }"
      "\012  \012}\012\012#define SPVM_IMPLEMENT_GET_MULNUM_FIELD_BYTE(out, in, field_index) (out = *(in + field_index)"
      ")\012#define SPVM_IMPLEMENT_GET_MULNUM_FIELD_SHORT(out, in, field_index) (out = *(in + field_index))\012#d"
      "efine SPVM_IMPLEMENT_GET_MULNUM_FIELD_INT(out, in, field_index) (out = *(in + field_index))\012#define "
      "SPVM_IMPLEMENT_GET_MULNUM_FIELD_LONG(out, in, field_index) (out = *(in + field_index))\012#define SPVM_"
      "IMPLEMENT_GET_MULNUM_FIELD_FLOAT(out, in, field_index) (out = *(in + field_index))\012#define SPVM_IMPL"
      "EMENT_GET_MULNUM_FIELD_DOUBLE(out, in, field_index) (out = *(in + field_index))\012\012#define SPVM_IMPLEM"
      "ENT_SET_MULNUM_FIELD_BYTE(out, field_index, in) (*(out + field_index) = in)\012#define SPVM_IMPLEMENT_S"
      "ET_MULNUM_FIELD_SHORT(out, field_index, in) (*(out + field_index) = in)\012#define SPVM_IMPLEMENT_SET_M"
      "ULNUM_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_MULNUM_FIELD"
      "_FLOAT(out, field_index, in) (*(out + field_index) = in)\012#define SPVM_IMPLEMENT_SET_MULNUM_FIELD_DOU"
      "BLE(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 (int"
      "32_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_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_i"
      "ndex < 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* out, int32_t*"
      " in, int32_t fields_length) {\012  for (int32_t field_index = 0; field_index < fields_length; field_ind"
      "ex++) {\012    *(out + field_index) = *(in + field_index);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_MOV"
      "E_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_inde"
      "x) = *(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_index = 0; f"
      "ield_index < fields_length; field_index++) {\012    *(out + field_index) = *(in + field_index);\012  }\012}\012\012"
      "static inline void SPVM_IMPLEMENT_MOVE_MULNUM_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, double* out, "
      "double* in, int32_t fields_length) {\012  for (int32_t field_index = 0; field_index < fields_length; fi"
      "eld_index++) {\012    *(out + field_index) = *(in + field_index);\012  }\012}\012\012static inline void SPVM_IMPLEM"
      "ENT_GET_MULNUM_ARRAY_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, int8_t* out, SPVM_OBJ* array, int32_t in"
      "dex, int32_t fields_length, int32_t* error_id) {\012  if (__builtin_expect(array == NULL, 0)) {\012    SPV"
      "M_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_I"
      "MPLEMENT_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 >= GE"
      "T_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_ERR"
      "OR_CLASS;\012    }\012    else {\012      int32_t field_index;\012      for (field_index = 0; field_index < fiel"
      "ds_length; field_index++) {\012        *(out + field_index) = ((int8_t*)GET_DATA_ADDRESS(env, stack, ar"
      "ray))[fields_length * index + field_index];\012      }\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_G"
      "ET_MULNUM_ARRAY_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int16_t* out, SPVM_OBJ* array, int32_t index"
      ", int32_t fields_length, int32_t* error_id) {\012  if (__builtin_expect(array == NULL, 0)) {\012    SPVM_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) = ((int16_t*)GET_DATA_ADDRESS(env, stack, arra"
      "y))[fields_length * index + field_index];\012      }\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET"
      "_MULNUM_ARRAY_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* 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) = ((int32_t*)GET_DATA_ADDRESS(env, stack, array))["
      "fields_length * index + field_index];\012      }\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_MUL"
      "NUM_ARRAY_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* out, SPVM_OBJ* array, int32_t index, int32"
      "_t fields_length, int32_t* error_id) {\012  if (__builtin_expect(array == NULL, 0)) {\012    SPVM_OBJ* exc"
      "eption = 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_NA"
      "TIVE_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(e"
      "nv, stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPV"
      "M_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      en"
      "v->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012"
      "    }\012    else {\012      int32_t field_index;\012      for (field_index = 0; field_index < fields_length;"
      " field_index++) {\012        *(out + field_index) = ((int64_t*)GET_DATA_ADDRESS(env, stack, array))[fie"
      "lds_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 f"
      "ields_length, int32_t* error_id) {\012  if (__builtin_expect(array == NULL, 0)) {\012    SPVM_OBJ* excepti"
      "on = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXC"
      "EPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE"
      "_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += "
      "GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, "
      "stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IM"
      "PLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->s"
      "et_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    "
      "}\012    else {\012      int32_t field_index;\012      for (field_index = 0; field_index < fields_length; fie"
      "ld_index++) {\012        *(out + field_index) = ((float*)GET_DATA_ADDRESS(env, stack, array))[fields_le"
      "ngth * index + field_index];\012      }\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_ARRAY"
      "_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, double* out, SPVM_OBJ* array, int32_t index, int32_t field"
      "s_length, int32_t* error_id) {\012  if (__builtin_expect(array == NULL, 0)) {\012    SPVM_OBJ* exception ="
      " env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTI"
      "ON_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_B"
      "ASIC_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, stac"
      "k, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEM"
      "ENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_e"
      "xception(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_i"
      "ndex++) {\012        *(out + field_index) = ((double*)GET_DATA_ADDRESS(env, stack, array))[fields_lengt"
      "h * index + field_index];\012      }\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_ARRAY_BY"
      "TE(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int32_t fields_length, int8_t* "
      "in, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* exception = env->new_str"
      "ing_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDE"
      "FINED]);\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, s"
      "tack, 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_LI"
      "TERALS[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   "
      "     ((int8_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_SHORT(SPVM_ENV* "
      "env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int32_t fields_length, int16_t* in, int32_t*"
      " error_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no"
      "_mortal(env, stack, SPVM_IMPLEMENT_STRING_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      SP"
      "VM_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, exce"
      "ption);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      int32_t fi"
      "eld_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 + field_index);"
      "\012      }\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_ARRAY_INT(SPVM_ENV* env, SPVM_VAL"
      "UE* stack, SPVM_OBJ* array, int32_t 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_ARRAY_UNDEFINED]);\012    env->set_exc"
      "eption(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {"
      "\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    i"
      "f (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* excep"
      "tion = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_E"
      "XCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012     "
      " *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      int32_t field_index;\012  "
      "    for (field_index = 0; field_index < fields_length; field_index++) {\012        ((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_VALUE* stack, S"
      "PVM_OBJ* array, int32_t index, int32_t fields_length, int64_t* in, int32_t* error_id) {\012  if (__buil"
      "tin_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 (__b"
      "uiltin_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_ELE"
      "MENT_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 (fie"
      "ld_index = 0; field_index < fields_length; field_index++) {\012        ((int64_t*)GET_DATA_ADDRESS(env,"
      " stack, array))[fields_length * index + field_index] = *(in + field_index);\012      }\012    }\012  }\012}\012\012sta"
      "tic inline void SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* ar"
      "ray, int32_t index, int32_t fields_length, float* in, int32_t* error_id) {\012  if (__builtin_expect(!a"
      "rray, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STR"
      "ING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, except"
      "ion);\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_no"
      "len_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_I"
      "NDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_"
      "C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      int32_t field_index;\012      for (field_index = 0;"
      " field_index < fields_length; field_index++) {\012        ((float*)GET_DATA_ADDRESS(env, stack, array))"
      "[fields_length * index + field_index] = *(in + field_index);\012      }\012    }\012  }\012}\012\012static inline void"
      " SPVM_IMPLEMENT_SET_MULNUM_ARRAY_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t i"
      "ndex, int32_t fields_length, double* in, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012 "
      "   SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS["
      "SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *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      int32_t field_index;\012      for (field_index = 0; field_index "
      "< fields_length; field_index++) {\012        ((double*)GET_DATA_ADDRESS(env, stack, array))[fields_leng"
      "th * index + field_index] = *(in + field_index);\012      }\012    }\012  }\012}\012\012static inline void SPVM_IMPLEM"
      "ENT_GET_MULNUM_ARRAY_FIELD_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, int8_t* out, SPVM_OBJ* array, int3"
      "2_t index, int32_t field_index, int32_t fields_length, int32_t* error_id) {\012  if (__builtin_expect(a"
      "rray == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLE"
      "MENT_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 (__builti"
      "n_expect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expe"
      "ct(index < 0 || index >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_s"
      "tring_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_"
      "ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM"
      "_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      *out = ((int8_t*)GET_DATA_ADDRESS(env, s"
      "tack, array))[fields_length * index + field_index];\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_G"
      "ET_MULNUM_ARRAY_FIELD_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int16_t* 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 = ((int16_t*)GET_DATA_ADDRESS(env, sta"
      "ck, array))[fields_length * index + field_index];\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET"
      "_MULNUM_ARRAY_FIELD_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* 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 = ((int32_t*)GET_DATA_ADDRESS(env, stack, "
      "array))[fields_length * index + field_index];\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_MUL"
      "NUM_ARRAY_FIELD_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* out, SPVM_OBJ* array, int32_t index,"
      " int32_t field_index, int32_t fields_length, int32_t* error_id) {\012  if (__builtin_expect(array == NU"
      "LL, 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      *out = ((int64_t*)GET_DATA_ADDRESS(env, stack, arr"
      "ay))[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, int"
      "32_t field_index, int32_t fields_length, int32_t* error_id) {\012  if (__builtin_expect(array == NULL, "
      "0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LI"
      "TERALS[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_O"
      "UT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASI"
      "C_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      *out = ((float*)GET_DATA_ADDRESS(env, stack, array))[f"
      "ields_length * index + field_index];\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_ARRAY"
      "_FIELD_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, double* out, SPVM_OBJ* array, int32_t index, int32_t"
      " field_index, int32_t fields_length, int32_t* error_id) {\012  if (__builtin_expect(array == NULL, 0)) "
      "{\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERA"
      "LS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    "
      "*error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0"
      ", 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || in"
      "dex >= GET_LENGTH(env, stack, array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mor"
      "tal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_O"
      "F_RANGE]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TY"
      "PE_ID_ERROR_CLASS;\012    }\012    else {\012      *out = ((double*)GET_DATA_ADDRESS(env, stack, array))[fiel"
      "ds_length * index + field_index];\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FI"
      "ELD_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int32_t field_index, int3"
      "2_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_IMPLEM"
      "ENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SP"
      "VM_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      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_CL"
      "ASS;\012    }\012    else {\012      ((int8_t*)GET_DATA_ADDRESS(env, stack, array))[fields_length * index + f"
      "ield_index] = in;\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FIELD_SHORT(SPVM_E"
      "NV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index, int32_t field_index, int32_t fields_leng"
      "th, int16_t in, int32_t* error_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* exception = "
      "env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTIO"
      "N_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BA"
      "SIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_expect(index < 0, 0)) {\012      index += GET_L"
      "ENGTH(env, stack, array);\012    }\012    if (__builtin_expect(index < 0 || index >= GET_LENGTH(env, stack"
      ", array), 0)) {\012      SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEME"
      "NT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ELEMENT_ACCESS_INDEX_OUT_OF_RANGE]);\012      env->set_ex"
      "ception(env, stack, exception);\012      *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012   "
      " else {\012      ((int16_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_INT(SPVM_ENV* env, SPVM_V"
      "ALUE* 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_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      ("
      "(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_VALUE* stack, S"
      "PVM_OBJ* array, int32_t index, int32_t field_index, int32_t fields_length, int64_t in, int32_t* erro"
      "r_id) {\012  if (__builtin_expect(!array, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mort"
      "al(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env-"
      ">set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012"
      "  else {\012    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_OB"
      "J* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLE"
      "MENT_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      ((int64_t*)GET_"
      "DATA_ADDRESS(env, stack, array))[fields_length * index + field_index] = in;\012    }\012  }\012}\012\012static inli"
      "ne void SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FIELD_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* arra"
      "y, 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(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 (__bu"
      "iltin_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_EXCEPTIO"
      "N_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_ADDRESS(env,"
      " stack, array))[fields_length * index + field_index] = in;\012    }\012  }\012}\012\012static inline void SPVM_IMPL"
      "EMENT_SET_MULNUM_ARRAY_FIELD_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ* array, int32_t index"
      ", int32_t field_index, int32_t fields_length, double in, int32_t* error_id) {\012  if (__builtin_expect"
      "(!array, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_"
      "STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_ARRAY_UNDEFINED]);\012    env->set_exception(env, stack, exc"
      "eption);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    if (__builtin_exp"
      "ect(index < 0, 0)) {\012      index += GET_LENGTH(env, stack, array);\012    }\012    if (__builtin_expect(in"
      "dex < 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_ACCES"
      "S_INDEX_OUT_OF_RANGE]);\012      env->set_exception(env, stack, exception);\012      *error_id = SPVM_NATI"
      "VE_C_BASIC_TYPE_ID_ERROR_CLASS;\012    }\012    else {\012      ((double*)GET_DATA_ADDRESS(env, stack, array)"
      ")[fields_length * index + field_index] = in;\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_DEREF_MU"
      "LNUM_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, int8_t* out, int8_t* mulnum_ref, int32_t fields_length, "
      "int32_t* error_id) {\012  \012  if (__builtin_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = e"
      "nv->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; fi"
      "eld_index++) {\012      *(out + field_index) = *((int8_t*)mulnum_ref + field_index);\012    }\012  }\012  \012}\012\012st"
      "atic inline void SPVM_IMPLEMENT_DEREF_MULNUM_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int16_t* out, i"
      "nt16_t* mulnum_ref, int32_t fields_length, int32_t* error_id) {\012  \012  if (__builtin_expect(mulnum_ref"
      " == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT"
      "_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, exce"
      "ption);\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) = *((int16_t*)m"
      "ulnum_ref + field_index);\012    }\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_DEREF_MULNUM_INT(SPVM_EN"
      "V* env, SPVM_VALUE* stack, int32_t* out, int32_t* mulnum_ref, int32_t fields_length, int32_t* error_"
      "id) {\012  \012  if (__builtin_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_"
      "nolen_no_mortal(env, stack, SPVM_IMPLEMENT_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) = *((int32_t*)mulnum_ref + field_index);\012    }\012  }\012}\012\012static inline void "
      "SPVM_IMPLEMENT_DEREF_MULNUM_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* out, int64_t* mulnum_ref"
      ", int32_t fields_length, int32_t* error_id) {\012  \012  if (__builtin_expect(mulnum_ref == NULL, 0)) {\012  "
      "  SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[S"
      "PVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error"
      "_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    for (int32_t field_index = 0; field_"
      "index < fields_length; field_index++) {\012      *(out + field_index) = *((int64_t*)mulnum_ref + field_"
      "index);\012    }\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_DEREF_MULNUM_FLOAT(SPVM_ENV* env, SPVM_VAL"
      "UE* stack, float* out, float* mulnum_ref, int32_t fields_length, int32_t* error_id) {\012  \012  if (__bui"
      "ltin_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_exce"
      "ption(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012"
      "    for (int32_t field_index = 0; field_index < fields_length; field_index++) {\012      *(out + field_"
      "index) = *((float*)mulnum_ref + field_index);\012    }\012  }\012}\012\012static inline void SPVM_IMPLEMENT_DEREF_M"
      "ULNUM_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, double* out, double* mulnum_ref, int32_t fields_lengt"
      "h, 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_EXCEPT"
      "ION_REF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BA"
      "SIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    for (int32_t field_index = 0; field_index < fields_length;"
      " field_index++) {\012      *(out + field_index) = *((double*)mulnum_ref + field_index);\012    }\012  }\012  \012}\012"
      "\012static inline void SPVM_IMPLEMENT_GET_MULNUM_FIELD_DEREF_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, int"
      "8_t* out, int8_t* mulnum_ref, int32_t field_index, int32_t* error_id) {\012  \012  if (__builtin_expect(mu"
      "lnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_I"
      "MPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, sta"
      "ck, 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_DERE"
      "F_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int16_t* out, int16_t* mulnum_ref, int32_t field_index, in"
      "t32_t* error_id) {\012  \012  if (__builtin_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = env"
      "->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_R"
      "EF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_T"
      "YPE_ID_ERROR_CLASS;\012  }\012  else {\012    *out = *((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, int32_t* out"
      ", int32_t* mulnum_ref, int32_t field_index, int32_t* error_id) {\012  \012  if (__builtin_expect(mulnum_re"
      "f == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMEN"
      "T_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, exc"
      "eption);\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_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 = *((int64_t*)mulnum_ref + field_index);\012  }\012  \012}\012\012static 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_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*)mulnum_re"
      "f + field_index);\012  }\012  \012}\012\012static inline void SPVM_IMPLEMENT_GET_MULNUM_FIELD_DEREF_DOUBLE(SPVM_ENV"
      "* env, SPVM_VALUE* stack, double* out, double* mulnum_ref, int32_t field_index, int32_t* error_id) {"
      "\012  \012  if (__builtin_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen"
      "_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_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*)mulnum_ref + field_index);\012  }\012  \012}\012\012static inline void SPVM_IM"
      "PLEMENT_SET_MULNUM_FIELD_DEREF_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, int8_t* mulnum_ref, int32_t fi"
      "eld_index, int8_t in, int32_t* error_id) {\012  \012  if (__builtin_expect(mulnum_ref == NULL, 0)) {\012    S"
      "PVM_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    *((int8_t*)mulnum_ref + field_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  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   "
      " *((int16_t*)mulnum_ref + field_index) = in;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_FIE"
      "LD_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* exception = "
      "env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTIO"
      "N_REF_UNDEFINED]);\012    env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASI"
      "C_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *((int32_t*)mulnum_ref + field_index) = in;\012  }\012}\012\012static in"
      "line void SPVM_IMPLEMENT_SET_MULNUM_FIELD_DEREF_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* muln"
      "um_ref, int32_t field_index, int64_t in, int32_t* error_id) {\012  \012  if (__builtin_expect(mulnum_ref ="
      "= NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_no_mortal(env, stack, SPVM_IMPLEMENT_S"
      "TRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    env->set_exception(env, stack, except"
      "ion);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012  }\012  else {\012    *((int64_t*)mulnum_r"
      "ef + field_index) = in;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_MULNUM_FIELD_DEREF_FLOAT(SPVM_E"
      "NV* env, SPVM_VALUE* stack, float* mulnum_ref, int32_t field_index, float in, int32_t* error_id) {\012 "
      " \012  if (__builtin_expect(mulnum_ref == NULL, 0)) {\012    SPVM_OBJ* exception = env->new_string_nolen_n"
      "o_mortal(env, stack, SPVM_IMPLEMENT_STRING_LITERALS[SPVM_IMPLEMENT_C_EXCEPTION_REF_UNDEFINED]);\012    "
      "env->set_exception(env, stack, exception);\012    *error_id = SPVM_NATIVE_C_BASIC_TYPE_ID_ERROR_CLASS;\012"
      "  }\012  else {\012    *((float*)mulnum_ref +field_index) = in;\012  }\012}\012\012static inline void SPVM_IMPLEMENT_S"
      "ET_MULNUM_FIELD_DEREF_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, double* mulnum_ref, int32_t field_ind"
      "ex, 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_IMPLEM"
      "ENT_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*)mulnum_ref + field_index) = in;\012  }"
      "\012}\012\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_TO_SHORT(out, in) (out = (int16_t)in)\012#define SPVM_I"
      "MPLEMENT_TYPE_CONVERSION_BYTE_TO_INT(out, in) (out = (int32_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVER"
      "SION_BYTE_TO_LONG(out, in) (out = (int64_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_TO_FLOAT("
      "out, in) (out = (float)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_TO_DOUBLE(out, in) (out = (do"
      "uble)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_SHORT_TO_BYTE(out, in) (out = (int8_t)in)\012#define SP"
      "VM_IMPLEMENT_TYPE_CONVERSION_SHORT_TO_INT(out, in) (out = (int32_t)in)\012#define SPVM_IMPLEMENT_TYPE_C"
      "ONVERSION_SHORT_TO_LONG(out, in) (out = (int64_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_SHORT_TO"
      "_FLOAT(out, in) (out = (float)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_SHORT_TO_DOUBLE(out, in) (o"
      "ut = (double)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_INT_TO_BYTE(out, in) (out = (int8_t)in)\012#def"
      "ine 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_CONVERSION_INT_"
      "TO_FLOAT(out, in) (out = (float)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_INT_TO_DOUBLE(out, in) (o"
      "ut = (double)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_BYTE(out, in) (out = (int8_t)in)\012#de"
      "fine SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_SHORT(out, in) (out = (int16_t)in)\012#define SPVM_IMPLEMEN"
      "T_TYPE_CONVERSION_LONG_TO_INT(out, in) (out = (int32_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_LO"
      "NG_TO_FLOAT(out, in) (out = (float)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_DOUBLE(out, in"
      ") (out = (double)in)\012#define SPVM_IMPLEMENT_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#define SPVM_IM"
      "PLEMENT_TYPE_CONVERSION_FLOAT_TO_INT(out, in) (out = (int32_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVER"
      "SION_FLOAT_TO_LONG(out, in) (out = (int64_t)in)\012#define SPVM_IMPLEMENT_TYPE_CONVERSION_FLOAT_TO_DOUB"
      "LE(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 = (int16_t)in)\012#de"
      "fine SPVM_IMPLEMENT_TYPE_CONVERSION_DOUBLE_TO_INT(out, in) (out = (int32_t)in)\012#define SPVM_IMPLEMEN"
      "T_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_CONVERSION_BYTE_"
      "TO_STRING(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int8_t value) {\012  char* tmp_buffer = env"
      "->api->internal->get_stack_tmp_buffer(env, stack);\012  \012  SPVM_VALUE args[1];\012  args[0].ival = (int32_"
      "t)value;\012  int32_t string_length = env->api->internal->c_snprintf_len(env, stack, tmp_buffer, SPVM_N"
      "ATIVE_C_STACK_TMP_BUFFER_SIZE, \"%\" PRId8, 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_SHORT_TO_STRING(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ"
      "** out, int16_t value) {\012  char* tmp_buffer = env->api->internal->get_stack_tmp_buffer(env, stack);\012"
      "  \012  SPVM_VALUE args[1];\012  args[0].ival = (int32_t)value;\012  int32_t string_length = env->api->intern"
      "al->c_snprintf_len(env, stack, tmp_buffer, SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE, \"%\" PRId16, args, 1)"
      ";\012  \012  SPVM_OBJ* string = env->new_string_no_mortal(env, stack, tmp_buffer, string_length);\012  env->a"
      "ssign_object(env, stack, out, string);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_INT_TO_S"
      "TRING(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int32_t value) {\012  char* tmp_buffer = env->a"
      "pi->internal->get_stack_tmp_buffer(env, stack);\012  \012  SPVM_VALUE args[1];\012  args[0].ival = value;\012  i"
      "nt32_t string_length = env->api->internal->c_snprintf_len(env, stack, tmp_buffer, SPVM_NATIVE_C_STAC"
      "K_TMP_BUFFER_SIZE, \"%\" PRId32, args, 1);\012  \012  SPVM_OBJ* string = env->new_string_no_mortal(env, stac"
      "k, tmp_buffer, string_length);\012  env->assign_object(env, stack, out, string);\012}\012\012static inline void "
      "SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_STRING(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, int6"
      "4_t value) {\012  char* tmp_buffer = env->api->internal->get_stack_tmp_buffer(env, stack);\012  \012  SPVM_VA"
      "LUE args[1];\012  args[0].lval = value;\012  int32_t string_length = env->api->internal->c_snprintf_len(en"
      "v, stack, tmp_buffer, SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE, \"%\" PRId64, args, 1);\012  \012  SPVM_OBJ* stri"
      "ng = env->new_string_no_mortal(env, stack, tmp_buffer, string_length);\012  env->assign_object(env, sta"
      "ck, out, string);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_FLOAT_TO_STRING(SPVM_ENV* env"
      ", SPVM_VALUE* stack, SPVM_OBJ** out, float value) {\012  char* tmp_buffer = env->api->internal->get_sta"
      "ck_tmp_buffer(env, stack);\012  \012  SPVM_VALUE args[1];\012  args[0].dval = (double)value;\012  int32_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_buffer, stri"
      "ng_length);\012  env->assign_object(env, stack, out, string);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE"
      "_CONVERSION_DOUBLE_TO_STRING(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, double value) {\012  cha"
      "r* tmp_buffer = env->api->internal->get_stack_tmp_buffer(env, stack);\012  \012  SPVM_VALUE args[1];\012  arg"
      "s[0].dval = value;\012  int32_t string_length = env->api->internal->c_snprintf_len(env, stack, tmp_buff"
      "er, SPVM_NATIVE_C_STACK_TMP_BUFFER_SIZE, \"%g\", args, 1);\012  \012  SPVM_OBJ* string = env->new_string_no_"
      "mortal(env, stack, tmp_buffer, string_length);\012  env->assign_object(env, stack, out, string);\012}\012\012sta"
      "tic 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 (nu"
      "m < 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, stack, string,"
      " &end, 10);\012    if (num > INT16_MAX) {\012      num = INT16_MAX;\012    }\012    else if (num < INT16_MIN) {\012"
      "      num = INT16_MIN;\012    }\012  }\012  \012  *out = (int16_t)num;\012}\012\012static inline void SPVM_IMPLEMENT_TYPE"
      "_CONVERSION_STRING_TO_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, SPVM_OBJ* src_string) {\012  "
      "\012  int64_t num = 0;\012  if (src_string) {\012    const char* string = env->get_chars(env, stack, src_stri"
      "ng);\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 = INT3"
      "2_MIN;\012    }\012  }\012  \012  *out = (int32_t)num;\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_STRI"
      "NG_TO_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_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    c"
      "har *end;\012    num = env->api->internal->c_strtoll(env, stack, string, &end, 10);\012  }\012  \012  *out = (in"
      "t64_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->inter"
      "nal->c_strtof(env, stack, string, &end);\012  }\012  \012  *out = (float)num;\012}\012\012static inline void SPVM_IMPL"
      "EMENT_TYPE_CONVERSION_STRING_TO_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, double* out, SPVM_OBJ* src_"
      "string) {\012  \012  double 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_strtod(env, stack, string, &end)"
      ";\012  }\012  \012  *out = (double)num;\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_STRING_TO_BYTE_A"
      "RRAY(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_OBJ* src_string) {\012  \012  if (src_string) "
      "{\012    int32_t src_string_length = env->length(env, stack, src_string);\012    const char* src_string_da"
      "ta = env->get_chars(env, stack, src_string);\012    SPVM_OBJ* byte_array = env->new_byte_array_no_morta"
      "l(env, stack, src_string_length);\012    int8_t* byte_array_data = env->get_elems_byte(env, stack, byte"
      "_array);\012    env->api->internal->c_memcpy(env, stack, byte_array_data, src_string_data, src_string_l"
      "ength);\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(S"
      "PVM_ENV* env, SPVM_VALUE* stack, SPVM_OBJ** out, SPVM_OBJ* src_byte_array) {\012  int32_t src_byte_arra"
      "y_length = env->length(env, stack, src_byte_array);\012  int8_t* src_byte_array_data = env->get_elems_b"
      "yte(env, stack, src_byte_array);\012  SPVM_OBJ* string = env->new_string_no_mortal(env, stack, (const c"
      "har*)src_byte_array_data, src_byte_array_length);\012  env->assign_object(env, stack, out, string);\012}\012\012"
      "static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_TO_BYTE_OBJECT(SPVM_ENV* env, SPVM_VALUE* sta"
      "ck, SPVM_OBJ** out, int8_t 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_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_VALUE* stack, "
      "SPVM_OBJ** out, int16_t value) {\012  SPVM_NATIVE_BASIC_TYPE* basic_type = env->api->runtime->get_basic"
      "_type_by_id(env->runtime, SPVM_NATIVE_C_BASIC_TYPE_ID_SHORT_CLASS);\012  SPVM_OBJ* object = env->new_ob"
      "ject_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\012stati"
      "c inline void SPVM_IMPLEMENT_TYPE_CONVERSION_INT_TO_INT_OBJECT(SPVM_ENV* env, SPVM_VALUE* stack, SPV"
      "M_OBJ** out, int32_t value) {\012  SPVM_NATIVE_BASIC_TYPE* basic_type = env->api->runtime->get_basic_ty"
      "pe_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, obj"
      "ect));\012  *(int32_t*)&fields[0] = value;\012  env->assign_object(env, stack, out, object);\012}\012\012static inl"
      "ine void SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_LONG_OBJECT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_O"
      "BJ** 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->new_object_no"
      "_mortal(env, stack, basic_type);\012  int64_t** fields = (int64_t**)(GET_DATA_ADDRESS(env, stack, objec"
      "t));\012  *(int64_t*)&fields[0] = value;\012  env->assign_object(env, stack, out, object);\012}\012\012static inlin"
      "e void SPVM_IMPLEMENT_TYPE_CONVERSION_FLOAT_TO_FLOAT_OBJECT(SPVM_ENV* env, SPVM_VALUE* stack, SPVM_O"
      "BJ** out, float value) {\012  SPVM_NATIVE_BASIC_TYPE* basic_type = env->api->runtime->get_basic_type_by"
      "_id(env->runtime, SPVM_NATIVE_C_BASIC_TYPE_ID_FLOAT_CLASS);\012  SPVM_OBJ* object = env->new_object_no_"
      "mortal(env, stack, basic_type);\012  float** fields = (float**)(GET_DATA_ADDRESS(env, stack, object));\012"
      "  *(float*)&fields[0] = value;\012  env->assign_object(env, stack, out, object);\012}\012\012static inline 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_object_no_mor"
      "tal(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 inline void "
      "SPVM_IMPLEMENT_TYPE_CONVERSION_ANY_OBJECT_TO_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, int8_t* out, SPV"
      "M_OBJ* object, int32_t* error_id) {\012  \012  *out = env->numeric_object_to_byte(env, stack, object, erro"
      "r_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->numeric_object_t"
      "o_short(env, stack, object, error_id);\012}\012\012static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_ANY_OBJE"
      "CT_TO_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* out, SPVM_OBJ* object, int32_t* error_id) {\012  \012"
      "  *out = env->numeric_object_to_int(env, stack, object, error_id);\012}\012\012static inline void SPVM_IMPLEM"
      "ENT_TYPE_CONVERSION_ANY_OBJECT_TO_LONG(SPVM_ENV* env, SPVM_VALUE* stack, int64_t* out, SPVM_OBJ* obj"
      "ect, int32_t* error_id) {\012  \012  *out = env->numeric_object_to_long(env, stack, object, error_id);\012}\012\012"
      "static inline void SPVM_IMPLEMENT_TYPE_CONVERSION_ANY_OBJECT_TO_FLOAT(SPVM_ENV* env, SPVM_VALUE* sta"
      "ck, 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_OBJECT_TO_DOUBLE"
      "(SPVM_ENV* env, SPVM_VALUE* stack, double* out, SPVM_OBJ* object, int32_t* error_id) {\012  \012  *out = e"
      "nv->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_STACK_DOUBLE"
      "(stack, stack_index, in) (*(double*)&stack[stack_index] = in)\012#define SPVM_IMPLEMENT_SET_STACK_OBJEC"
      "T(stack, stack_index, in) (*(SPVM_OBJ**)&stack[stack_index] = in)\012#define SPVM_IMPLEMENT_SET_STACK_R"
      "EF(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 SPVM_IMPLEME"
      "NT_SET_STACK_MULNUM_BYTE(SPVM_ENV* env, SPVM_VALUE* stack, int32_t stack_base, int32_t args_width, i"
      "nt8_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_S"
      "ET_STACK_MULNUM_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t stack_base, int32_t args_width, int1"
      "6_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_IMPLEMENT_SE"
      "T_STACK_MULNUM_INT(SPVM_ENV* env, SPVM_VALUE* stack, int32_t stack_base, int32_t args_width, int32_t"
      "* in) {\012  for (int32_t stack_index = 0; stack_index < args_width; stack_index++) {\012    *(int32_t*)&s"
      "tack[stack_base + stack_index] = *(in + stack_index);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_S"
      "TACK_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    *(int64_t*)&sta"
      "ck[stack_base + stack_index] = *(in + stack_index);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_STA"
      "CK_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[st"
      "ack_base + stack_index] = *(in + stack_index);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_SET_STACK_MU"
      "LNUM_DOUBLE(SPVM_ENV* env, SPVM_VALUE* stack, int32_t stack_base, int32_t args_width, double* in) {\012"
      "  for (int32_t stack_index = 0; stack_index < args_width; stack_index++) {\012    *(double*)&stack[stac"
      "k_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_SHORT(out, sta"
      "ck, stack_index) (out = *(int16_t*)&stack[stack_index])\012#define SPVM_IMPLEMENT_GET_STACK_INT(out, st"
      "ack, 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_STACK_FLOAT(ou"
      "t, stack, stack_index) (out = *(float*)&stack[stack_index])\012#define SPVM_IMPLEMENT_GET_STACK_DOUBLE("
      "out, stack, stack_index) (out = *(double*)&stack[stack_index])\012\012static inline void SPVM_IMPLEMENT_GE"
      "T_STACK_OBJECT(SPVM_ENV* env, SPVM_OBJ** out, SPVM_VALUE* stack, int32_t stack_index) {\012  env->assig"
      "n_object(env, stack, out, *(SPVM_OBJ**)&stack[stack_index]);\012}\012\012#define SPVM_IMPLEMENT_GET_STACK_REF"
      "(out, stack, stack_index) (out = *(SPVM_REF**)&stack[stack_index])\012\012static inline void SPVM_IMPLEMEN"
      "T_GET_STACK_MULNUM_BYTE(SPVM_ENV* env, int8_t* out, SPVM_VALUE* stack, int32_t stack_base, int32_t a"
      "rgs_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 SPVM_IMPLEMEN"
      "T_GET_STACK_MULNUM_SHORT(SPVM_ENV* env, int16_t* out, SPVM_VALUE* stack, int32_t stack_base, int32_t"
      " args_width) {\012  for (int32_t stack_index = 0; stack_index < args_width; stack_index++) {\012    *(out "
      "+ stack_index) = *(int16_t*)&stack[(stack_base) + stack_index];\012  }\012}\012\012static inline void SPVM_IMPLE"
      "MENT_GET_STACK_MULNUM_INT(SPVM_ENV* env, int32_t* out, SPVM_VALUE* stack, int32_t stack_base, int32_"
      "t args_width) {\012  for (int32_t stack_index = 0; stack_index < args_width; stack_index++) {\012    *(out"
      " + stack_index) = *(int32_t*)&stack[(stack_base) + stack_index];\012  }\012}\012\012static inline void SPVM_IMPL"
      "EMENT_GET_STACK_MULNUM_LONG(SPVM_ENV* env, int64_t* out, SPVM_VALUE* stack, int32_t stack_base, int3"
      "2_t args_width) {\012  for (int32_t stack_index = 0; stack_index < args_width; stack_index++) {\012    *(o"
      "ut + stack_index) = *(int64_t*)&stack[(stack_base) + stack_index];\012  }\012}\012\012static inline void SPVM_IM"
      "PLEMENT_GET_STACK_MULNUM_FLOAT(SPVM_ENV* env, float* out, SPVM_VALUE* stack, int32_t stack_base, int"
      "32_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 void SPVM_IMP"
      "LEMENT_GET_STACK_MULNUM_DOUBLE(SPVM_ENV* env, double* out, SPVM_VALUE* stack, int32_t stack_base, in"
      "t32_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_I"
      "MPLEMENT_GET_STACK_OPTIONAL_BYTE(SPVM_ENV* env, int8_t* out, SPVM_VALUE* stack, int32_t stack_index,"
      " int8_t default_value) {\012  int32_t args_width = env->args_width(env, stack);\012  if (stack_index >= ar"
      "gs_width) {\012    *out = default_value;\012  }\012  else {\012    *out = *(int8_t*)&stack[stack_index];\012  }\012}\012\012"
      "static inline void SPVM_IMPLEMENT_GET_STACK_OPTIONAL_SHORT(SPVM_ENV* env, int16_t* out, SPVM_VALUE* "
      "stack, int32_t stack_index, int16_t default_value) {\012  int32_t args_width = env->args_width(env, sta"
      "ck);\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(SPVM_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_value;\012  }\012  e"
      "lse {\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_v"
      "alue) {\012  int32_t args_width = env->args_width(env, stack);\012  if (stack_index >= args_width) {\012    *"
      "out = default_value;\012  }\012  else {\012    *out = *(int64_t*)&stack[stack_index];\012  }\012}\012\012static inline vo"
      "id SPVM_IMPLEMENT_GET_STACK_OPTIONAL_FLOAT(SPVM_ENV* env, float* out, SPVM_VALUE* stack, int32_t sta"
      "ck_index, float default_value) {\012  int32_t args_width = env->args_width(env, stack);\012  if (stack_ind"
      "ex >= args_width) {\012    *out = default_value;\012  }\012  else {\012    *out = *(float*)&stack[stack_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->args_width(en"
      "v, stack);\012  if (stack_index >= args_width) {\012    *out = default_value;\012  }\012  else {\012    *out = *(do"
      "uble*)&stack[stack_index];\012  }\012}\012\012static inline void SPVM_IMPLEMENT_GET_STACK_OPTIONAL_OBJECT(SPVM_E"
      "NV* 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#def"
      "ine SPVM_IMPLEMENT_RETURN_BYTE(stack, in) (*(int8_t*)&stack[0] = in)\012#define SPVM_IMPLEMENT_RETURN_S"
      "HORT(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 S"
      "PVM_IMPLEMENT_RETURN_FLOAT(stack, in) (*(float*)&stack[0] = in)\012#define SPVM_IMPLEMENT_RETURN_DOUBLE"
      "(stack, in) (*(double*)&stack[0] = in)\012\012static inline void SPVM_IMPLEMENT_RETURN_OBJECT(SPVM_ENV* en"
      "v, SPVM_VALUE* stack, SPVM_OBJ* in) {\012  *(SPVM_OBJ**)&stack[0] = in;\012  if (in != NULL) {\012    env->ap"
      "i->internal->inc_ref_count(env, stack, in);\012  }\012}\012\012#define SPVM_IMPLEMENT_RETURN_UNDEF(stack) (*(SPV"
      "M_OBJ**)&stack[0] = NULL)\012\012static inline void SPVM_IMPLEMENT_RETURN_MULNUM_BYTE(SPVM_ENV* env, SPVM_"
      "VALUE* stack, int8_t* in, int32_t args_width) {\012  for (int32_t stack_index = 0; stack_index < args_w"
      "idth; stack_index++) {\012    *(int8_t*)&stack[stack_index] = *(in + stack_index);\012  }\012}\012\012static inline"
      " void SPVM_IMPLEMENT_RETURN_MULNUM_SHORT(SPVM_ENV* env, SPVM_VALUE* stack, int16_t* in, int32_t args"
      "_width) {\012  for (int32_t stack_index = 0; stack_index < args_width; stack_index++) {\012    *(int16_t*)"
      "&stack[stack_index] = *(in + stack_index);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_RETURN_MULNUM_IN"
      "T(SPVM_ENV* env, SPVM_VALUE* stack, int32_t* in, int32_t args_width) {\012  for (int32_t stack_index = "
      "0; stack_index < args_width; stack_index++) {\012    *(int32_t*)&stack[stack_index] = *(in + stack_inde"
      "x);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_RETURN_MULNUM_LONG(SPVM_ENV* env, SPVM_VALUE* stack, in"
      "t64_t* in, int32_t args_width) {\012  for (int32_t stack_index = 0; stack_index < args_width; stack_ind"
      "ex++) {\012    *(int64_t*)&stack[stack_index] = *(in + stack_index);\012  }\012}\012\012static inline void SPVM_IMP"
      "LEMENT_RETURN_MULNUM_FLOAT(SPVM_ENV* env, SPVM_VALUE* stack, float* in, int32_t args_width) {\012  for "
      "(int32_t stack_index = 0; stack_index < args_width; stack_index++) {\012    *(float*)&stack[stack_index"
      "] = *(in + stack_index);\012  }\012}\012\012static inline void SPVM_IMPLEMENT_RETURN_MULNUM_DOUBLE(SPVM_ENV* env"
      ", SPVM_VALUE* stack, double* in, int32_t args_width) {\012  for (int32_t stack_index = 0; stack_index <"
      " args_width; stack_index++) {\012    *(double*)&stack[stack_index] = *(in + stack_index);\012  }\012}\012\012#defin"
      "e SPVM_IMPLEMENT_CALL_CLASS_METHOD(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_STATIC(env, stack, error_id, method, args_widt"
      "h, func_name, file, line) (error_id = env->call_method_no_mortal_no_check_args(env, stack, method, a"
      "rgs_width, func_name, file, line))\012\012#define SPVM_IMPLEMENT_CALL_INSTANCE_METHOD(env, stack, error_id"
      ", method_name, args_width, decl_args_signature, func_name, file, line) (error_id = env->call_instanc"
      "e_method_no_mortal_less_check_args(env, stack, method_name, args_width, decl_args_signature, func_na"
      "me, file, line))\012\012#endif\012"
;

const char* get_precompile_header_content() {
  return spvm_precompile_header_content;
}
