• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef PANDA_RUNTIME_INTEROP_ETS_NAPI_H
17 #define PANDA_RUNTIME_INTEROP_ETS_NAPI_H
18 
19 // NOLINTBEGIN(modernize-use-using, readability-identifier-naming, cppcoreguidelines-pro-type-vararg)
20 
21 #ifdef __cplusplus
22 #include <cstdint>
23 #include <cstdarg>
24 #else
25 #include <stdint.h>
26 #include <stdarg.h>
27 #endif
28 
29 // NOLINTBEGIN(cppcoreguidelines-macro-usage)
30 
31 // Version Constants
32 #define ETS_NAPI_VERSION_1_0 0x00010000
33 
34 // General return value constants
35 #define ETS_OK 0            // success
36 #define ETS_ERR (-1)        // unknown error
37 #define ETS_ERR_VER (-2)    // ETS version error
38 #define ETS_ERR_NOMEM (-3)  // not enough memory
39 #define ETS_ERR_EXIST (-4)  // VM already created
40 #define ETS_ERR_INVAL (-5)  // invalid arguments
41 
42 // Boolean Constants
43 #define ETS_FALSE 0
44 #define ETS_TRUE 1
45 
46 // Mode Constants
47 #define ETS_COMMIT 1
48 #define ETS_ABORT 2
49 
50 // NOLINTEND(cppcoreguidelines-macro-usage)
51 
52 // Primitive Types
53 typedef uint8_t ets_boolean;
54 typedef int8_t ets_byte;
55 typedef uint16_t ets_char;
56 typedef int16_t ets_short;
57 typedef int32_t ets_int;
58 typedef int64_t ets_long;
59 typedef float ets_float;
60 typedef double ets_double;
61 typedef ets_int ets_size;
62 
63 // Reference Types
64 #ifdef __cplusplus
65 class __ets_object {};
66 class __ets_class : public __ets_object {};
67 class __ets_string : public __ets_object {};
68 class __ets_array : public __ets_object {};
69 class __ets_objectArray : public __ets_array {};
70 class __ets_booleanArray : public __ets_array {};
71 class __ets_byteArray : public __ets_array {};
72 class __ets_charArray : public __ets_array {};
73 class __ets_shortArray : public __ets_array {};
74 class __ets_intArray : public __ets_array {};
75 class __ets_longArray : public __ets_array {};
76 class __ets_floatArray : public __ets_array {};
77 class __ets_doubleArray : public __ets_array {};
78 class __ets_error : public __ets_object {};
79 
80 typedef __ets_object *ets_object;
81 typedef __ets_class *ets_class;
82 typedef __ets_string *ets_string;
83 typedef __ets_array *ets_array;
84 typedef __ets_objectArray *ets_objectArray;
85 typedef __ets_booleanArray *ets_booleanArray;
86 typedef __ets_byteArray *ets_byteArray;
87 typedef __ets_charArray *ets_charArray;
88 typedef __ets_shortArray *ets_shortArray;
89 typedef __ets_intArray *ets_intArray;
90 typedef __ets_longArray *ets_longArray;
91 typedef __ets_floatArray *ets_floatArray;
92 typedef __ets_doubleArray *ets_doubleArray;
93 typedef __ets_error *ets_error;
94 typedef __ets_object *ets_weak;
95 
96 #else   // __cplusplus
97 
98 struct __ets_object;
99 typedef struct __ets_object *ets_object;
100 typedef ets_object ets_class;
101 typedef ets_object ets_string;
102 typedef ets_object ets_error;
103 typedef ets_object ets_weak;
104 typedef ets_object ets_array;
105 typedef ets_array ets_objectArray;
106 typedef ets_array ets_booleanArray;
107 typedef ets_array ets_byteArray;
108 typedef ets_array ets_charArray;
109 typedef ets_array ets_shortArray;
110 typedef ets_array ets_intArray;
111 typedef ets_array ets_longArray;
112 typedef ets_array ets_floatArray;
113 typedef ets_array ets_doubleArray;
114 #endif  // __cplusplus
115 
116 struct __ets_deferred;
117 typedef struct __ets_deferred *ets_deferred;
118 
119 // Field and Method IDs
120 struct __ets_method;
121 struct __ets_field;
122 typedef struct __ets_method *ets_method;
123 typedef struct __ets_field *ets_field;
124 
125 // The Value Type
126 typedef union ets_value {
127     ets_boolean z;
128     ets_byte b;
129     ets_char c;
130     ets_short s;
131     ets_int i;
132     ets_long j;
133     ets_float f;
134     ets_double d;
135     ets_object l;
136 } ets_value;
137 
138 // Describe native method by name, signature and function pointer
139 typedef struct {
140     const char *name;
141     const char *signature;
142     void *func;
143 } EtsNativeMethod;
144 
145 // The object reference types
146 typedef enum {
147     ETS_INVALID_REF_TYPE = 0,
148     ETS_LOCAL_REF_TYPE = 1,
149     ETS_GLOBAL_REF_TYPE = 2,
150     ETS_WEAK_GLOBAL_REF_TYPE = 3
151 } ets_objectRefType;
152 
153 #ifdef __cplusplus
154 typedef struct __EtsVM EtsVM;
155 typedef struct __EtsEnv ets_env;
156 #else
157 typedef const struct ETS_InvokeInterface *EtsVM;
158 typedef const struct ETS_NativeInterface *ets_env;
159 #endif
160 
161 // Deprecated types:
162 typedef ets_env EtsEnv;
163 
164 typedef enum {
165     ETS_OKAY,
166     ETS_INVALID_ARG,
167     ETS_GENERIC_FAILURE,
168     ETS_PENDING_EXCEPTION,
169     ETS_INVALID_VERSION,  // NOTE(v.cherkashin): This status code doesn't match to napi interface.
170                           //                     Should we probably delete this status code?
171 } ets_status;
172 
173 // clang-format off
174 // Interface Function Table
175 struct ETS_NativeInterface {
176     // NOTE(a.urakov): solve the "Array" naming problem
177     ets_int (*GetVersion)(EtsEnv *env);
178 #ifdef ETS_NAPI_DESIGN_FINISHED
179     ets_class (*DefineClass)(EtsEnv *env, const char *name, ets_object loader, const ets_byte *buf, ets_size bufLen);
180 #endif
181     ets_class (*FindClass)(EtsEnv *env, const char *name);
182 #ifdef ETS_NAPI_DESIGN_FINISHED
183     ets_method (*FromReflectedMethod)(EtsEnv *env, ets_object method);
184     ets_field (*FromReflectedField)(EtsEnv *env, ets_object field);
185     ets_object (*ToReflectedMethod)(EtsEnv *env, ets_class cls, ets_method p_method, ets_boolean isStatic);
186 #endif
187     ets_class (*GetSuperclass)(EtsEnv *env, ets_class cls);
188     ets_boolean (*IsAssignableFrom)(EtsEnv *env, ets_class cls1, ets_class cls2);
189 #ifdef ETS_NAPI_DESIGN_FINISHED
190     ets_object (*ToReflectedField)(EtsEnv *env, ets_class cls, ets_field p_field, ets_boolean isStatic);
191 #endif
192     ets_int (*ThrowError)(EtsEnv *env, ets_error obj);
193     ets_int (*ThrowErrorNew)(EtsEnv *env, ets_class cls, const char *message);
194     ets_error (*ErrorOccurred)(EtsEnv *env);
195     void (*ErrorDescribe)(EtsEnv *env);
196     void (*ErrorClear)(EtsEnv *env);
197     void (*FatalError)(EtsEnv *env, const char *message);
198     ets_int (*PushLocalFrame)(EtsEnv *env, ets_int capacity);
199     ets_object (*PopLocalFrame)(EtsEnv *env, ets_object result);
200     ets_object (*NewGlobalRef)(EtsEnv *env, ets_object obj);
201     void (*DeleteGlobalRef)(EtsEnv *env, ets_object globalRef);
202     void (*DeleteLocalRef)(EtsEnv *env, ets_object localRef);
203     ets_boolean (*IsSameObject)(EtsEnv *env, ets_object ref1, ets_object ref2);
204     ets_object (*NewLocalRef)(EtsEnv *env, ets_object ref);
205     ets_int (*EnsureLocalCapacity)(EtsEnv *env, ets_int capacity);
206     ets_object (*AllocObject)(EtsEnv *env, ets_class cls);
207     ets_object (*NewObject)(EtsEnv *env, ets_class cls, ets_method p_method, ...);
208     ets_object (*NewObjectList)(EtsEnv *env, ets_class cls, ets_method p_method, va_list args);
209     ets_object (*NewObjectArray)(EtsEnv *env, ets_class cls, ets_method p_method, const ets_value *args);
210     ets_class (*GetObjectClass)(EtsEnv *env, ets_object obj);
211     ets_boolean (*IsInstanceOf)(EtsEnv *env, ets_object obj, ets_class cls);
212     ets_method (*Getp_method)(EtsEnv *env, ets_class cls, const char *name, const char *sig);
213     ets_object (*CallObjectMethod)(EtsEnv *env, ets_object obj, ets_method p_method, ...);
214     ets_object (*CallObjectMethodList)(EtsEnv *env, ets_object obj, ets_method p_method, va_list args);
215     ets_object (*CallObjectMethodArray)(EtsEnv *env, ets_object obj, ets_method p_method, const ets_value *args);
216     ets_boolean (*CallBooleanMethod)(EtsEnv *env, ets_object obj, ets_method p_method, ...);
217     ets_boolean (*CallBooleanMethodList)(EtsEnv *env, ets_object obj, ets_method p_method, va_list args);
218     ets_boolean (*CallBooleanMethodArray)(EtsEnv *env, ets_object obj, ets_method p_method, const ets_value *args);
219     ets_byte (*CallByteMethod)(EtsEnv *env, ets_object obj, ets_method p_method, ...);
220     ets_byte (*CallByteMethodList)(EtsEnv *env, ets_object obj, ets_method p_method, va_list args);
221     ets_byte (*CallByteMethodArray)(EtsEnv *env, ets_object obj, ets_method p_method, const ets_value *args);
222     ets_char (*CallCharMethod)(EtsEnv *env, ets_object obj, ets_method p_method, ...);
223     ets_char (*CallCharMethodList)(EtsEnv *env, ets_object obj, ets_method p_method, va_list args);
224     ets_char (*CallCharMethodArray)(EtsEnv *env, ets_object obj, ets_method p_method, const ets_value *args);
225     ets_short (*CallShortMethod)(EtsEnv *env, ets_object obj, ets_method p_method, ...);
226     ets_short (*CallShortMethodList)(EtsEnv *env, ets_object obj, ets_method p_method, va_list args);
227     ets_short (*CallShortMethodArray)(EtsEnv *env, ets_object obj, ets_method p_method, const ets_value *args);
228     ets_int (*CallIntMethod)(EtsEnv *env, ets_object obj, ets_method p_method, ...);
229     ets_int (*CallIntMethodList)(EtsEnv *env, ets_object obj, ets_method p_method, va_list args);
230     ets_int (*CallIntMethodArray)(EtsEnv *env, ets_object obj, ets_method p_method, const ets_value *args);
231     ets_long (*CallLongMethod)(EtsEnv *env, ets_object obj, ets_method p_method, ...);
232     ets_long (*CallLongMethodList)(EtsEnv *env, ets_object obj, ets_method p_method, va_list args);
233     ets_long (*CallLongMethodArray)(EtsEnv *env, ets_object obj, ets_method p_method, const ets_value *args);
234     ets_float (*CallFloatMethod)(EtsEnv *env, ets_object obj, ets_method p_method, ...);
235     ets_float (*CallFloatMethodList)(EtsEnv *env, ets_object obj, ets_method p_method, va_list args);
236     ets_float (*CallFloatMethodArray)(EtsEnv *env, ets_object obj, ets_method p_method, const ets_value *args);
237     ets_double (*CallDoubleMethod)(EtsEnv *env, ets_object obj, ets_method p_method, ...);
238     ets_double (*CallDoubleMethodList)(EtsEnv *env, ets_object obj, ets_method p_method, va_list args);
239     ets_double (*CallDoubleMethodArray)(EtsEnv *env, ets_object obj, ets_method p_method, const ets_value *args);
240     void (*CallVoidMethod)(EtsEnv *env, ets_object obj, ets_method p_method, ...);
241     void (*CallVoidMethodList)(EtsEnv *env, ets_object obj, ets_method p_method, va_list args);
242     void (*CallVoidMethodArray)(EtsEnv *env, ets_object obj, ets_method p_method, const ets_value *args);
243 
244     ets_object (*CallNonvirtualObjectMethod)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method, ...);
245     ets_object (*CallNonvirtualObjectMethodList)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
246                                                  va_list args);
247     ets_object (*CallNonvirtualObjectMethodArray)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
248                                                   const ets_value *args);
249     ets_boolean (*CallNonvirtualBooleanMethod)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method, ...);
250     ets_boolean (*CallNonvirtualBooleanMethodList)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
251                                                    va_list args);
252     ets_boolean (*CallNonvirtualBooleanMethodArray)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
253                                                     const ets_value *args);
254     ets_byte (*CallNonvirtualByteMethod)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method, ...);
255     ets_byte (*CallNonvirtualByteMethodList)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
256                                              va_list args);
257     ets_byte (*CallNonvirtualByteMethodArray)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
258                                               const ets_value *args);
259     ets_char (*CallNonvirtualCharMethod)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method, ...);
260     ets_char (*CallNonvirtualCharMethodList)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
261                                              va_list args);
262     ets_char (*CallNonvirtualCharMethodArray)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
263                                               const ets_value *args);
264     ets_short (*CallNonvirtualShortMethod)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method, ...);
265     ets_short (*CallNonvirtualShortMethodList)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
266                                                va_list args);
267     ets_short (*CallNonvirtualShortMethodArray)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
268                                                 const ets_value *args);
269     ets_int (*CallNonvirtualIntMethod)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method, ...);
270     ets_int (*CallNonvirtualIntMethodList)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
271                                            va_list args);
272     ets_int (*CallNonvirtualIntMethodArray)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
273                                             const ets_value *args);
274     ets_long (*CallNonvirtualLongMethod)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method, ...);
275     ets_long (*CallNonvirtualLongMethodList)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
276                                              va_list args);
277     ets_long (*CallNonvirtualLongMethodArray)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
278                                               const ets_value *args);
279     ets_float (*CallNonvirtualFloatMethod)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method, ...);
280     ets_float (*CallNonvirtualFloatMethodList)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
281                                                va_list args);
282     ets_float (*CallNonvirtualFloatMethodArray)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
283                                                 const ets_value *args);
284     ets_double (*CallNonvirtualDoubleMethod)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method, ...);
285     ets_double (*CallNonvirtualDoubleMethodList)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
286                                                  va_list args);
287     ets_double (*CallNonvirtualDoubleMethodArray)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
288                                                   const ets_value *args);
289     void (*CallNonvirtualVoidMethod)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method, ...);
290     void (*CallNonvirtualVoidMethodList)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method, va_list args);
291     void (*CallNonvirtualVoidMethodArray)(EtsEnv *env, ets_object obj, ets_class cls, ets_method p_method,
292                                           const ets_value *args);
293     ets_field (*Getp_field)(EtsEnv *env, ets_class cls, const char *name, const char *sig);
294     ets_object (*GetObjectField)(EtsEnv *env, ets_object obj, ets_field p_field);
295     ets_boolean (*GetBooleanField)(EtsEnv *env, ets_object obj, ets_field p_field);
296     ets_byte (*GetByteField)(EtsEnv *env, ets_object obj, ets_field p_field);
297     ets_char (*GetCharField)(EtsEnv *env, ets_object obj, ets_field p_field);
298     ets_short (*GetShortField)(EtsEnv *env, ets_object obj, ets_field p_field);
299     ets_int (*GetIntField)(EtsEnv *env, ets_object obj, ets_field p_field);
300     ets_long (*GetLongField)(EtsEnv *env, ets_object obj, ets_field p_field);
301     ets_float (*GetFloatField)(EtsEnv *env, ets_object obj, ets_field p_field);
302     ets_double (*GetDoubleField)(EtsEnv *env, ets_object obj, ets_field p_field);
303     void (*SetObjectField)(EtsEnv *env, ets_object obj, ets_field p_field, ets_object value);
304     void (*SetBooleanField)(EtsEnv *env, ets_object obj, ets_field p_field, ets_boolean value);
305     void (*SetByteField)(EtsEnv *env, ets_object obj, ets_field p_field, ets_byte value);
306     void (*SetCharField)(EtsEnv *env, ets_object obj, ets_field p_field, ets_char value);
307     void (*SetShortField)(EtsEnv *env, ets_object obj, ets_field p_field, ets_short value);
308     void (*SetIntField)(EtsEnv *env, ets_object obj, ets_field p_field, ets_int value);
309     void (*SetLongField)(EtsEnv *env, ets_object obj, ets_field p_field, ets_long value);
310     void (*SetFloatField)(EtsEnv *env, ets_object obj, ets_field p_field, ets_float value);
311     void (*SetDoubleField)(EtsEnv *env, ets_object obj, ets_field p_field, ets_double value);
312     ets_method (*GetStaticp_method)(EtsEnv *env, ets_class cls, const char *name, const char *sig);
313     ets_object (*CallStaticObjectMethod)(EtsEnv *env, ets_class cls, ets_method p_method, ...);
314     ets_object (*CallStaticObjectMethodList)(EtsEnv *env, ets_class cls, ets_method p_method, va_list args);
315     ets_object (*CallStaticObjectMethodArray)(EtsEnv *env, ets_class cls, ets_method p_method, ets_value *args);
316     ets_boolean (*CallStaticBooleanMethod)(EtsEnv *env, ets_class cls, ets_method p_method, ...);
317     ets_boolean (*CallStaticBooleanMethodList)(EtsEnv *env, ets_class cls, ets_method p_method, va_list args);
318     ets_boolean (*CallStaticBooleanMethodArray)(EtsEnv *env, ets_class cls, ets_method p_method, ets_value *args);
319     ets_byte (*CallStaticByteMethod)(EtsEnv *env, ets_class cls, ets_method p_method, ...);
320     ets_byte (*CallStaticByteMethodList)(EtsEnv *env, ets_class cls, ets_method p_method, va_list args);
321     ets_byte (*CallStaticByteMethodArray)(EtsEnv *env, ets_class cls, ets_method p_method, ets_value *args);
322     ets_char (*CallStaticCharMethod)(EtsEnv *env, ets_class cls, ets_method p_method, ...);
323     ets_char (*CallStaticCharMethodList)(EtsEnv *env, ets_class cls, ets_method p_method, va_list args);
324     ets_char (*CallStaticCharMethodArray)(EtsEnv *env, ets_class cls, ets_method p_method, ets_value *args);
325     ets_short (*CallStaticShortMethod)(EtsEnv *env, ets_class cls, ets_method p_method, ...);
326     ets_short (*CallStaticShortMethodList)(EtsEnv *env, ets_class cls, ets_method p_method, va_list args);
327     ets_short (*CallStaticShortMethodArray)(EtsEnv *env, ets_class cls, ets_method p_method, ets_value *args);
328     ets_int (*CallStaticIntMethod)(EtsEnv *env, ets_class cls, ets_method p_method, ...);
329     ets_int (*CallStaticIntMethodList)(EtsEnv *env, ets_class cls, ets_method p_method, va_list args);
330     ets_int (*CallStaticIntMethodArray)(EtsEnv *env, ets_class cls, ets_method p_method, ets_value *args);
331     ets_long (*CallStaticLongMethod)(EtsEnv *env, ets_class cls, ets_method p_method, ...);
332     ets_long (*CallStaticLongMethodList)(EtsEnv *env, ets_class cls, ets_method p_method, va_list args);
333     ets_long (*CallStaticLongMethodArray)(EtsEnv *env, ets_class cls, ets_method p_method, ets_value *args);
334     ets_float (*CallStaticFloatMethod)(EtsEnv *env, ets_class cls, ets_method p_method, ...);
335     ets_float (*CallStaticFloatMethodList)(EtsEnv *env, ets_class cls, ets_method p_method, va_list args);
336     ets_float (*CallStaticFloatMethodArray)(EtsEnv *env, ets_class cls, ets_method p_method, ets_value *args);
337     ets_double (*CallStaticDoubleMethod)(EtsEnv *env, ets_class cls, ets_method p_method, ...);
338     ets_double (*CallStaticDoubleMethodList)(EtsEnv *env, ets_class cls, ets_method p_method, va_list args);
339     ets_double (*CallStaticDoubleMethodArray)(EtsEnv *env, ets_class cls, ets_method p_method, ets_value *args);
340     void (*CallStaticVoidMethod)(EtsEnv *env, ets_class cls, ets_method p_method, ...);
341     void (*CallStaticVoidMethodList)(EtsEnv *env, ets_class cls, ets_method p_method, va_list args);
342     void (*CallStaticVoidMethodArray)(EtsEnv *env, ets_class cls, ets_method p_method, ets_value *args);
343     ets_field (*GetStaticp_field)(EtsEnv *env, ets_class cls, const char *name, const char *sig);
344     ets_object (*GetStaticObjectField)(EtsEnv *env, ets_class cls, ets_field p_field);
345     ets_boolean (*GetStaticBooleanField)(EtsEnv *env, ets_class cls, ets_field p_field);
346     ets_byte (*GetStaticByteField)(EtsEnv *env, ets_class cls, ets_field p_field);
347     ets_char (*GetStaticCharField)(EtsEnv *env, ets_class cls, ets_field p_field);
348     ets_short (*GetStaticShortField)(EtsEnv *env, ets_class cls, ets_field p_field);
349     ets_int (*GetStaticIntField)(EtsEnv *env, ets_class cls, ets_field p_field);
350     ets_long (*GetStaticLongField)(EtsEnv *env, ets_class cls, ets_field p_field);
351     ets_float (*GetStaticFloatField)(EtsEnv *env, ets_class cls, ets_field p_field);
352     ets_double (*GetStaticDoubleField)(EtsEnv *env, ets_class cls, ets_field p_field);
353     void (*SetStaticObjectField)(EtsEnv *env, ets_class cls, ets_field p_field, ets_object value);
354     void (*SetStaticBooleanField)(EtsEnv *env, ets_class cls, ets_field p_field, ets_boolean value);
355     void (*SetStaticByteField)(EtsEnv *env, ets_class cls, ets_field p_field, ets_byte value);
356     void (*SetStaticCharField)(EtsEnv *env, ets_class cls, ets_field p_field, ets_char value);
357     void (*SetStaticShortField)(EtsEnv *env, ets_class cls, ets_field p_field, ets_short value);
358     void (*SetStaticIntField)(EtsEnv *env, ets_class cls, ets_field p_field, ets_int value);
359     void (*SetStaticLongField)(EtsEnv *env, ets_class cls, ets_field p_field, ets_long value);
360     void (*SetStaticFloatField)(EtsEnv *env, ets_class cls, ets_field p_field, ets_float value);
361     void (*SetStaticDoubleField)(EtsEnv *env, ets_class cls, ets_field p_field, ets_double value);
362     ets_string (*NewString)(EtsEnv *env, const ets_char *unicodeChars, ets_size len);
363     ets_size (*GetStringLength)(EtsEnv *env, ets_string string);
364     const ets_char *(*GetStringChars)(EtsEnv *env, ets_string string, ets_boolean *isCopy);
365     void (*ReleaseStringChars)(EtsEnv *env, ets_string string, const ets_char *chars);
366     ets_string (*NewStringUTF)(EtsEnv *env, const char *bytes);
367     ets_size (*GetStringUTFLength)(EtsEnv *env, ets_string string);
368     const char *(*GetStringUTFChars)(EtsEnv *env, ets_string string, ets_boolean *isCopy);
369     void (*ReleaseStringUTFChars)(EtsEnv *env, ets_string string, const char *utf);
370     ets_size (*GetArrayLength)(EtsEnv *env, ets_array array);
371     ets_objectArray (*NewObjectsArray)(EtsEnv *env, ets_size length, ets_class element_class,
372                                       ets_object initial_element);
373     ets_object (*GetObjectArrayElement)(EtsEnv *env, ets_objectArray array, ets_size index);
374     void (*SetObjectArrayElement)(EtsEnv *env, ets_objectArray array, ets_size index, ets_object value);
375     ets_booleanArray (*NewBooleanArray)(EtsEnv *env, ets_size length);
376     ets_byteArray (*NewByteArray)(EtsEnv *env, ets_size length);
377     ets_charArray (*NewCharArray)(EtsEnv *env, ets_size length);
378     ets_shortArray (*NewShortArray)(EtsEnv *env, ets_size length);
379     ets_intArray (*NewIntArray)(EtsEnv *env, ets_size length);
380     ets_longArray (*NewLongArray)(EtsEnv *env, ets_size length);
381     ets_floatArray (*NewFloatArray)(EtsEnv *env, ets_size length);
382     ets_doubleArray (*NewDoubleArray)(EtsEnv *env, ets_size length);
383     ets_boolean *(*PinBooleanArray)(EtsEnv *env, ets_booleanArray array);
384     ets_byte *(*PinByteArray)(EtsEnv *env, ets_byteArray array);
385     ets_char *(*PinCharArray)(EtsEnv *env, ets_charArray array);
386     ets_short *(*PinShortArray)(EtsEnv *env, ets_shortArray array);
387     ets_int *(*PinIntArray)(EtsEnv *env, ets_intArray array);
388     ets_long *(*PinLongArray)(EtsEnv *env, ets_longArray array);
389     ets_float *(*PinFloatArray)(EtsEnv *env, ets_floatArray array);
390     ets_double *(*PinDoubleArray)(EtsEnv *env, ets_doubleArray array);
391     void (*UnpinBooleanArray)(EtsEnv *env, ets_booleanArray array);
392     void (*UnpinByteArray)(EtsEnv *env, ets_byteArray array);
393     void (*UnpinCharArray)(EtsEnv *env, ets_charArray array);
394     void (*UnpinShortArray)(EtsEnv *env, ets_shortArray array);
395     void (*UnpinIntArray)(EtsEnv *env, ets_intArray array);
396     void (*UnpinLongArray)(EtsEnv *env, ets_longArray array);
397     void (*UnpinFloatArray)(EtsEnv *env, ets_floatArray array);
398     void (*UnpinDoubleArray)(EtsEnv *env, ets_doubleArray array);
399     void (*GetBooleanArrayRegion)(EtsEnv *env, ets_booleanArray array, ets_size start, ets_size len, ets_boolean *buf);
400     void (*GetByteArrayRegion)(EtsEnv *env, ets_byteArray array, ets_size start, ets_size len, ets_byte *buf);
401     void (*GetCharArrayRegion)(EtsEnv *env, ets_charArray array, ets_size start, ets_size len, ets_char *buf);
402     void (*GetShortArrayRegion)(EtsEnv *env, ets_shortArray array, ets_size start, ets_size len, ets_short *buf);
403     void (*GetIntArrayRegion)(EtsEnv *env, ets_intArray array, ets_size start, ets_size len, ets_int *buf);
404     void (*GetLongArrayRegion)(EtsEnv *env, ets_longArray array, ets_size start, ets_size len, ets_long *buf);
405     void (*GetFloatArrayRegion)(EtsEnv *env, ets_floatArray array, ets_size start, ets_size len, ets_float *buf);
406     void (*GetDoubleArrayRegion)(EtsEnv *env, ets_doubleArray array, ets_size start, ets_size len, ets_double *buf);
407     void (*SetBooleanArrayRegion)(EtsEnv *env, ets_booleanArray array, ets_size start, ets_size len,
408                                   const ets_boolean *buf);
409     void (*SetByteArrayRegion)(EtsEnv *env, ets_byteArray array, ets_size start, ets_size len, const ets_byte *buf);
410     void (*SetCharArrayRegion)(EtsEnv *env, ets_charArray array, ets_size start, ets_size len, const ets_char *buf);
411     void (*SetShortArrayRegion)(EtsEnv *env, ets_shortArray array, ets_size start, ets_size len, const ets_short *buf);
412     void (*SetIntArrayRegion)(EtsEnv *env, ets_intArray array, ets_size start, ets_size len, const ets_int *buf);
413     void (*SetLongArrayRegion)(EtsEnv *env, ets_longArray array, ets_size start, ets_size len, const ets_long *buf);
414     void (*SetFloatArrayRegion)(EtsEnv *env, ets_floatArray array, ets_size start, ets_size len, const ets_float *buf);
415     void (*SetDoubleArrayRegion)(EtsEnv *env, ets_doubleArray array, ets_size start, ets_size len,
416                                  const ets_double *buf);
417     ets_int (*RegisterNatives)(EtsEnv *env, ets_class cls, const EtsNativeMethod *methods, ets_int nMethods);
418     ets_int (*UnregisterNatives)(EtsEnv *env, ets_class cls);
419     ets_int (*GetEtsVM)(EtsEnv *env, EtsVM **vm);
420     void (*GetStringRegion)(EtsEnv *env, ets_string str, ets_size start, ets_size len, ets_char *buf);
421     void (*GetStringUTFRegion)(EtsEnv *env, ets_string str, ets_size start, ets_size len, char *buf);
422     ets_weak (*NewWeakGlobalRef)(EtsEnv *env, ets_object obj);
423     void (*DeleteWeakGlobalRef)(EtsEnv *env, ets_weak obj);
424     ets_boolean (*ErrorCheck)(EtsEnv *env);
425 #ifdef ETS_NAPI_DESIGN_FINISHED
426     ets_object (*NewDirectByteBuffer)(EtsEnv *env, void *address, ets_long capacity);
427     void *(*GetDirectBufferAddress)(EtsEnv *env, ets_object buf);
428     ets_long (*GetDirectBufferCapacity)(EtsEnv *env, ets_object buf);
429 #endif
430     ets_objectRefType (*GetObjectRefType)(EtsEnv *env, ets_object obj);
431 
432     /* 227 methods */
433 
434     // Promise API
435     ets_status (*PromiseCreate)(EtsEnv *env, ets_deferred *deferred, ets_object *promise);
436     ets_status (*DeferredResolve)(EtsEnv *env, ets_deferred deferred, ets_object resolution);
437     ets_status (*DeferredReject)(EtsEnv *env, ets_deferred deferred, ets_object rejection);
438 };
439 // clang-format on
440 
441 // Invocation API Functions
442 typedef enum {
443     ETS_LOG_LEVEL,
444     ETS_MOBILE_LOG,
445     ETS_BOOT_FILE,
446     ETS_AOT_FILE,
447     ETS_ARK_FILE,
448     ETS_JIT,
449     ETS_NO_JIT,
450     ETS_AOT,
451     ETS_NO_AOT,
452     ETS_GC_TRIGGER_TYPE,
453     ETS_GC_TYPE,
454     ETS_RUN_GC_IN_PLACE,
455     ETS_INTERPRETER_TYPE
456 } EtsOptionType;
457 
458 typedef struct EtsVMOption {
459     EtsOptionType option;
460     const void *extraInfo;
461 } EtsVMOption;
462 
463 typedef struct EtsVMInitArgs {
464     ets_int version;
465     ets_int nOptions;
466     EtsVMOption *options;
467 } EtsVMInitArgs;
468 
469 typedef enum {
470     ETS_MOBILE_LOG_LEVEL_UNKNOWN = 0,
471     ETS_MOBILE_LOG_LEVEL_DEFAULT,
472     ETS_MOBILE_LOG_LEVEL_VERBOSE,
473     ETS_MOBILE_LOG_LEVEL_DEBUG,
474     ETS_MOBILE_LOG_LEVEL_INFO,
475     ETS_MOBILE_LOG_LEVEL_WARN,
476     ETS_MOBILE_LOG_LEVEL_ERROR,
477     ETS_MOBILE_LOG_LEVEL_FATAL,
478     ETS_MOBILE_LOG_LEVEL_SILENT
479 } EtsMobileLogggerLevel;
480 
481 #ifdef __cplusplus
482 extern "C" {
483 #endif
484 
485 #define ETS_EXPORT __attribute__((visibility("default")))
486 #define ETS_IMPORT
487 #define ETS_CALL
488 
489 ets_int ETS_GetDefaultVMInitArgs(EtsVMInitArgs *vmArgs);
490 ets_int ETS_GetCreatedVMs(EtsVM **vmBuf, ets_size bufLen, ets_size *nVms);
491 ets_int ETS_CreateVM(EtsVM **pVm, EtsEnv **pEnv, EtsVMInitArgs *vmArgs);
492 
493 #ifdef __cplusplus
494 }
495 #endif
496 
497 struct ETS_InvokeInterface {
498     ets_int (*DestroyEtsVM)(EtsVM *vm);
499     ets_int (*GetEnv)(EtsVM *vm, EtsEnv **pEnv, ets_int version);
500 };
501 
502 struct __EtsVM {
503     // NOLINTNEXTLINE(misc-non-private-member-variables-in-classes)
504     const struct ETS_InvokeInterface *invoke_interface;
505 
506 #ifdef __cplusplus
DestroyEtsVM__EtsVM507     ets_int DestroyEtsVM()
508     {
509         return invoke_interface->DestroyEtsVM(this);
510     }
511 
GetEnv__EtsVM512     ets_int GetEnv(EtsEnv **pEnv, ets_int version)
513     {
514         return invoke_interface->GetEnv(this, pEnv, version);
515     }
516 #endif
517 };
518 
519 struct __EtsEnv {
520     // NOLINTNEXTLINE(misc-non-private-member-variables-in-classes)
521     const struct ETS_NativeInterface *native_interface;
522 
523 #ifdef __cplusplus
524 
GetVersion__EtsEnv525     ets_int GetVersion()
526     {
527         return native_interface->GetVersion(this);
528     }
529     // DefineClass,
FindClass__EtsEnv530     ets_class FindClass(const char *name)
531     {
532         return native_interface->FindClass(this, name);
533     }
534     // FromReflectedMethod,
535     // FromReflectedField,
536     // ToReflectedMethod,
GetSuperclass__EtsEnv537     ets_class GetSuperclass(ets_class cls)
538     {
539         return native_interface->GetSuperclass(this, cls);
540     }
IsAssignableFrom__EtsEnv541     ets_boolean IsAssignableFrom(ets_class cls1, ets_class cls2)
542     {
543         return native_interface->IsAssignableFrom(this, cls1, cls2);
544     }
545     // ToReflectedField,
ThrowError__EtsEnv546     ets_int ThrowError(ets_error obj)
547     {
548         return native_interface->ThrowError(this, obj);
549     }
ThrowErrorNew__EtsEnv550     ets_int ThrowErrorNew(ets_class cls, const char *message)
551     {
552         return native_interface->ThrowErrorNew(this, cls, message);
553     }
ErrorOccurred__EtsEnv554     ets_error ErrorOccurred()
555     {
556         return native_interface->ErrorOccurred(this);
557     }
ErrorDescribe__EtsEnv558     void ErrorDescribe()
559     {
560         native_interface->ErrorDescribe(this);
561     }
ErrorClear__EtsEnv562     void ErrorClear()
563     {
564         native_interface->ErrorClear(this);
565     }
FatalError__EtsEnv566     void FatalError(const char *message)
567     {
568         native_interface->FatalError(this, message);
569     }
PushLocalFrame__EtsEnv570     ets_int PushLocalFrame(ets_int capacity)
571     {
572         return native_interface->PushLocalFrame(this, capacity);
573     }
PopLocalFrame__EtsEnv574     ets_object PopLocalFrame(ets_object result)
575     {
576         return native_interface->PopLocalFrame(this, result);
577     }
NewGlobalRef__EtsEnv578     ets_object NewGlobalRef(ets_object obj)
579     {
580         return native_interface->NewGlobalRef(this, obj);
581     }
DeleteGlobalRef__EtsEnv582     void DeleteGlobalRef(ets_object globalRef)
583     {
584         native_interface->DeleteGlobalRef(this, globalRef);
585     }
DeleteLocalRef__EtsEnv586     void DeleteLocalRef(ets_object localRef)
587     {
588         native_interface->DeleteLocalRef(this, localRef);
589     }
IsSameObject__EtsEnv590     ets_boolean IsSameObject(ets_object ref1, ets_object ref2)
591     {
592         return native_interface->IsSameObject(this, ref1, ref2);
593     }
NewLocalRef__EtsEnv594     ets_object NewLocalRef(ets_object ref)
595     {
596         return native_interface->NewLocalRef(this, ref);
597     }
EnsureLocalCapacity__EtsEnv598     ets_int EnsureLocalCapacity(ets_int capacity)
599     {
600         return native_interface->EnsureLocalCapacity(this, capacity);
601     }
AllocObject__EtsEnv602     ets_object AllocObject(ets_class cls)
603     {
604         return native_interface->AllocObject(this, cls);
605     }
NewObject__EtsEnv606     ets_object NewObject(ets_class cls, ets_method p_method, ...)
607     {
608         va_list args;
609         va_start(args, p_method);
610         ets_object ret = native_interface->NewObjectList(this, cls, p_method, args);
611         va_end(args);
612         return ret;
613     }
NewObjectList__EtsEnv614     ets_object NewObjectList(ets_class cls, ets_method p_method, va_list args)
615     {
616         return native_interface->NewObjectList(this, cls, p_method, args);
617     }
NewObjectArray__EtsEnv618     ets_object NewObjectArray(ets_class cls, ets_method p_method, const ets_value *args)
619     {
620         return native_interface->NewObjectArray(this, cls, p_method, args);
621     }
GetObjectClass__EtsEnv622     ets_class GetObjectClass(ets_object obj)
623     {
624         return native_interface->GetObjectClass(this, obj);
625     }
IsInstanceOf__EtsEnv626     ets_boolean IsInstanceOf(ets_object obj, ets_class cls)
627     {
628         return native_interface->IsInstanceOf(this, obj, cls);
629     }
Getp_method__EtsEnv630     ets_method Getp_method(ets_class cls, const char *name, const char *sig)
631     {
632         return native_interface->Getp_method(this, cls, name, sig);
633     }
CallObjectMethod__EtsEnv634     ets_object CallObjectMethod(ets_object obj, ets_method method_id, ...)
635     {
636         va_list args;
637         va_start(args, method_id);
638         ets_object res = native_interface->CallObjectMethodList(this, obj, method_id, args);
639         va_end(args);
640         return res;
641     }
CallObjectMethodList__EtsEnv642     ets_object CallObjectMethodList(ets_object obj, ets_method method_id, va_list args)
643     {
644         return native_interface->CallObjectMethodList(this, obj, method_id, args);
645     }
CallObjectMethodArray__EtsEnv646     ets_object CallObjectMethodArray(ets_object obj, ets_method method_id, const ets_value *args)
647     {
648         return native_interface->CallObjectMethodArray(this, obj, method_id, args);
649     }
CallBooleanMethod__EtsEnv650     ets_boolean CallBooleanMethod(ets_object obj, ets_method method_id, ...)
651     {
652         va_list args;
653         va_start(args, method_id);
654         ets_boolean res = native_interface->CallBooleanMethodList(this, obj, method_id, args);
655         va_end(args);
656         return res;
657     }
CallBooleanMethodList__EtsEnv658     ets_boolean CallBooleanMethodList(ets_object obj, ets_method method_id, va_list args)
659     {
660         return native_interface->CallBooleanMethodList(this, obj, method_id, args);
661     }
CallBooleanMethodArray__EtsEnv662     ets_boolean CallBooleanMethodArray(ets_object obj, ets_method method_id, const ets_value *args)
663     {
664         return native_interface->CallBooleanMethodArray(this, obj, method_id, args);
665     }
CallByteMethod__EtsEnv666     ets_byte CallByteMethod(ets_object obj, ets_method method_id, ...)
667     {
668         va_list args;
669         va_start(args, method_id);
670         ets_byte res = native_interface->CallByteMethodList(this, obj, method_id, args);
671         va_end(args);
672         return res;
673     }
CallByteMethodList__EtsEnv674     ets_byte CallByteMethodList(ets_object obj, ets_method method_id, va_list args)
675     {
676         return native_interface->CallByteMethodList(this, obj, method_id, args);
677     }
CallByteMethodArray__EtsEnv678     ets_byte CallByteMethodArray(ets_object obj, ets_method method_id, const ets_value *args)
679     {
680         return native_interface->CallByteMethodArray(this, obj, method_id, args);
681     }
CallCharMethod__EtsEnv682     ets_char CallCharMethod(ets_object obj, ets_method method_id, ...)
683     {
684         va_list args;
685         va_start(args, method_id);
686         ets_char res = native_interface->CallCharMethodList(this, obj, method_id, args);
687         va_end(args);
688         return res;
689     }
CallCharMethodList__EtsEnv690     ets_char CallCharMethodList(ets_object obj, ets_method method_id, va_list args)
691     {
692         return native_interface->CallCharMethodList(this, obj, method_id, args);
693     }
CallCharMethodArray__EtsEnv694     ets_char CallCharMethodArray(ets_object obj, ets_method method_id, const ets_value *args)
695     {
696         return native_interface->CallCharMethodArray(this, obj, method_id, args);
697     }
CallShortMethod__EtsEnv698     ets_short CallShortMethod(ets_object obj, ets_method method_id, ...)
699     {
700         va_list args;
701         va_start(args, method_id);
702         ets_short res = native_interface->CallShortMethodList(this, obj, method_id, args);
703         va_end(args);
704         return res;
705     }
CallShortMethodList__EtsEnv706     ets_short CallShortMethodList(ets_object obj, ets_method method_id, va_list args)
707     {
708         return native_interface->CallShortMethodList(this, obj, method_id, args);
709     }
CallShortMethodArray__EtsEnv710     ets_short CallShortMethodArray(ets_object obj, ets_method method_id, const ets_value *args)
711     {
712         return native_interface->CallShortMethodArray(this, obj, method_id, args);
713     }
CallIntMethod__EtsEnv714     ets_int CallIntMethod(ets_object obj, ets_method method_id, ...)
715     {
716         va_list args;
717         va_start(args, method_id);
718         ets_int res = native_interface->CallIntMethodList(this, obj, method_id, args);
719         va_end(args);
720         return res;
721     }
CallIntMethodList__EtsEnv722     ets_int CallIntMethodList(ets_object obj, ets_method method_id, va_list args)
723     {
724         return native_interface->CallIntMethodList(this, obj, method_id, args);
725     }
CallIntMethodArray__EtsEnv726     ets_int CallIntMethodArray(ets_object obj, ets_method method_id, const ets_value *args)
727     {
728         return native_interface->CallIntMethodArray(this, obj, method_id, args);
729     }
CallLongMethod__EtsEnv730     ets_long CallLongMethod(ets_object obj, ets_method method_id, ...)
731     {
732         va_list args;
733         va_start(args, method_id);
734         ets_long res = native_interface->CallLongMethodList(this, obj, method_id, args);
735         va_end(args);
736         return res;
737     }
CallLongMethodList__EtsEnv738     ets_long CallLongMethodList(ets_object obj, ets_method method_id, va_list args)
739     {
740         return native_interface->CallLongMethodList(this, obj, method_id, args);
741     }
CallLongMethodArray__EtsEnv742     ets_long CallLongMethodArray(ets_object obj, ets_method method_id, const ets_value *args)
743     {
744         return native_interface->CallLongMethodArray(this, obj, method_id, args);
745     }
CallFloatMethod__EtsEnv746     ets_float CallFloatMethod(ets_object obj, ets_method method_id, ...)
747     {
748         va_list args;
749         va_start(args, method_id);
750         ets_float res = native_interface->CallFloatMethodList(this, obj, method_id, args);
751         va_end(args);
752         return res;
753     }
CallFloatMethodList__EtsEnv754     ets_float CallFloatMethodList(ets_object obj, ets_method method_id, va_list args)
755     {
756         return native_interface->CallFloatMethodList(this, obj, method_id, args);
757     }
CallFloatMethodArray__EtsEnv758     ets_float CallFloatMethodArray(ets_object obj, ets_method method_id, const ets_value *args)
759     {
760         return native_interface->CallFloatMethodArray(this, obj, method_id, args);
761     }
CallDoubleMethod__EtsEnv762     ets_double CallDoubleMethod(ets_object obj, ets_method method_id, ...)
763     {
764         va_list args;
765         va_start(args, method_id);
766         ets_double res = native_interface->CallDoubleMethodList(this, obj, method_id, args);
767         va_end(args);
768         return res;
769     }
CallDoubleMethodList__EtsEnv770     ets_double CallDoubleMethodList(ets_object obj, ets_method method_id, va_list args)
771     {
772         return native_interface->CallDoubleMethodList(this, obj, method_id, args);
773     }
CallDoubleMethodArray__EtsEnv774     ets_double CallDoubleMethodArray(ets_object obj, ets_method method_id, const ets_value *args)
775     {
776         return native_interface->CallDoubleMethodArray(this, obj, method_id, args);
777     }
CallVoidMethod__EtsEnv778     void CallVoidMethod(ets_object obj, ets_method method_id, ...)
779     {
780         va_list args;
781         va_start(args, method_id);
782         native_interface->CallVoidMethodList(this, obj, method_id, args);
783         va_end(args);
784     }
CallVoidMethodList__EtsEnv785     void CallVoidMethodList(ets_object obj, ets_method method_id, va_list args)
786     {
787         native_interface->CallVoidMethodList(this, obj, method_id, args);
788     }
CallVoidMethodArray__EtsEnv789     void CallVoidMethodArray(ets_object obj, ets_method method_id, const ets_value *args)
790     {
791         native_interface->CallVoidMethodArray(this, obj, method_id, args);
792     }
CallNonvirtualObjectMethod__EtsEnv793     ets_object CallNonvirtualObjectMethod(ets_object obj, ets_class cls, ets_method method_id, ...)
794     {
795         va_list args;
796         va_start(args, method_id);
797         ets_object res = native_interface->CallNonvirtualObjectMethodList(this, obj, cls, method_id, args);
798         va_end(args);
799         return res;
800     }
CallNonvirtualObjectMethodList__EtsEnv801     ets_object CallNonvirtualObjectMethodList(ets_object obj, ets_class cls, ets_method method_id, va_list args)
802     {
803         return native_interface->CallNonvirtualObjectMethodList(this, obj, cls, method_id, args);
804     }
CallNonvirtualObjectMethodArray__EtsEnv805     ets_object CallNonvirtualObjectMethodArray(ets_object obj, ets_class cls, ets_method method_id,
806                                                const ets_value *args)
807     {
808         return native_interface->CallNonvirtualObjectMethodArray(this, obj, cls, method_id, args);
809     }
CallNonvirtualBooleanMethod__EtsEnv810     ets_boolean CallNonvirtualBooleanMethod(ets_object obj, ets_class cls, ets_method method_id, ...)
811     {
812         va_list args;
813         va_start(args, method_id);
814         ets_boolean res = native_interface->CallNonvirtualBooleanMethodList(this, obj, cls, method_id, args);
815         va_end(args);
816         return res;
817     }
CallNonvirtualBooleanMethodList__EtsEnv818     ets_boolean CallNonvirtualBooleanMethodList(ets_object obj, ets_class cls, ets_method method_id, va_list args)
819     {
820         return native_interface->CallNonvirtualBooleanMethodList(this, obj, cls, method_id, args);
821     }
CallNonvirtualBooleanMethodArray__EtsEnv822     ets_boolean CallNonvirtualBooleanMethodArray(ets_object obj, ets_class cls, ets_method method_id,
823                                                  const ets_value *args)
824     {
825         return native_interface->CallNonvirtualBooleanMethodArray(this, obj, cls, method_id, args);
826     }
CallNonvirtualByteMethod__EtsEnv827     ets_byte CallNonvirtualByteMethod(ets_object obj, ets_class cls, ets_method method_id, ...)
828     {
829         va_list args;
830         va_start(args, method_id);
831         ets_byte res = native_interface->CallNonvirtualByteMethodList(this, obj, cls, method_id, args);
832         va_end(args);
833         return res;
834     }
CallNonvirtualByteMethodList__EtsEnv835     ets_byte CallNonvirtualByteMethodList(ets_object obj, ets_class cls, ets_method method_id, va_list args)
836     {
837         return native_interface->CallNonvirtualByteMethodList(this, obj, cls, method_id, args);
838     }
CallNonvirtualByteMethodArray__EtsEnv839     ets_byte CallNonvirtualByteMethodArray(ets_object obj, ets_class cls, ets_method method_id, const ets_value *args)
840     {
841         return native_interface->CallNonvirtualByteMethodArray(this, obj, cls, method_id, args);
842     }
CallNonvirtualCharMethod__EtsEnv843     ets_char CallNonvirtualCharMethod(ets_object obj, ets_class cls, ets_method method_id, ...)
844     {
845         va_list args;
846         va_start(args, method_id);
847         ets_char res = native_interface->CallNonvirtualCharMethodList(this, obj, cls, method_id, args);
848         va_end(args);
849         return res;
850     }
CallNonvirtualCharMethodList__EtsEnv851     ets_char CallNonvirtualCharMethodList(ets_object obj, ets_class cls, ets_method method_id, va_list args)
852     {
853         return native_interface->CallNonvirtualCharMethodList(this, obj, cls, method_id, args);
854     }
CallNonvirtualCharMethodArray__EtsEnv855     ets_char CallNonvirtualCharMethodArray(ets_object obj, ets_class cls, ets_method method_id, const ets_value *args)
856     {
857         return native_interface->CallNonvirtualCharMethodArray(this, obj, cls, method_id, args);
858     }
CallNonvirtualShortMethod__EtsEnv859     ets_short CallNonvirtualShortMethod(ets_object obj, ets_class cls, ets_method method_id, ...)
860     {
861         va_list args;
862         va_start(args, method_id);
863         ets_short res = native_interface->CallNonvirtualShortMethodList(this, obj, cls, method_id, args);
864         va_end(args);
865         return res;
866     }
CallNonvirtualShortMethodList__EtsEnv867     ets_short CallNonvirtualShortMethodList(ets_object obj, ets_class cls, ets_method method_id, va_list args)
868     {
869         return native_interface->CallNonvirtualShortMethodList(this, obj, cls, method_id, args);
870     }
CallNonvirtualShortMethodArray__EtsEnv871     ets_short CallNonvirtualShortMethodArray(ets_object obj, ets_class cls, ets_method method_id, const ets_value *args)
872     {
873         return native_interface->CallNonvirtualShortMethodArray(this, obj, cls, method_id, args);
874     }
CallNonvirtualIntMethod__EtsEnv875     ets_int CallNonvirtualIntMethod(ets_object obj, ets_class cls, ets_method method_id, ...)
876     {
877         va_list args;
878         va_start(args, method_id);
879         ets_int res = native_interface->CallNonvirtualIntMethodList(this, obj, cls, method_id, args);
880         va_end(args);
881         return res;
882     }
CallNonvirtualIntMethodList__EtsEnv883     ets_int CallNonvirtualIntMethodList(ets_object obj, ets_class cls, ets_method method_id, va_list args)
884     {
885         return native_interface->CallNonvirtualIntMethodList(this, obj, cls, method_id, args);
886     }
CallNonvirtualIntMethodArray__EtsEnv887     ets_int CallNonvirtualIntMethodArray(ets_object obj, ets_class cls, ets_method method_id, const ets_value *args)
888     {
889         return native_interface->CallNonvirtualIntMethodArray(this, obj, cls, method_id, args);
890     }
CallNonvirtualLongMethod__EtsEnv891     ets_long CallNonvirtualLongMethod(ets_object obj, ets_class cls, ets_method method_id, ...)
892     {
893         va_list args;
894         va_start(args, method_id);
895         ets_long res = native_interface->CallNonvirtualLongMethodList(this, obj, cls, method_id, args);
896         va_end(args);
897         return res;
898     }
CallNonvirtualLongMethodList__EtsEnv899     ets_long CallNonvirtualLongMethodList(ets_object obj, ets_class cls, ets_method method_id, va_list args)
900     {
901         return native_interface->CallNonvirtualLongMethodList(this, obj, cls, method_id, args);
902     }
CallNonvirtualLongMethodArray__EtsEnv903     ets_long CallNonvirtualLongMethodArray(ets_object obj, ets_class cls, ets_method method_id, const ets_value *args)
904     {
905         return native_interface->CallNonvirtualLongMethodArray(this, obj, cls, method_id, args);
906     }
CallNonvirtualFloatMethod__EtsEnv907     ets_float CallNonvirtualFloatMethod(ets_object obj, ets_class cls, ets_method method_id, ...)
908     {
909         va_list args;
910         va_start(args, method_id);
911         ets_float res = native_interface->CallNonvirtualFloatMethodList(this, obj, cls, method_id, args);
912         va_end(args);
913         return res;
914     }
CallNonvirtualFloatMethodList__EtsEnv915     ets_float CallNonvirtualFloatMethodList(ets_object obj, ets_class cls, ets_method method_id, va_list args)
916     {
917         return native_interface->CallNonvirtualFloatMethodList(this, obj, cls, method_id, args);
918     }
CallNonvirtualFloatMethodArray__EtsEnv919     ets_float CallNonvirtualFloatMethodArray(ets_object obj, ets_class cls, ets_method method_id, const ets_value *args)
920     {
921         return native_interface->CallNonvirtualFloatMethodArray(this, obj, cls, method_id, args);
922     }
CallNonvirtualDoubleMethod__EtsEnv923     ets_double CallNonvirtualDoubleMethod(ets_object obj, ets_class cls, ets_method method_id, ...)
924     {
925         va_list args;
926         va_start(args, method_id);
927         ets_double res = native_interface->CallNonvirtualDoubleMethodList(this, obj, cls, method_id, args);
928         va_end(args);
929         return res;
930     }
CallNonvirtualDoubleMethodList__EtsEnv931     ets_double CallNonvirtualDoubleMethodList(ets_object obj, ets_class cls, ets_method method_id, va_list args)
932     {
933         return native_interface->CallNonvirtualDoubleMethodList(this, obj, cls, method_id, args);
934     }
CallNonvirtualDoubleMethodArray__EtsEnv935     ets_double CallNonvirtualDoubleMethodArray(ets_object obj, ets_class cls, ets_method method_id,
936                                                const ets_value *args)
937     {
938         return native_interface->CallNonvirtualDoubleMethodArray(this, obj, cls, method_id, args);
939     }
CallNonvirtualVoidMethod__EtsEnv940     void CallNonvirtualVoidMethod(ets_object obj, ets_class cls, ets_method method_id, ...)
941     {
942         va_list args;
943         va_start(args, method_id);
944         native_interface->CallNonvirtualVoidMethodList(this, obj, cls, method_id, args);
945         va_end(args);
946     }
CallNonvirtualVoidMethodList__EtsEnv947     void CallNonvirtualVoidMethodList(ets_object obj, ets_class cls, ets_method method_id, va_list args)
948     {
949         native_interface->CallNonvirtualVoidMethodList(this, obj, cls, method_id, args);
950     }
CallNonvirtualVoidMethodArray__EtsEnv951     void CallNonvirtualVoidMethodArray(ets_object obj, ets_class cls, ets_method method_id, const ets_value *args)
952     {
953         native_interface->CallNonvirtualVoidMethodArray(this, obj, cls, method_id, args);
954     }
Getp_field__EtsEnv955     ets_field Getp_field(ets_class cls, const char *name, const char *sig)
956     {
957         return native_interface->Getp_field(this, cls, name, sig);
958     }
GetObjectField__EtsEnv959     ets_object GetObjectField(ets_object obj, ets_field p_field)
960     {
961         return native_interface->GetObjectField(this, obj, p_field);
962     }
GetBooleanField__EtsEnv963     ets_boolean GetBooleanField(ets_object obj, ets_field p_field)
964     {
965         return native_interface->GetBooleanField(this, obj, p_field);
966     }
GetByteField__EtsEnv967     ets_byte GetByteField(ets_object obj, ets_field p_field)
968     {
969         return native_interface->GetByteField(this, obj, p_field);
970     }
GetCharField__EtsEnv971     ets_char GetCharField(ets_object obj, ets_field p_field)
972     {
973         return native_interface->GetCharField(this, obj, p_field);
974     }
GetShortField__EtsEnv975     ets_short GetShortField(ets_object obj, ets_field p_field)
976     {
977         return native_interface->GetShortField(this, obj, p_field);
978     }
GetIntField__EtsEnv979     ets_int GetIntField(ets_object obj, ets_field p_field)
980     {
981         return native_interface->GetIntField(this, obj, p_field);
982     }
GetLongField__EtsEnv983     ets_long GetLongField(ets_object obj, ets_field p_field)
984     {
985         return native_interface->GetLongField(this, obj, p_field);
986     }
GetFloatField__EtsEnv987     ets_float GetFloatField(ets_object obj, ets_field p_field)
988     {
989         return native_interface->GetFloatField(this, obj, p_field);
990     }
GetDoubleField__EtsEnv991     ets_double GetDoubleField(ets_object obj, ets_field p_field)
992     {
993         return native_interface->GetDoubleField(this, obj, p_field);
994     }
SetObjectField__EtsEnv995     void SetObjectField(ets_object obj, ets_field p_field, ets_object value)
996     {
997         return native_interface->SetObjectField(this, obj, p_field, value);
998     }
SetBooleanField__EtsEnv999     void SetBooleanField(ets_object obj, ets_field p_field, ets_boolean value)
1000     {
1001         return native_interface->SetBooleanField(this, obj, p_field, value);
1002     }
SetByteField__EtsEnv1003     void SetByteField(ets_object obj, ets_field p_field, ets_byte value)
1004     {
1005         return native_interface->SetByteField(this, obj, p_field, value);
1006     }
SetCharField__EtsEnv1007     void SetCharField(ets_object obj, ets_field p_field, ets_char value)
1008     {
1009         return native_interface->SetCharField(this, obj, p_field, value);
1010     }
SetShortField__EtsEnv1011     void SetShortField(ets_object obj, ets_field p_field, ets_short value)
1012     {
1013         return native_interface->SetShortField(this, obj, p_field, value);
1014     }
SetIntField__EtsEnv1015     void SetIntField(ets_object obj, ets_field p_field, ets_int value)
1016     {
1017         return native_interface->SetIntField(this, obj, p_field, value);
1018     }
SetLongField__EtsEnv1019     void SetLongField(ets_object obj, ets_field p_field, ets_long value)
1020     {
1021         return native_interface->SetLongField(this, obj, p_field, value);
1022     }
SetFloatField__EtsEnv1023     void SetFloatField(ets_object obj, ets_field p_field, ets_float value)
1024     {
1025         return native_interface->SetFloatField(this, obj, p_field, value);
1026     }
SetDoubleField__EtsEnv1027     void SetDoubleField(ets_object obj, ets_field p_field, ets_double value)
1028     {
1029         return native_interface->SetDoubleField(this, obj, p_field, value);
1030     }
GetStaticp_method__EtsEnv1031     ets_method GetStaticp_method(ets_class cls, const char *name, const char *sig)
1032     {
1033         return native_interface->GetStaticp_method(this, cls, name, sig);
1034     }
CallStaticObjectMethod__EtsEnv1035     ets_object CallStaticObjectMethod(ets_class cls, ets_method method_id, ...)
1036     {
1037         va_list args;
1038         va_start(args, method_id);
1039         ets_object res = native_interface->CallStaticObjectMethodList(this, cls, method_id, args);
1040         va_end(args);
1041         return res;
1042     }
CallStaticObjectMethodList__EtsEnv1043     ets_object CallStaticObjectMethodList(ets_class cls, ets_method method_id, va_list args)
1044     {
1045         return native_interface->CallStaticObjectMethodList(this, cls, method_id, args);
1046     }
CallStaticObjectMethodArray__EtsEnv1047     ets_object CallStaticObjectMethodArray(ets_class cls, ets_method method_id, ets_value *args)
1048     {
1049         return native_interface->CallStaticObjectMethodArray(this, cls, method_id, args);
1050     }
CallStaticBooleanMethod__EtsEnv1051     ets_boolean CallStaticBooleanMethod(ets_class cls, ets_method method_id, ...)
1052     {
1053         va_list args;
1054         va_start(args, method_id);
1055         ets_boolean res = native_interface->CallStaticBooleanMethodList(this, cls, method_id, args);
1056         va_end(args);
1057         return res;
1058     }
CallStaticBooleanMethodList__EtsEnv1059     ets_boolean CallStaticBooleanMethodList(ets_class cls, ets_method method_id, va_list args)
1060     {
1061         return native_interface->CallStaticBooleanMethodList(this, cls, method_id, args);
1062     }
CallStaticBooleanMethodArray__EtsEnv1063     ets_boolean CallStaticBooleanMethodArray(ets_class cls, ets_method method_id, ets_value *args)
1064     {
1065         return native_interface->CallStaticBooleanMethodArray(this, cls, method_id, args);
1066     }
CallStaticByteMethod__EtsEnv1067     ets_byte CallStaticByteMethod(ets_class cls, ets_method method_id, ...)
1068     {
1069         va_list args;
1070         va_start(args, method_id);
1071         ets_byte res = native_interface->CallStaticByteMethodList(this, cls, method_id, args);
1072         va_end(args);
1073         return res;
1074     }
CallStaticByteMethodList__EtsEnv1075     ets_byte CallStaticByteMethodList(ets_class cls, ets_method method_id, va_list args)
1076     {
1077         return native_interface->CallStaticByteMethodList(this, cls, method_id, args);
1078     }
CallStaticByteMethodArray__EtsEnv1079     ets_byte CallStaticByteMethodArray(ets_class cls, ets_method method_id, ets_value *args)
1080     {
1081         return native_interface->CallStaticByteMethodArray(this, cls, method_id, args);
1082     }
CallStaticCharMethod__EtsEnv1083     ets_char CallStaticCharMethod(ets_class cls, ets_method method_id, ...)
1084     {
1085         va_list args;
1086         va_start(args, method_id);
1087         ets_char res = native_interface->CallStaticCharMethodList(this, cls, method_id, args);
1088         va_end(args);
1089         return res;
1090     }
CallStaticCharMethodList__EtsEnv1091     ets_char CallStaticCharMethodList(ets_class cls, ets_method method_id, va_list args)
1092     {
1093         return native_interface->CallStaticCharMethodList(this, cls, method_id, args);
1094     }
CallStaticCharMethodArray__EtsEnv1095     ets_char CallStaticCharMethodArray(ets_class cls, ets_method method_id, ets_value *args)
1096     {
1097         return native_interface->CallStaticCharMethodArray(this, cls, method_id, args);
1098     }
CallStaticShortMethod__EtsEnv1099     ets_short CallStaticShortMethod(ets_class cls, ets_method method_id, ...)
1100     {
1101         va_list args;
1102         va_start(args, method_id);
1103         ets_short res = native_interface->CallStaticShortMethodList(this, cls, method_id, args);
1104         va_end(args);
1105         return res;
1106     }
CallStaticShortMethodList__EtsEnv1107     ets_short CallStaticShortMethodList(ets_class cls, ets_method method_id, va_list args)
1108     {
1109         return native_interface->CallStaticShortMethodList(this, cls, method_id, args);
1110     }
CallStaticShortMethodArray__EtsEnv1111     ets_short CallStaticShortMethodArray(ets_class cls, ets_method method_id, ets_value *args)
1112     {
1113         return native_interface->CallStaticShortMethodArray(this, cls, method_id, args);
1114     }
CallStaticIntMethod__EtsEnv1115     ets_int CallStaticIntMethod(ets_class cls, ets_method method_id, ...)
1116     {
1117         va_list args;
1118         va_start(args, method_id);
1119         ets_int res = native_interface->CallStaticIntMethodList(this, cls, method_id, args);
1120         va_end(args);
1121         return res;
1122     }
CallStaticIntMethodList__EtsEnv1123     ets_int CallStaticIntMethodList(ets_class cls, ets_method method_id, va_list args)
1124     {
1125         return native_interface->CallStaticIntMethodList(this, cls, method_id, args);
1126     }
CallStaticIntMethodArray__EtsEnv1127     ets_int CallStaticIntMethodArray(ets_class cls, ets_method method_id, ets_value *args)
1128     {
1129         return native_interface->CallStaticIntMethodArray(this, cls, method_id, args);
1130     }
CallStaticLongMethod__EtsEnv1131     ets_long CallStaticLongMethod(ets_class cls, ets_method method_id, ...)
1132     {
1133         va_list args;
1134         va_start(args, method_id);
1135         ets_long res = native_interface->CallStaticLongMethodList(this, cls, method_id, args);
1136         va_end(args);
1137         return res;
1138     }
CallStaticLongMethodList__EtsEnv1139     ets_long CallStaticLongMethodList(ets_class cls, ets_method method_id, va_list args)
1140     {
1141         return native_interface->CallStaticLongMethodList(this, cls, method_id, args);
1142     }
CallStaticLongMethodArray__EtsEnv1143     ets_long CallStaticLongMethodArray(ets_class cls, ets_method method_id, ets_value *args)
1144     {
1145         return native_interface->CallStaticLongMethodArray(this, cls, method_id, args);
1146     }
CallStaticFloatMethod__EtsEnv1147     ets_float CallStaticFloatMethod(ets_class cls, ets_method method_id, ...)
1148     {
1149         va_list args;
1150         va_start(args, method_id);
1151         ets_float res = native_interface->CallStaticFloatMethodList(this, cls, method_id, args);
1152         va_end(args);
1153         return res;
1154     }
CallStaticFloatMethodList__EtsEnv1155     ets_float CallStaticFloatMethodList(ets_class cls, ets_method method_id, va_list args)
1156     {
1157         return native_interface->CallStaticFloatMethodList(this, cls, method_id, args);
1158     }
CallStaticFloatMethodArray__EtsEnv1159     ets_float CallStaticFloatMethodArray(ets_class cls, ets_method method_id, ets_value *args)
1160     {
1161         return native_interface->CallStaticFloatMethodArray(this, cls, method_id, args);
1162     }
CallStaticDoubleMethod__EtsEnv1163     ets_double CallStaticDoubleMethod(ets_class cls, ets_method method_id, ...)
1164     {
1165         va_list args;
1166         va_start(args, method_id);
1167         ets_double res = native_interface->CallStaticDoubleMethodList(this, cls, method_id, args);
1168         va_end(args);
1169         return res;
1170     }
CallStaticDoubleMethodList__EtsEnv1171     ets_double CallStaticDoubleMethodList(ets_class cls, ets_method method_id, va_list args)
1172     {
1173         return native_interface->CallStaticDoubleMethodList(this, cls, method_id, args);
1174     }
CallStaticDoubleMethodArray__EtsEnv1175     ets_double CallStaticDoubleMethodArray(ets_class cls, ets_method method_id, ets_value *args)
1176     {
1177         return native_interface->CallStaticDoubleMethodArray(this, cls, method_id, args);
1178     }
CallStaticVoidMethod__EtsEnv1179     void CallStaticVoidMethod(ets_class cls, ets_method method_id, ...)
1180     {
1181         va_list args;
1182         va_start(args, method_id);
1183         native_interface->CallStaticVoidMethodList(this, cls, method_id, args);
1184         va_end(args);
1185     }
CallStaticVoidMethodList__EtsEnv1186     void CallStaticVoidMethodList(ets_class cls, ets_method method_id, va_list args)
1187     {
1188         native_interface->CallStaticVoidMethodList(this, cls, method_id, args);
1189     }
CallStaticVoidMethodArray__EtsEnv1190     void CallStaticVoidMethodArray(ets_class cls, ets_method method_id, ets_value *args)
1191     {
1192         native_interface->CallStaticVoidMethodArray(this, cls, method_id, args);
1193     }
GetStaticp_field__EtsEnv1194     ets_field GetStaticp_field(ets_class cls, const char *name, const char *sig)
1195     {
1196         return native_interface->GetStaticp_field(this, cls, name, sig);
1197     }
GetStaticObjectField__EtsEnv1198     ets_object GetStaticObjectField(ets_class cls, ets_field p_field)
1199     {
1200         return native_interface->GetStaticObjectField(this, cls, p_field);
1201     }
GetStaticBooleanField__EtsEnv1202     ets_boolean GetStaticBooleanField(ets_class cls, ets_field p_field)
1203     {
1204         return native_interface->GetStaticBooleanField(this, cls, p_field);
1205     }
GetStaticByteField__EtsEnv1206     ets_byte GetStaticByteField(ets_class cls, ets_field p_field)
1207     {
1208         return native_interface->GetStaticByteField(this, cls, p_field);
1209     }
GetStaticCharField__EtsEnv1210     ets_char GetStaticCharField(ets_class cls, ets_field p_field)
1211     {
1212         return native_interface->GetStaticCharField(this, cls, p_field);
1213     }
GetStaticShortField__EtsEnv1214     ets_short GetStaticShortField(ets_class cls, ets_field p_field)
1215     {
1216         return native_interface->GetStaticShortField(this, cls, p_field);
1217     }
GetStaticIntField__EtsEnv1218     ets_int GetStaticIntField(ets_class cls, ets_field p_field)
1219     {
1220         return native_interface->GetStaticIntField(this, cls, p_field);
1221     }
GetStaticLongField__EtsEnv1222     ets_long GetStaticLongField(ets_class cls, ets_field p_field)
1223     {
1224         return native_interface->GetStaticLongField(this, cls, p_field);
1225     }
GetStaticFloatField__EtsEnv1226     ets_float GetStaticFloatField(ets_class cls, ets_field p_field)
1227     {
1228         return native_interface->GetStaticFloatField(this, cls, p_field);
1229     }
GetStaticDoubleField__EtsEnv1230     ets_double GetStaticDoubleField(ets_class cls, ets_field p_field)
1231     {
1232         return native_interface->GetStaticDoubleField(this, cls, p_field);
1233     }
SetStaticObjectField__EtsEnv1234     void SetStaticObjectField(ets_class cls, ets_field p_field, ets_object value)
1235     {
1236         return native_interface->SetStaticObjectField(this, cls, p_field, value);
1237     }
SetStaticBooleanField__EtsEnv1238     void SetStaticBooleanField(ets_class cls, ets_field p_field, ets_boolean value)
1239     {
1240         return native_interface->SetStaticBooleanField(this, cls, p_field, value);
1241     }
SetStaticByteField__EtsEnv1242     void SetStaticByteField(ets_class cls, ets_field p_field, ets_byte value)
1243     {
1244         return native_interface->SetStaticByteField(this, cls, p_field, value);
1245     }
SetStaticCharField__EtsEnv1246     void SetStaticCharField(ets_class cls, ets_field p_field, ets_char value)
1247     {
1248         return native_interface->SetStaticCharField(this, cls, p_field, value);
1249     }
SetStaticShortField__EtsEnv1250     void SetStaticShortField(ets_class cls, ets_field p_field, ets_short value)
1251     {
1252         return native_interface->SetStaticShortField(this, cls, p_field, value);
1253     }
SetStaticIntField__EtsEnv1254     void SetStaticIntField(ets_class cls, ets_field p_field, ets_int value)
1255     {
1256         return native_interface->SetStaticIntField(this, cls, p_field, value);
1257     }
SetStaticLongField__EtsEnv1258     void SetStaticLongField(ets_class cls, ets_field p_field, ets_long value)
1259     {
1260         return native_interface->SetStaticLongField(this, cls, p_field, value);
1261     }
SetStaticFloatField__EtsEnv1262     void SetStaticFloatField(ets_class cls, ets_field p_field, ets_float value)
1263     {
1264         return native_interface->SetStaticFloatField(this, cls, p_field, value);
1265     }
SetStaticDoubleField__EtsEnv1266     void SetStaticDoubleField(ets_class cls, ets_field p_field, ets_double value)
1267     {
1268         return native_interface->SetStaticDoubleField(this, cls, p_field, value);
1269     }
NewString__EtsEnv1270     ets_string NewString(const ets_char *unicode_chars, ets_size len)
1271     {
1272         return native_interface->NewString(this, unicode_chars, len);
1273     }
GetStringLength__EtsEnv1274     ets_size GetStringLength(ets_string string)
1275     {
1276         return native_interface->GetStringLength(this, string);
1277     }
GetStringChars__EtsEnv1278     const ets_char *GetStringChars(ets_string string, ets_boolean *is_copy)
1279     {
1280         return native_interface->GetStringChars(this, string, is_copy);
1281     }
ReleaseStringChars__EtsEnv1282     void ReleaseStringChars(ets_string string, const ets_char *chars)
1283     {
1284         native_interface->ReleaseStringChars(this, string, chars);
1285     }
NewStringUTF__EtsEnv1286     ets_string NewStringUTF(const char *bytes)
1287     {
1288         return native_interface->NewStringUTF(this, bytes);
1289     }
GetStringUTFLength__EtsEnv1290     ets_size GetStringUTFLength(ets_string string)
1291     {
1292         return native_interface->GetStringUTFLength(this, string);
1293     }
GetStringUTFChars__EtsEnv1294     const char *GetStringUTFChars(ets_string string, ets_boolean *is_copy)
1295     {
1296         return native_interface->GetStringUTFChars(this, string, is_copy);
1297     }
ReleaseStringUTFChars__EtsEnv1298     void ReleaseStringUTFChars(ets_string string, const char *chars)
1299     {
1300         native_interface->ReleaseStringUTFChars(this, string, chars);
1301     }
GetArrayLength__EtsEnv1302     ets_size GetArrayLength(ets_array array)
1303     {
1304         return native_interface->GetArrayLength(this, array);
1305     }
NewObjectsArray__EtsEnv1306     ets_objectArray NewObjectsArray(ets_size length, ets_class element_class, ets_object initial_element)
1307     {
1308         return native_interface->NewObjectsArray(this, length, element_class, initial_element);
1309     }
GetObjectArrayElement__EtsEnv1310     ets_object GetObjectArrayElement(ets_objectArray array, ets_size index)
1311     {
1312         return native_interface->GetObjectArrayElement(this, array, index);
1313     }
1314 
SetObjectArrayElement__EtsEnv1315     void SetObjectArrayElement(ets_objectArray array, ets_size index, ets_object value)
1316     {
1317         native_interface->SetObjectArrayElement(this, array, index, value);
1318     }
1319 
1320     // SetObjectArrayElement,
NewBooleanArray__EtsEnv1321     ets_booleanArray NewBooleanArray(ets_size length)
1322     {
1323         return native_interface->NewBooleanArray(this, length);
1324     }
NewByteArray__EtsEnv1325     ets_byteArray NewByteArray(ets_size length)
1326     {
1327         return native_interface->NewByteArray(this, length);
1328     }
NewCharArray__EtsEnv1329     ets_charArray NewCharArray(ets_size length)
1330     {
1331         return native_interface->NewCharArray(this, length);
1332     }
NewShortArray__EtsEnv1333     ets_shortArray NewShortArray(ets_size length)
1334     {
1335         return native_interface->NewShortArray(this, length);
1336     }
NewIntArray__EtsEnv1337     ets_intArray NewIntArray(ets_size length)
1338     {
1339         return native_interface->NewIntArray(this, length);
1340     }
NewLongArray__EtsEnv1341     ets_longArray NewLongArray(ets_size length)
1342     {
1343         return native_interface->NewLongArray(this, length);
1344     }
NewFloatArray__EtsEnv1345     ets_floatArray NewFloatArray(ets_size length)
1346     {
1347         return native_interface->NewFloatArray(this, length);
1348     }
NewDoubleArray__EtsEnv1349     ets_doubleArray NewDoubleArray(ets_size length)
1350     {
1351         return native_interface->NewDoubleArray(this, length);
1352     }
PinBooleanArray__EtsEnv1353     ets_boolean *PinBooleanArray(ets_booleanArray array)
1354     {
1355         return native_interface->PinBooleanArray(this, array);
1356     }
PinByteArray__EtsEnv1357     ets_byte *PinByteArray(ets_byteArray array)
1358     {
1359         return native_interface->PinByteArray(this, array);
1360     }
PinCharArray__EtsEnv1361     ets_char *PinCharArray(ets_charArray array)
1362     {
1363         return native_interface->PinCharArray(this, array);
1364     }
PinShortArray__EtsEnv1365     ets_short *PinShortArray(ets_shortArray array)
1366     {
1367         return native_interface->PinShortArray(this, array);
1368     }
PinIntArray__EtsEnv1369     ets_int *PinIntArray(ets_intArray array)
1370     {
1371         return native_interface->PinIntArray(this, array);
1372     }
PinLongArray__EtsEnv1373     ets_long *PinLongArray(ets_longArray array)
1374     {
1375         return native_interface->PinLongArray(this, array);
1376     }
PinFloatArray__EtsEnv1377     ets_float *PinFloatArray(ets_floatArray array)
1378     {
1379         return native_interface->PinFloatArray(this, array);
1380     }
PinDoubleArray__EtsEnv1381     ets_double *PinDoubleArray(ets_doubleArray array)
1382     {
1383         return native_interface->PinDoubleArray(this, array);
1384     }
UnpinBooleanArray__EtsEnv1385     void UnpinBooleanArray(ets_booleanArray array)
1386     {
1387         return native_interface->UnpinBooleanArray(this, array);
1388     }
UnpinByteArray__EtsEnv1389     void UnpinByteArray(ets_byteArray array)
1390     {
1391         return native_interface->UnpinByteArray(this, array);
1392     }
UnpinCharArray__EtsEnv1393     void UnpinCharArray(ets_charArray array)
1394     {
1395         return native_interface->UnpinCharArray(this, array);
1396     }
UnpinShortArray__EtsEnv1397     void UnpinShortArray(ets_shortArray array)
1398     {
1399         return native_interface->UnpinShortArray(this, array);
1400     }
UnpinIntArray__EtsEnv1401     void UnpinIntArray(ets_intArray array)
1402     {
1403         return native_interface->UnpinIntArray(this, array);
1404     }
UnpinLongArray__EtsEnv1405     void UnpinLongArray(ets_longArray array)
1406     {
1407         return native_interface->UnpinLongArray(this, array);
1408     }
UnpinFloatArray__EtsEnv1409     void UnpinFloatArray(ets_floatArray array)
1410     {
1411         return native_interface->UnpinFloatArray(this, array);
1412     }
UnpinDoubleArray__EtsEnv1413     void UnpinDoubleArray(ets_doubleArray array)
1414     {
1415         return native_interface->UnpinDoubleArray(this, array);
1416     }
GetBooleanArrayRegion__EtsEnv1417     void GetBooleanArrayRegion(ets_booleanArray array, ets_size start, ets_size len, ets_boolean *buf)
1418     {
1419         return native_interface->GetBooleanArrayRegion(this, array, start, len, buf);
1420     }
GetByteArrayRegion__EtsEnv1421     void GetByteArrayRegion(ets_byteArray array, ets_size start, ets_size len, ets_byte *buf)
1422     {
1423         return native_interface->GetByteArrayRegion(this, array, start, len, buf);
1424     }
GetCharArrayRegion__EtsEnv1425     void GetCharArrayRegion(ets_charArray array, ets_size start, ets_size len, ets_char *buf)
1426     {
1427         return native_interface->GetCharArrayRegion(this, array, start, len, buf);
1428     }
GetShortArrayRegion__EtsEnv1429     void GetShortArrayRegion(ets_shortArray array, ets_size start, ets_size len, ets_short *buf)
1430     {
1431         return native_interface->GetShortArrayRegion(this, array, start, len, buf);
1432     }
GetIntArrayRegion__EtsEnv1433     void GetIntArrayRegion(ets_intArray array, ets_size start, ets_size len, ets_int *buf)
1434     {
1435         return native_interface->GetIntArrayRegion(this, array, start, len, buf);
1436     }
GetLongArrayRegion__EtsEnv1437     void GetLongArrayRegion(ets_longArray array, ets_size start, ets_size len, ets_long *buf)
1438     {
1439         return native_interface->GetLongArrayRegion(this, array, start, len, buf);
1440     }
GetFloatArrayRegion__EtsEnv1441     void GetFloatArrayRegion(ets_floatArray array, ets_size start, ets_size len, ets_float *buf)
1442     {
1443         return native_interface->GetFloatArrayRegion(this, array, start, len, buf);
1444     }
GetDoubleArrayRegion__EtsEnv1445     void GetDoubleArrayRegion(ets_doubleArray array, ets_size start, ets_size len, ets_double *buf)
1446     {
1447         return native_interface->GetDoubleArrayRegion(this, array, start, len, buf);
1448     }
SetBooleanArrayRegion__EtsEnv1449     void SetBooleanArrayRegion(ets_booleanArray array, ets_size start, ets_size length, const ets_boolean *buf)
1450     {
1451         native_interface->SetBooleanArrayRegion(this, array, start, length, buf);
1452     }
SetByteArrayRegion__EtsEnv1453     void SetByteArrayRegion(ets_byteArray array, ets_size start, ets_size length, const ets_byte *buf)
1454     {
1455         native_interface->SetByteArrayRegion(this, array, start, length, buf);
1456     }
SetCharArrayRegion__EtsEnv1457     void SetCharArrayRegion(ets_charArray array, ets_size start, ets_size length, const ets_char *buf)
1458     {
1459         native_interface->SetCharArrayRegion(this, array, start, length, buf);
1460     }
SetShortArrayRegion__EtsEnv1461     void SetShortArrayRegion(ets_shortArray array, ets_size start, ets_size length, const ets_short *buf)
1462     {
1463         native_interface->SetShortArrayRegion(this, array, start, length, buf);
1464     }
SetIntArrayRegion__EtsEnv1465     void SetIntArrayRegion(ets_intArray array, ets_size start, ets_size length, const ets_int *buf)
1466     {
1467         native_interface->SetIntArrayRegion(this, array, start, length, buf);
1468     }
SetLongArrayRegion__EtsEnv1469     void SetLongArrayRegion(ets_longArray array, ets_size start, ets_size length, const ets_long *buf)
1470     {
1471         native_interface->SetLongArrayRegion(this, array, start, length, buf);
1472     }
SetFloatArrayRegion__EtsEnv1473     void SetFloatArrayRegion(ets_floatArray array, ets_size start, ets_size length, const ets_float *buf)
1474     {
1475         native_interface->SetFloatArrayRegion(this, array, start, length, buf);
1476     }
SetDoubleArrayRegion__EtsEnv1477     void SetDoubleArrayRegion(ets_doubleArray array, ets_size start, ets_size length, const ets_double *buf)
1478     {
1479         native_interface->SetDoubleArrayRegion(this, array, start, length, buf);
1480     }
RegisterNatives__EtsEnv1481     ets_int RegisterNatives(ets_class cls, const EtsNativeMethod *methods, ets_int nMethods)
1482     {
1483         return native_interface->RegisterNatives(this, cls, methods, nMethods);
1484     }
UnregisterNatives__EtsEnv1485     ets_int UnregisterNatives(ets_class cls)
1486     {
1487         return native_interface->UnregisterNatives(this, cls);
1488     }
GetEtsVM__EtsEnv1489     ets_int GetEtsVM(EtsVM **vm)
1490     {
1491         return native_interface->GetEtsVM(this, vm);
1492     }
GetStringRegion__EtsEnv1493     void GetStringRegion(ets_string str, ets_size start, ets_size len, ets_char *buf)
1494     {
1495         native_interface->GetStringRegion(this, str, start, len, buf);
1496     }
GetStringUTFRegion__EtsEnv1497     void GetStringUTFRegion(ets_string str, ets_size start, ets_size len, char *buf)
1498     {
1499         native_interface->GetStringUTFRegion(this, str, start, len, buf);
1500     }
NewWeakGlobalRef__EtsEnv1501     ets_weak NewWeakGlobalRef(ets_object obj)
1502     {
1503         return native_interface->NewWeakGlobalRef(this, obj);
1504     }
DeleteWeakGlobalRef__EtsEnv1505     void DeleteWeakGlobalRef(ets_weak obj)
1506     {
1507         native_interface->DeleteWeakGlobalRef(this, obj);
1508     }
ErrorCheck__EtsEnv1509     ets_boolean ErrorCheck()
1510     {
1511         return native_interface->ErrorCheck(this);
1512     }
1513     // NewDirectByteBuffer,
1514     // GetDirectBufferAddress,
1515     // GetDirectBufferCapacity,
GetObjectRefType__EtsEnv1516     ets_objectRefType GetObjectRefType(ets_object obj)
1517     {
1518         return native_interface->GetObjectRefType(this, obj);
1519     }
1520 
1521     // Promise
PromiseCreate__EtsEnv1522     ets_status PromiseCreate(ets_deferred *deferred, ets_object *promise)
1523     {
1524         return native_interface->PromiseCreate(this, deferred, promise);
1525     }
DeferredResolve__EtsEnv1526     ets_status DeferredResolve(ets_deferred deferred, ets_object resolution)
1527     {
1528         return native_interface->DeferredResolve(this, deferred, resolution);
1529     }
DeferredReject__EtsEnv1530     ets_status DeferredReject(ets_deferred deferred, ets_object rejection)
1531     {
1532         return native_interface->DeferredReject(this, deferred, rejection);
1533     }
1534 #endif
1535 };
1536 
1537 // NOLINTEND(modernize-use-using, readability-identifier-naming, cppcoreguidelines-pro-type-vararg)
1538 
1539 #endif  // PANDA_RUNTIME_INTEROP_ETS_NAPI_H
1540