File indexing completed on 2025-02-21 10:05:21
0001 #ifndef SRC_JS_NATIVE_API_H_
0002 #define SRC_JS_NATIVE_API_H_
0003
0004
0005 #include <stdbool.h> // NOLINT(modernize-deprecated-headers)
0006 #include <stddef.h> // NOLINT(modernize-deprecated-headers)
0007
0008
0009 #define NAPI_VERSION_EXPERIMENTAL 2147483647
0010 #ifndef NAPI_VERSION
0011 #ifdef NAPI_EXPERIMENTAL
0012 #define NAPI_VERSION NAPI_VERSION_EXPERIMENTAL
0013 #else
0014
0015
0016
0017
0018
0019
0020 #define NAPI_VERSION 8
0021 #endif
0022 #endif
0023
0024 #include "js_native_api_types.h"
0025
0026
0027
0028 #ifndef NAPI_EXTERN
0029 #ifdef _WIN32
0030 #define NAPI_EXTERN __declspec(dllexport)
0031 #elif defined(__wasm__)
0032 #define NAPI_EXTERN \
0033 __attribute__((visibility("default"))) \
0034 __attribute__((__import_module__("napi")))
0035 #else
0036 #define NAPI_EXTERN __attribute__((visibility("default")))
0037 #endif
0038 #endif
0039
0040 #define NAPI_AUTO_LENGTH SIZE_MAX
0041
0042 #ifdef __cplusplus
0043 #define EXTERN_C_START extern "C" {
0044 #define EXTERN_C_END }
0045 #else
0046 #define EXTERN_C_START
0047 #define EXTERN_C_END
0048 #endif
0049
0050 EXTERN_C_START
0051
0052 NAPI_EXTERN napi_status NAPI_CDECL napi_get_last_error_info(
0053 node_api_nogc_env env, const napi_extended_error_info** result);
0054
0055
0056 NAPI_EXTERN napi_status NAPI_CDECL napi_get_undefined(napi_env env,
0057 napi_value* result);
0058 NAPI_EXTERN napi_status NAPI_CDECL napi_get_null(napi_env env,
0059 napi_value* result);
0060 NAPI_EXTERN napi_status NAPI_CDECL napi_get_global(napi_env env,
0061 napi_value* result);
0062 NAPI_EXTERN napi_status NAPI_CDECL napi_get_boolean(napi_env env,
0063 bool value,
0064 napi_value* result);
0065
0066
0067 NAPI_EXTERN napi_status NAPI_CDECL napi_create_object(napi_env env,
0068 napi_value* result);
0069 NAPI_EXTERN napi_status NAPI_CDECL napi_create_array(napi_env env,
0070 napi_value* result);
0071 NAPI_EXTERN napi_status NAPI_CDECL
0072 napi_create_array_with_length(napi_env env, size_t length, napi_value* result);
0073 NAPI_EXTERN napi_status NAPI_CDECL napi_create_double(napi_env env,
0074 double value,
0075 napi_value* result);
0076 NAPI_EXTERN napi_status NAPI_CDECL napi_create_int32(napi_env env,
0077 int32_t value,
0078 napi_value* result);
0079 NAPI_EXTERN napi_status NAPI_CDECL napi_create_uint32(napi_env env,
0080 uint32_t value,
0081 napi_value* result);
0082 NAPI_EXTERN napi_status NAPI_CDECL napi_create_int64(napi_env env,
0083 int64_t value,
0084 napi_value* result);
0085 NAPI_EXTERN napi_status NAPI_CDECL napi_create_string_latin1(
0086 napi_env env, const char* str, size_t length, napi_value* result);
0087 NAPI_EXTERN napi_status NAPI_CDECL napi_create_string_utf8(napi_env env,
0088 const char* str,
0089 size_t length,
0090 napi_value* result);
0091 NAPI_EXTERN napi_status NAPI_CDECL napi_create_string_utf16(napi_env env,
0092 const char16_t* str,
0093 size_t length,
0094 napi_value* result);
0095 #ifdef NAPI_EXPERIMENTAL
0096 #define NODE_API_EXPERIMENTAL_HAS_EXTERNAL_STRINGS
0097 NAPI_EXTERN napi_status NAPI_CDECL
0098 node_api_create_external_string_latin1(napi_env env,
0099 char* str,
0100 size_t length,
0101 node_api_nogc_finalize finalize_callback,
0102 void* finalize_hint,
0103 napi_value* result,
0104 bool* copied);
0105 NAPI_EXTERN napi_status NAPI_CDECL
0106 node_api_create_external_string_utf16(napi_env env,
0107 char16_t* str,
0108 size_t length,
0109 node_api_nogc_finalize finalize_callback,
0110 void* finalize_hint,
0111 napi_value* result,
0112 bool* copied);
0113 #endif
0114
0115 #ifdef NAPI_EXPERIMENTAL
0116 #define NODE_API_EXPERIMENTAL_HAS_PROPERTY_KEYS
0117 NAPI_EXTERN napi_status NAPI_CDECL node_api_create_property_key_utf16(
0118 napi_env env, const char16_t* str, size_t length, napi_value* result);
0119 #endif
0120
0121 NAPI_EXTERN napi_status NAPI_CDECL napi_create_symbol(napi_env env,
0122 napi_value description,
0123 napi_value* result);
0124 #if NAPI_VERSION >= 9
0125 NAPI_EXTERN napi_status NAPI_CDECL
0126 node_api_symbol_for(napi_env env,
0127 const char* utf8description,
0128 size_t length,
0129 napi_value* result);
0130 #endif
0131 NAPI_EXTERN napi_status NAPI_CDECL napi_create_function(napi_env env,
0132 const char* utf8name,
0133 size_t length,
0134 napi_callback cb,
0135 void* data,
0136 napi_value* result);
0137 NAPI_EXTERN napi_status NAPI_CDECL napi_create_error(napi_env env,
0138 napi_value code,
0139 napi_value msg,
0140 napi_value* result);
0141 NAPI_EXTERN napi_status NAPI_CDECL napi_create_type_error(napi_env env,
0142 napi_value code,
0143 napi_value msg,
0144 napi_value* result);
0145 NAPI_EXTERN napi_status NAPI_CDECL napi_create_range_error(napi_env env,
0146 napi_value code,
0147 napi_value msg,
0148 napi_value* result);
0149 #if NAPI_VERSION >= 9
0150 NAPI_EXTERN napi_status NAPI_CDECL node_api_create_syntax_error(
0151 napi_env env, napi_value code, napi_value msg, napi_value* result);
0152 #endif
0153
0154
0155 NAPI_EXTERN napi_status NAPI_CDECL napi_typeof(napi_env env,
0156 napi_value value,
0157 napi_valuetype* result);
0158 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_double(napi_env env,
0159 napi_value value,
0160 double* result);
0161 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_int32(napi_env env,
0162 napi_value value,
0163 int32_t* result);
0164 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_uint32(napi_env env,
0165 napi_value value,
0166 uint32_t* result);
0167 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_int64(napi_env env,
0168 napi_value value,
0169 int64_t* result);
0170 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_bool(napi_env env,
0171 napi_value value,
0172 bool* result);
0173
0174
0175 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_string_latin1(
0176 napi_env env, napi_value value, char* buf, size_t bufsize, size_t* result);
0177
0178
0179 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_string_utf8(
0180 napi_env env, napi_value value, char* buf, size_t bufsize, size_t* result);
0181
0182
0183 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_string_utf16(napi_env env,
0184 napi_value value,
0185 char16_t* buf,
0186 size_t bufsize,
0187 size_t* result);
0188
0189
0190
0191 NAPI_EXTERN napi_status NAPI_CDECL napi_coerce_to_bool(napi_env env,
0192 napi_value value,
0193 napi_value* result);
0194 NAPI_EXTERN napi_status NAPI_CDECL napi_coerce_to_number(napi_env env,
0195 napi_value value,
0196 napi_value* result);
0197 NAPI_EXTERN napi_status NAPI_CDECL napi_coerce_to_object(napi_env env,
0198 napi_value value,
0199 napi_value* result);
0200 NAPI_EXTERN napi_status NAPI_CDECL napi_coerce_to_string(napi_env env,
0201 napi_value value,
0202 napi_value* result);
0203
0204
0205 NAPI_EXTERN napi_status NAPI_CDECL napi_get_prototype(napi_env env,
0206 napi_value object,
0207 napi_value* result);
0208 NAPI_EXTERN napi_status NAPI_CDECL napi_get_property_names(napi_env env,
0209 napi_value object,
0210 napi_value* result);
0211 NAPI_EXTERN napi_status NAPI_CDECL napi_set_property(napi_env env,
0212 napi_value object,
0213 napi_value key,
0214 napi_value value);
0215 NAPI_EXTERN napi_status NAPI_CDECL napi_has_property(napi_env env,
0216 napi_value object,
0217 napi_value key,
0218 bool* result);
0219 NAPI_EXTERN napi_status NAPI_CDECL napi_get_property(napi_env env,
0220 napi_value object,
0221 napi_value key,
0222 napi_value* result);
0223 NAPI_EXTERN napi_status NAPI_CDECL napi_delete_property(napi_env env,
0224 napi_value object,
0225 napi_value key,
0226 bool* result);
0227 NAPI_EXTERN napi_status NAPI_CDECL napi_has_own_property(napi_env env,
0228 napi_value object,
0229 napi_value key,
0230 bool* result);
0231 NAPI_EXTERN napi_status NAPI_CDECL napi_set_named_property(napi_env env,
0232 napi_value object,
0233 const char* utf8name,
0234 napi_value value);
0235 NAPI_EXTERN napi_status NAPI_CDECL napi_has_named_property(napi_env env,
0236 napi_value object,
0237 const char* utf8name,
0238 bool* result);
0239 NAPI_EXTERN napi_status NAPI_CDECL napi_get_named_property(napi_env env,
0240 napi_value object,
0241 const char* utf8name,
0242 napi_value* result);
0243 NAPI_EXTERN napi_status NAPI_CDECL napi_set_element(napi_env env,
0244 napi_value object,
0245 uint32_t index,
0246 napi_value value);
0247 NAPI_EXTERN napi_status NAPI_CDECL napi_has_element(napi_env env,
0248 napi_value object,
0249 uint32_t index,
0250 bool* result);
0251 NAPI_EXTERN napi_status NAPI_CDECL napi_get_element(napi_env env,
0252 napi_value object,
0253 uint32_t index,
0254 napi_value* result);
0255 NAPI_EXTERN napi_status NAPI_CDECL napi_delete_element(napi_env env,
0256 napi_value object,
0257 uint32_t index,
0258 bool* result);
0259 NAPI_EXTERN napi_status NAPI_CDECL
0260 napi_define_properties(napi_env env,
0261 napi_value object,
0262 size_t property_count,
0263 const napi_property_descriptor* properties);
0264
0265
0266 NAPI_EXTERN napi_status NAPI_CDECL napi_is_array(napi_env env,
0267 napi_value value,
0268 bool* result);
0269 NAPI_EXTERN napi_status NAPI_CDECL napi_get_array_length(napi_env env,
0270 napi_value value,
0271 uint32_t* result);
0272
0273
0274 NAPI_EXTERN napi_status NAPI_CDECL napi_strict_equals(napi_env env,
0275 napi_value lhs,
0276 napi_value rhs,
0277 bool* result);
0278
0279
0280 NAPI_EXTERN napi_status NAPI_CDECL napi_call_function(napi_env env,
0281 napi_value recv,
0282 napi_value func,
0283 size_t argc,
0284 const napi_value* argv,
0285 napi_value* result);
0286 NAPI_EXTERN napi_status NAPI_CDECL napi_new_instance(napi_env env,
0287 napi_value constructor,
0288 size_t argc,
0289 const napi_value* argv,
0290 napi_value* result);
0291 NAPI_EXTERN napi_status NAPI_CDECL napi_instanceof(napi_env env,
0292 napi_value object,
0293 napi_value constructor,
0294 bool* result);
0295
0296
0297
0298
0299 NAPI_EXTERN napi_status NAPI_CDECL napi_get_cb_info(
0300 napi_env env,
0301 napi_callback_info cbinfo,
0302 size_t* argc,
0303
0304 napi_value* argv,
0305 napi_value* this_arg,
0306 void** data);
0307
0308 NAPI_EXTERN napi_status NAPI_CDECL napi_get_new_target(
0309 napi_env env, napi_callback_info cbinfo, napi_value* result);
0310 NAPI_EXTERN napi_status NAPI_CDECL
0311 napi_define_class(napi_env env,
0312 const char* utf8name,
0313 size_t length,
0314 napi_callback constructor,
0315 void* data,
0316 size_t property_count,
0317 const napi_property_descriptor* properties,
0318 napi_value* result);
0319
0320
0321 NAPI_EXTERN napi_status NAPI_CDECL napi_wrap(napi_env env,
0322 napi_value js_object,
0323 void* native_object,
0324 node_api_nogc_finalize finalize_cb,
0325 void* finalize_hint,
0326 napi_ref* result);
0327 NAPI_EXTERN napi_status NAPI_CDECL napi_unwrap(napi_env env,
0328 napi_value js_object,
0329 void** result);
0330 NAPI_EXTERN napi_status NAPI_CDECL napi_remove_wrap(napi_env env,
0331 napi_value js_object,
0332 void** result);
0333 NAPI_EXTERN napi_status NAPI_CDECL
0334 napi_create_external(napi_env env,
0335 void* data,
0336 node_api_nogc_finalize finalize_cb,
0337 void* finalize_hint,
0338 napi_value* result);
0339 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_external(napi_env env,
0340 napi_value value,
0341 void** result);
0342
0343
0344
0345
0346 NAPI_EXTERN napi_status NAPI_CDECL
0347 napi_create_reference(napi_env env,
0348 napi_value value,
0349 uint32_t initial_refcount,
0350 napi_ref* result);
0351
0352
0353
0354 NAPI_EXTERN napi_status NAPI_CDECL napi_delete_reference(napi_env env,
0355 napi_ref ref);
0356
0357
0358
0359
0360
0361
0362 NAPI_EXTERN napi_status NAPI_CDECL napi_reference_ref(napi_env env,
0363 napi_ref ref,
0364 uint32_t* result);
0365
0366
0367
0368
0369
0370 NAPI_EXTERN napi_status NAPI_CDECL napi_reference_unref(napi_env env,
0371 napi_ref ref,
0372 uint32_t* result);
0373
0374
0375
0376
0377 NAPI_EXTERN napi_status NAPI_CDECL napi_get_reference_value(napi_env env,
0378 napi_ref ref,
0379 napi_value* result);
0380
0381 NAPI_EXTERN napi_status NAPI_CDECL
0382 napi_open_handle_scope(napi_env env, napi_handle_scope* result);
0383 NAPI_EXTERN napi_status NAPI_CDECL
0384 napi_close_handle_scope(napi_env env, napi_handle_scope scope);
0385 NAPI_EXTERN napi_status NAPI_CDECL napi_open_escapable_handle_scope(
0386 napi_env env, napi_escapable_handle_scope* result);
0387 NAPI_EXTERN napi_status NAPI_CDECL napi_close_escapable_handle_scope(
0388 napi_env env, napi_escapable_handle_scope scope);
0389
0390 NAPI_EXTERN napi_status NAPI_CDECL
0391 napi_escape_handle(napi_env env,
0392 napi_escapable_handle_scope scope,
0393 napi_value escapee,
0394 napi_value* result);
0395
0396
0397 NAPI_EXTERN napi_status NAPI_CDECL napi_throw(napi_env env, napi_value error);
0398 NAPI_EXTERN napi_status NAPI_CDECL napi_throw_error(napi_env env,
0399 const char* code,
0400 const char* msg);
0401 NAPI_EXTERN napi_status NAPI_CDECL napi_throw_type_error(napi_env env,
0402 const char* code,
0403 const char* msg);
0404 NAPI_EXTERN napi_status NAPI_CDECL napi_throw_range_error(napi_env env,
0405 const char* code,
0406 const char* msg);
0407 #if NAPI_VERSION >= 9
0408 NAPI_EXTERN napi_status NAPI_CDECL node_api_throw_syntax_error(napi_env env,
0409 const char* code,
0410 const char* msg);
0411 #endif
0412 NAPI_EXTERN napi_status NAPI_CDECL napi_is_error(napi_env env,
0413 napi_value value,
0414 bool* result);
0415
0416
0417 NAPI_EXTERN napi_status NAPI_CDECL napi_is_exception_pending(napi_env env,
0418 bool* result);
0419 NAPI_EXTERN napi_status NAPI_CDECL
0420 napi_get_and_clear_last_exception(napi_env env, napi_value* result);
0421
0422
0423 NAPI_EXTERN napi_status NAPI_CDECL napi_is_arraybuffer(napi_env env,
0424 napi_value value,
0425 bool* result);
0426 NAPI_EXTERN napi_status NAPI_CDECL napi_create_arraybuffer(napi_env env,
0427 size_t byte_length,
0428 void** data,
0429 napi_value* result);
0430 #ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
0431 NAPI_EXTERN napi_status NAPI_CDECL
0432 napi_create_external_arraybuffer(napi_env env,
0433 void* external_data,
0434 size_t byte_length,
0435 node_api_nogc_finalize finalize_cb,
0436 void* finalize_hint,
0437 napi_value* result);
0438 #endif
0439 NAPI_EXTERN napi_status NAPI_CDECL napi_get_arraybuffer_info(
0440 napi_env env, napi_value arraybuffer, void** data, size_t* byte_length);
0441 NAPI_EXTERN napi_status NAPI_CDECL napi_is_typedarray(napi_env env,
0442 napi_value value,
0443 bool* result);
0444 NAPI_EXTERN napi_status NAPI_CDECL
0445 napi_create_typedarray(napi_env env,
0446 napi_typedarray_type type,
0447 size_t length,
0448 napi_value arraybuffer,
0449 size_t byte_offset,
0450 napi_value* result);
0451 NAPI_EXTERN napi_status NAPI_CDECL
0452 napi_get_typedarray_info(napi_env env,
0453 napi_value typedarray,
0454 napi_typedarray_type* type,
0455 size_t* length,
0456 void** data,
0457 napi_value* arraybuffer,
0458 size_t* byte_offset);
0459
0460 NAPI_EXTERN napi_status NAPI_CDECL napi_create_dataview(napi_env env,
0461 size_t length,
0462 napi_value arraybuffer,
0463 size_t byte_offset,
0464 napi_value* result);
0465 NAPI_EXTERN napi_status NAPI_CDECL napi_is_dataview(napi_env env,
0466 napi_value value,
0467 bool* result);
0468 NAPI_EXTERN napi_status NAPI_CDECL
0469 napi_get_dataview_info(napi_env env,
0470 napi_value dataview,
0471 size_t* bytelength,
0472 void** data,
0473 napi_value* arraybuffer,
0474 size_t* byte_offset);
0475
0476
0477 NAPI_EXTERN napi_status NAPI_CDECL napi_get_version(node_api_nogc_env env,
0478 uint32_t* result);
0479
0480
0481 NAPI_EXTERN napi_status NAPI_CDECL napi_create_promise(napi_env env,
0482 napi_deferred* deferred,
0483 napi_value* promise);
0484 NAPI_EXTERN napi_status NAPI_CDECL napi_resolve_deferred(napi_env env,
0485 napi_deferred deferred,
0486 napi_value resolution);
0487 NAPI_EXTERN napi_status NAPI_CDECL napi_reject_deferred(napi_env env,
0488 napi_deferred deferred,
0489 napi_value rejection);
0490 NAPI_EXTERN napi_status NAPI_CDECL napi_is_promise(napi_env env,
0491 napi_value value,
0492 bool* is_promise);
0493
0494
0495 NAPI_EXTERN napi_status NAPI_CDECL napi_run_script(napi_env env,
0496 napi_value script,
0497 napi_value* result);
0498
0499
0500 NAPI_EXTERN napi_status NAPI_CDECL napi_adjust_external_memory(
0501 node_api_nogc_env env, int64_t change_in_bytes, int64_t* adjusted_value);
0502
0503 #if NAPI_VERSION >= 5
0504
0505
0506 NAPI_EXTERN napi_status NAPI_CDECL napi_create_date(napi_env env,
0507 double time,
0508 napi_value* result);
0509
0510 NAPI_EXTERN napi_status NAPI_CDECL napi_is_date(napi_env env,
0511 napi_value value,
0512 bool* is_date);
0513
0514 NAPI_EXTERN napi_status NAPI_CDECL napi_get_date_value(napi_env env,
0515 napi_value value,
0516 double* result);
0517
0518
0519 NAPI_EXTERN napi_status NAPI_CDECL
0520 napi_add_finalizer(napi_env env,
0521 napi_value js_object,
0522 void* finalize_data,
0523 node_api_nogc_finalize finalize_cb,
0524 void* finalize_hint,
0525 napi_ref* result);
0526
0527 #endif
0528
0529 #ifdef NAPI_EXPERIMENTAL
0530 #define NODE_API_EXPERIMENTAL_HAS_POST_FINALIZER
0531
0532 NAPI_EXTERN napi_status NAPI_CDECL
0533 node_api_post_finalizer(node_api_nogc_env env,
0534 napi_finalize finalize_cb,
0535 void* finalize_data,
0536 void* finalize_hint);
0537
0538 #endif
0539
0540 #if NAPI_VERSION >= 6
0541
0542
0543 NAPI_EXTERN napi_status NAPI_CDECL napi_create_bigint_int64(napi_env env,
0544 int64_t value,
0545 napi_value* result);
0546 NAPI_EXTERN napi_status NAPI_CDECL
0547 napi_create_bigint_uint64(napi_env env, uint64_t value, napi_value* result);
0548 NAPI_EXTERN napi_status NAPI_CDECL
0549 napi_create_bigint_words(napi_env env,
0550 int sign_bit,
0551 size_t word_count,
0552 const uint64_t* words,
0553 napi_value* result);
0554 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_bigint_int64(napi_env env,
0555 napi_value value,
0556 int64_t* result,
0557 bool* lossless);
0558 NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_bigint_uint64(
0559 napi_env env, napi_value value, uint64_t* result, bool* lossless);
0560 NAPI_EXTERN napi_status NAPI_CDECL
0561 napi_get_value_bigint_words(napi_env env,
0562 napi_value value,
0563 int* sign_bit,
0564 size_t* word_count,
0565 uint64_t* words);
0566
0567
0568 NAPI_EXTERN napi_status NAPI_CDECL
0569 napi_get_all_property_names(napi_env env,
0570 napi_value object,
0571 napi_key_collection_mode key_mode,
0572 napi_key_filter key_filter,
0573 napi_key_conversion key_conversion,
0574 napi_value* result);
0575
0576
0577 NAPI_EXTERN napi_status NAPI_CDECL
0578 napi_set_instance_data(node_api_nogc_env env,
0579 void* data,
0580 napi_finalize finalize_cb,
0581 void* finalize_hint);
0582
0583 NAPI_EXTERN napi_status NAPI_CDECL napi_get_instance_data(node_api_nogc_env env,
0584 void** data);
0585 #endif
0586
0587 #if NAPI_VERSION >= 7
0588
0589 NAPI_EXTERN napi_status NAPI_CDECL
0590 napi_detach_arraybuffer(napi_env env, napi_value arraybuffer);
0591
0592 NAPI_EXTERN napi_status NAPI_CDECL
0593 napi_is_detached_arraybuffer(napi_env env, napi_value value, bool* result);
0594 #endif
0595
0596 #if NAPI_VERSION >= 8
0597
0598 NAPI_EXTERN napi_status NAPI_CDECL napi_type_tag_object(
0599 napi_env env, napi_value value, const napi_type_tag* type_tag);
0600
0601 NAPI_EXTERN napi_status NAPI_CDECL
0602 napi_check_object_type_tag(napi_env env,
0603 napi_value value,
0604 const napi_type_tag* type_tag,
0605 bool* result);
0606 NAPI_EXTERN napi_status NAPI_CDECL napi_object_freeze(napi_env env,
0607 napi_value object);
0608 NAPI_EXTERN napi_status NAPI_CDECL napi_object_seal(napi_env env,
0609 napi_value object);
0610 #endif
0611
0612 EXTERN_C_END
0613
0614 #endif