koffi 0.9.3 → 0.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CMakeLists.txt +63 -60
- package/README.md +162 -153
- package/package.json +19 -18
- package/src/call.hh +27 -27
- package/src/call_arm32.cc +514 -0
- package/src/call_arm32_fwd.S +108 -0
- package/src/call_arm64.cc +497 -482
- package/src/call_arm64_fwd.S +110 -115
- package/src/call_x64_sysv.cc +477 -477
- package/src/call_x64_sysv_fwd.S +131 -131
- package/src/call_x64_win.cc +243 -243
- package/src/call_x64_win_fwd.asm +105 -105
- package/src/call_x86.cc +259 -259
- package/src/call_x86_fwd.S +48 -48
- package/src/call_x86_fwd.asm +50 -50
- package/src/ffi.cc +504 -504
- package/src/ffi.hh +136 -135
- package/src/util.cc +297 -296
- package/src/util.hh +80 -80
- package/vendor/dragonbox/CMakeLists.txt +122 -122
- package/vendor/dragonbox/LICENSE-Apache2-LLVM +218 -218
- package/vendor/dragonbox/LICENSE-Boost +23 -23
- package/vendor/dragonbox/README.md +277 -277
- package/vendor/dragonbox/cmake/dragonboxConfig.cmake +1 -1
- package/vendor/dragonbox/include/dragonbox/dragonbox.h +2674 -2670
- package/vendor/dragonbox/include/dragonbox/dragonbox_to_chars.h +108 -108
- package/vendor/dragonbox/other_files/Dragonbox.pdf +0 -0
- package/vendor/dragonbox/other_files/unknown_win64_vc2019.html +539 -539
- package/vendor/dragonbox/source/dragonbox_to_chars.cpp +303 -303
- package/vendor/dragonbox/subproject/3rdparty/grisu_exact/CMakeLists.txt +23 -23
- package/vendor/dragonbox/subproject/3rdparty/grisu_exact/fp_to_chars.cpp +238 -238
- package/vendor/dragonbox/subproject/3rdparty/grisu_exact/fp_to_chars.h +95 -95
- package/vendor/dragonbox/subproject/3rdparty/grisu_exact/grisu_exact.h +2666 -2666
- package/vendor/dragonbox/subproject/3rdparty/ryu/CMakeLists.txt +16 -16
- package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/common.h +114 -114
- package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s.c +509 -509
- package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s_full_table.h +367 -367
- package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s_intrinsics.h +357 -357
- package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/digit_table.h +35 -35
- package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s.c +345 -345
- package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s_full_table.h +55 -55
- package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s_intrinsics.h +128 -128
- package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/ryu.h +46 -46
- package/vendor/dragonbox/subproject/3rdparty/schubfach/CMakeLists.txt +21 -21
- package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_32.cc +699 -699
- package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_32.h +31 -31
- package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_64.cc +1354 -1354
- package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_64.h +31 -31
- package/vendor/dragonbox/subproject/3rdparty/shaded_plots/example_shaded_plots.m +68 -68
- package/vendor/dragonbox/subproject/3rdparty/shaded_plots/license.txt +25 -25
- package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_distribution.m +92 -92
- package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_distribution_prctile.m +121 -121
- package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_histogram_shaded.m +99 -99
- package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_shaded.m +93 -93
- package/vendor/dragonbox/subproject/benchmark/CMakeLists.txt +64 -64
- package/vendor/dragonbox/subproject/benchmark/include/benchmark.h +40 -40
- package/vendor/dragonbox/subproject/benchmark/matlab/plot_benchmarks.m +21 -21
- package/vendor/dragonbox/subproject/benchmark/matlab/plot_digit_benchmark.m +78 -78
- package/vendor/dragonbox/subproject/benchmark/matlab/plot_uniform_benchmark.m +95 -95
- package/vendor/dragonbox/subproject/benchmark/source/benchmark.cpp +237 -237
- package/vendor/dragonbox/subproject/benchmark/source/dragonbox.cpp +30 -30
- package/vendor/dragonbox/subproject/benchmark/source/grisu_exact.cpp +36 -36
- package/vendor/dragonbox/subproject/benchmark/source/ryu.cpp +27 -27
- package/vendor/dragonbox/subproject/benchmark/source/schubfach.cpp +31 -31
- package/vendor/dragonbox/subproject/common/CMakeLists.txt +41 -41
- package/vendor/dragonbox/subproject/common/include/best_rational_approx.h +96 -96
- package/vendor/dragonbox/subproject/common/include/big_uint.h +217 -217
- package/vendor/dragonbox/subproject/common/include/continued_fractions.h +173 -173
- package/vendor/dragonbox/subproject/common/include/good_rational_approx.h +266 -266
- package/vendor/dragonbox/subproject/common/include/random_float.h +182 -182
- package/vendor/dragonbox/subproject/common/include/rational_continued_fractions.h +56 -56
- package/vendor/dragonbox/subproject/common/source/big_uint.cpp +601 -601
- package/vendor/dragonbox/subproject/meta/CMakeLists.txt +40 -40
- package/vendor/dragonbox/subproject/meta/results/binary32_generated_cache.txt +81 -81
- package/vendor/dragonbox/subproject/meta/results/binary64_compressed_cache_error_table.txt +9 -9
- package/vendor/dragonbox/subproject/meta/results/binary64_generated_cache.txt +622 -622
- package/vendor/dragonbox/subproject/meta/source/generate_cache.cpp +126 -126
- package/vendor/dragonbox/subproject/meta/source/live_test.cpp +81 -81
- package/vendor/dragonbox/subproject/meta/source/perf_test.cpp +104 -104
- package/vendor/dragonbox/subproject/meta/source/sandbox.cpp +20 -20
- package/vendor/dragonbox/subproject/test/CMakeLists.txt +69 -69
- package/vendor/dragonbox/subproject/test/results/binary32.csv +255 -255
- package/vendor/dragonbox/subproject/test/results/binary64.csv +2047 -2047
- package/vendor/dragonbox/subproject/test/results/plot_required_bits.m +17 -17
- package/vendor/dragonbox/subproject/test/source/test_all_shorter_interval_cases.cpp +88 -88
- package/vendor/dragonbox/subproject/test/source/uniform_random_test.cpp +95 -95
- package/vendor/dragonbox/subproject/test/source/verify_cache_precision.cpp +337 -337
- package/vendor/dragonbox/subproject/test/source/verify_compressed_cache.cpp +154 -154
- package/vendor/dragonbox/subproject/test/source/verify_fast_multiplication.cpp +168 -168
- package/vendor/dragonbox/subproject/test/source/verify_log_computation.cpp +251 -251
- package/vendor/dragonbox/subproject/test/source/verify_magic_division.cpp +113 -113
- package/vendor/libcc/libcc.cc +7651 -7651
- package/vendor/libcc/libcc.hh +4312 -4312
- package/vendor/node-addon-api/CHANGELOG.md +859 -859
- package/vendor/node-addon-api/CODE_OF_CONDUCT.md +4 -4
- package/vendor/node-addon-api/CONTRIBUTING.md +93 -93
- package/vendor/node-addon-api/LICENSE.md +12 -12
- package/vendor/node-addon-api/README.md +293 -293
- package/vendor/node-addon-api/appveyor.yml +37 -37
- package/vendor/node-addon-api/benchmark/README.md +47 -47
- package/vendor/node-addon-api/benchmark/binding.gyp +25 -25
- package/vendor/node-addon-api/benchmark/function_args.cc +217 -217
- package/vendor/node-addon-api/benchmark/function_args.js +60 -60
- package/vendor/node-addon-api/benchmark/index.js +34 -34
- package/vendor/node-addon-api/benchmark/property_descriptor.cc +91 -91
- package/vendor/node-addon-api/benchmark/property_descriptor.js +37 -37
- package/vendor/node-addon-api/common.gypi +21 -21
- package/vendor/node-addon-api/doc/addon.md +163 -163
- package/vendor/node-addon-api/doc/array.md +81 -81
- package/vendor/node-addon-api/doc/array_buffer.md +155 -155
- package/vendor/node-addon-api/doc/async_context.md +86 -86
- package/vendor/node-addon-api/doc/async_operations.md +31 -31
- package/vendor/node-addon-api/doc/async_worker.md +427 -427
- package/vendor/node-addon-api/doc/async_worker_variants.md +557 -557
- package/vendor/node-addon-api/doc/bigint.md +97 -97
- package/vendor/node-addon-api/doc/boolean.md +68 -68
- package/vendor/node-addon-api/doc/buffer.md +150 -150
- package/vendor/node-addon-api/doc/callback_scope.md +54 -54
- package/vendor/node-addon-api/doc/callbackinfo.md +97 -97
- package/vendor/node-addon-api/doc/checker-tool.md +32 -32
- package/vendor/node-addon-api/doc/class_property_descriptor.md +115 -115
- package/vendor/node-addon-api/doc/cmake-js.md +68 -68
- package/vendor/node-addon-api/doc/conversion-tool.md +27 -27
- package/vendor/node-addon-api/doc/creating_a_release.md +62 -62
- package/vendor/node-addon-api/doc/dataview.md +248 -248
- package/vendor/node-addon-api/doc/date.md +68 -68
- package/vendor/node-addon-api/doc/env.md +196 -196
- package/vendor/node-addon-api/doc/error.md +120 -120
- package/vendor/node-addon-api/doc/error_handling.md +254 -254
- package/vendor/node-addon-api/doc/escapable_handle_scope.md +80 -80
- package/vendor/node-addon-api/doc/external.md +63 -63
- package/vendor/node-addon-api/doc/function.md +402 -402
- package/vendor/node-addon-api/doc/function_reference.md +238 -238
- package/vendor/node-addon-api/doc/generator.md +13 -13
- package/vendor/node-addon-api/doc/handle_scope.md +63 -63
- package/vendor/node-addon-api/doc/hierarchy.md +91 -91
- package/vendor/node-addon-api/doc/instance_wrap.md +408 -408
- package/vendor/node-addon-api/doc/maybe.md +76 -76
- package/vendor/node-addon-api/doc/memory_management.md +27 -27
- package/vendor/node-addon-api/doc/name.md +29 -29
- package/vendor/node-addon-api/doc/node-gyp.md +82 -82
- package/vendor/node-addon-api/doc/number.md +163 -163
- package/vendor/node-addon-api/doc/object.md +432 -432
- package/vendor/node-addon-api/doc/object_lifetime_management.md +83 -83
- package/vendor/node-addon-api/doc/object_reference.md +117 -117
- package/vendor/node-addon-api/doc/object_wrap.md +561 -561
- package/vendor/node-addon-api/doc/prebuild_tools.md +16 -16
- package/vendor/node-addon-api/doc/promises.md +79 -79
- package/vendor/node-addon-api/doc/property_descriptor.md +286 -286
- package/vendor/node-addon-api/doc/propertylvalue.md +50 -50
- package/vendor/node-addon-api/doc/range_error.md +59 -59
- package/vendor/node-addon-api/doc/reference.md +113 -113
- package/vendor/node-addon-api/doc/setup.md +110 -110
- package/vendor/node-addon-api/doc/string.md +93 -93
- package/vendor/node-addon-api/doc/symbol.md +60 -60
- package/vendor/node-addon-api/doc/threadsafe.md +121 -121
- package/vendor/node-addon-api/doc/threadsafe_function.md +290 -290
- package/vendor/node-addon-api/doc/type_error.md +59 -59
- package/vendor/node-addon-api/doc/typed_array.md +78 -78
- package/vendor/node-addon-api/doc/typed_array_of.md +137 -137
- package/vendor/node-addon-api/doc/typed_threadsafe_function.md +306 -306
- package/vendor/node-addon-api/doc/value.md +340 -340
- package/vendor/node-addon-api/doc/version_management.md +43 -43
- package/vendor/node-addon-api/except.gypi +25 -25
- package/vendor/node-addon-api/index.js +11 -11
- package/vendor/node-addon-api/napi-inl.deprecated.h +192 -192
- package/vendor/node-addon-api/napi-inl.h +6209 -6209
- package/vendor/node-addon-api/napi.h +2983 -2983
- package/vendor/node-addon-api/node_api.gyp +9 -9
- package/vendor/node-addon-api/noexcept.gypi +26 -26
- package/vendor/node-addon-api/package-support.json +21 -21
- package/vendor/node-addon-api/package.json +399 -399
- package/vendor/node-addon-api/test/README.md +91 -91
- package/vendor/node-addon-api/test/addon.cc +36 -36
- package/vendor/node-addon-api/test/addon.js +11 -11
- package/vendor/node-addon-api/test/addon_build/index.js +49 -49
- package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +17 -17
- package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +62 -62
- package/vendor/node-addon-api/test/addon_build/tpl/index.js +9 -9
- package/vendor/node-addon-api/test/addon_build/tpl/package.json +11 -11
- package/vendor/node-addon-api/test/addon_data.cc +99 -99
- package/vendor/node-addon-api/test/addon_data.js +46 -46
- package/vendor/node-addon-api/test/array_buffer.cc +243 -243
- package/vendor/node-addon-api/test/array_buffer.js +69 -69
- package/vendor/node-addon-api/test/async_context.cc +21 -21
- package/vendor/node-addon-api/test/async_context.js +86 -86
- package/vendor/node-addon-api/test/async_progress_queue_worker.cc +83 -83
- package/vendor/node-addon-api/test/async_progress_queue_worker.js +46 -46
- package/vendor/node-addon-api/test/async_progress_worker.cc +134 -134
- package/vendor/node-addon-api/test/async_progress_worker.js +61 -61
- package/vendor/node-addon-api/test/async_worker.cc +106 -106
- package/vendor/node-addon-api/test/async_worker.js +179 -179
- package/vendor/node-addon-api/test/async_worker_nocallback.js +13 -13
- package/vendor/node-addon-api/test/async_worker_persistent.cc +63 -63
- package/vendor/node-addon-api/test/async_worker_persistent.js +24 -24
- package/vendor/node-addon-api/test/basic_types/array.cc +40 -40
- package/vendor/node-addon-api/test/basic_types/array.js +35 -35
- package/vendor/node-addon-api/test/basic_types/boolean.cc +38 -38
- package/vendor/node-addon-api/test/basic_types/boolean.js +35 -35
- package/vendor/node-addon-api/test/basic_types/number.cc +99 -99
- package/vendor/node-addon-api/test/basic_types/number.js +114 -114
- package/vendor/node-addon-api/test/basic_types/value.cc +120 -120
- package/vendor/node-addon-api/test/basic_types/value.js +133 -133
- package/vendor/node-addon-api/test/bigint.cc +91 -91
- package/vendor/node-addon-api/test/bigint.js +53 -53
- package/vendor/node-addon-api/test/binding-swallowexcept.cc +12 -12
- package/vendor/node-addon-api/test/binding.cc +171 -171
- package/vendor/node-addon-api/test/binding.gyp +117 -117
- package/vendor/node-addon-api/test/buffer.cc +183 -183
- package/vendor/node-addon-api/test/buffer.js +69 -69
- package/vendor/node-addon-api/test/callbackscope.cc +22 -22
- package/vendor/node-addon-api/test/callbackscope.js +49 -49
- package/vendor/node-addon-api/test/common/index.js +113 -113
- package/vendor/node-addon-api/test/common/test_helper.h +61 -61
- package/vendor/node-addon-api/test/dataview/dataview.cc +48 -48
- package/vendor/node-addon-api/test/dataview/dataview.js +35 -35
- package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +115 -115
- package/vendor/node-addon-api/test/dataview/dataview_read_write.js +90 -90
- package/vendor/node-addon-api/test/date.cc +44 -44
- package/vendor/node-addon-api/test/date.js +18 -18
- package/vendor/node-addon-api/test/env_cleanup.cc +88 -88
- package/vendor/node-addon-api/test/env_cleanup.js +56 -56
- package/vendor/node-addon-api/test/error.cc +287 -287
- package/vendor/node-addon-api/test/error.js +81 -81
- package/vendor/node-addon-api/test/error_handling_for_primitives.cc +13 -13
- package/vendor/node-addon-api/test/error_handling_for_primitives.js +29 -29
- package/vendor/node-addon-api/test/error_terminating_environment.js +94 -94
- package/vendor/node-addon-api/test/external.cc +81 -81
- package/vendor/node-addon-api/test/external.js +88 -88
- package/vendor/node-addon-api/test/function.cc +295 -295
- package/vendor/node-addon-api/test/function.js +121 -121
- package/vendor/node-addon-api/test/function_reference.cc +202 -202
- package/vendor/node-addon-api/test/function_reference.js +157 -157
- package/vendor/node-addon-api/test/globalObject/global_object.cc +61 -61
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +31 -31
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +61 -61
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +40 -40
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +57 -57
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +28 -28
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +48 -48
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +30 -30
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +58 -58
- package/vendor/node-addon-api/test/handlescope.cc +60 -60
- package/vendor/node-addon-api/test/handlescope.js +14 -14
- package/vendor/node-addon-api/test/index.js +136 -136
- package/vendor/node-addon-api/test/maybe/check.cc +23 -23
- package/vendor/node-addon-api/test/maybe/index.js +38 -38
- package/vendor/node-addon-api/test/memory_management.cc +17 -17
- package/vendor/node-addon-api/test/memory_management.js +9 -9
- package/vendor/node-addon-api/test/movable_callbacks.cc +23 -23
- package/vendor/node-addon-api/test/movable_callbacks.js +21 -21
- package/vendor/node-addon-api/test/name.cc +108 -108
- package/vendor/node-addon-api/test/name.js +59 -59
- package/vendor/node-addon-api/test/napi_child.js +14 -14
- package/vendor/node-addon-api/test/object/delete_property.cc +38 -38
- package/vendor/node-addon-api/test/object/delete_property.js +41 -41
- package/vendor/node-addon-api/test/object/finalizer.cc +29 -29
- package/vendor/node-addon-api/test/object/finalizer.js +28 -28
- package/vendor/node-addon-api/test/object/get_property.cc +34 -34
- package/vendor/node-addon-api/test/object/get_property.js +40 -40
- package/vendor/node-addon-api/test/object/has_own_property.cc +34 -34
- package/vendor/node-addon-api/test/object/has_own_property.js +34 -34
- package/vendor/node-addon-api/test/object/has_property.cc +38 -38
- package/vendor/node-addon-api/test/object/has_property.js +37 -37
- package/vendor/node-addon-api/test/object/object.cc +348 -348
- package/vendor/node-addon-api/test/object/object.js +217 -217
- package/vendor/node-addon-api/test/object/object_deprecated.cc +66 -66
- package/vendor/node-addon-api/test/object/object_deprecated.js +47 -47
- package/vendor/node-addon-api/test/object/object_freeze_seal.cc +25 -25
- package/vendor/node-addon-api/test/object/object_freeze_seal.js +61 -61
- package/vendor/node-addon-api/test/object/set_property.cc +37 -37
- package/vendor/node-addon-api/test/object/set_property.js +29 -29
- package/vendor/node-addon-api/test/object/subscript_operator.cc +42 -42
- package/vendor/node-addon-api/test/object/subscript_operator.js +17 -17
- package/vendor/node-addon-api/test/object_reference.cc +219 -219
- package/vendor/node-addon-api/test/object_reference.js +259 -259
- package/vendor/node-addon-api/test/objectwrap.cc +268 -268
- package/vendor/node-addon-api/test/objectwrap.js +284 -284
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +26 -26
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +18 -18
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +30 -30
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +13 -13
- package/vendor/node-addon-api/test/objectwrap_removewrap.cc +45 -45
- package/vendor/node-addon-api/test/objectwrap_removewrap.js +40 -40
- package/vendor/node-addon-api/test/objectwrap_worker_thread.js +19 -19
- package/vendor/node-addon-api/test/promise.cc +29 -29
- package/vendor/node-addon-api/test/promise.js +18 -18
- package/vendor/node-addon-api/test/reference.cc +24 -24
- package/vendor/node-addon-api/test/reference.js +14 -14
- package/vendor/node-addon-api/test/run_script.cc +56 -56
- package/vendor/node-addon-api/test/run_script.js +45 -45
- package/vendor/node-addon-api/test/symbol.cc +79 -79
- package/vendor/node-addon-api/test/symbol.js +73 -73
- package/vendor/node-addon-api/test/testUtil.js +54 -54
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +195 -195
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +188 -188
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +63 -63
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +12 -12
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +115 -115
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +14 -14
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +26 -26
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +7 -7
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +225 -225
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +59 -59
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +42 -42
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +53 -53
- package/vendor/node-addon-api/test/thunking_manual.cc +140 -140
- package/vendor/node-addon-api/test/thunking_manual.js +17 -17
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +215 -215
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +188 -188
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +68 -68
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +12 -12
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +127 -127
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +14 -14
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +28 -28
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +7 -7
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +237 -237
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +59 -59
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +53 -53
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +53 -53
- package/vendor/node-addon-api/test/typedarray-bigint.js +58 -58
- package/vendor/node-addon-api/test/typedarray.cc +216 -216
- package/vendor/node-addon-api/test/typedarray.js +69 -69
- package/vendor/node-addon-api/test/version_management.cc +27 -27
- package/vendor/node-addon-api/test/version_management.js +31 -31
- package/vendor/node-addon-api/tools/README.md +73 -73
- package/vendor/node-addon-api/tools/check-napi.js +100 -100
- package/vendor/node-addon-api/tools/clang-format.js +68 -68
- package/vendor/node-addon-api/tools/conversion.js +309 -309
- package/vendor/node-addon-api/tools/eslint-format.js +71 -71
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const assert = require('assert');
|
|
4
|
-
|
|
5
|
-
if (process.argv[2] === 'fatal') {
|
|
6
|
-
const binding = require(process.argv[3]);
|
|
7
|
-
binding.error.throwFatalError();
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
module.exports = require('./common').runTestWithBindingPath(test);
|
|
11
|
-
|
|
12
|
-
function test (bindingPath) {
|
|
13
|
-
const binding = require(bindingPath);
|
|
14
|
-
|
|
15
|
-
assert.throws(() => binding.error.throwApiError('test'), function (err) {
|
|
16
|
-
return err instanceof Error && err.message.includes('Invalid');
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
assert.throws(() => binding.error.lastExceptionErrorCode(), function (err) {
|
|
20
|
-
return err instanceof TypeError && err.message === 'A boolean was expected';
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
assert.throws(() => binding.error.throwJSError('test'), function (err) {
|
|
24
|
-
return err instanceof Error && err.message === 'test';
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
assert.throws(() => binding.error.throwTypeError('test'), function (err) {
|
|
28
|
-
return err instanceof TypeError && err.message === 'test';
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
assert.throws(() => binding.error.throwRangeError('test'), function (err) {
|
|
32
|
-
return err instanceof RangeError && err.message === 'test';
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
assert.throws(
|
|
36
|
-
() => binding.error.doNotCatch(
|
|
37
|
-
() => {
|
|
38
|
-
throw new TypeError('test');
|
|
39
|
-
}),
|
|
40
|
-
function (err) {
|
|
41
|
-
return err instanceof TypeError && err.message === 'test' && !err.caught;
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
assert.throws(
|
|
45
|
-
() => binding.error.catchAndRethrowError(
|
|
46
|
-
() => {
|
|
47
|
-
throw new TypeError('test');
|
|
48
|
-
}),
|
|
49
|
-
function (err) {
|
|
50
|
-
return err instanceof TypeError && err.message === 'test' && err.caught;
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
const err = binding.error.catchError(
|
|
54
|
-
() => { throw new TypeError('test'); });
|
|
55
|
-
assert(err instanceof TypeError);
|
|
56
|
-
assert.strictEqual(err.message, 'test');
|
|
57
|
-
|
|
58
|
-
const msg = binding.error.catchErrorMessage(
|
|
59
|
-
() => { throw new TypeError('test'); });
|
|
60
|
-
assert.strictEqual(msg, 'test');
|
|
61
|
-
|
|
62
|
-
assert.throws(() => binding.error.throwErrorThatEscapesScope('test'), function (err) {
|
|
63
|
-
return err instanceof Error && err.message === 'test';
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
assert.throws(() => binding.error.catchAndRethrowErrorThatEscapesScope('test'), function (err) {
|
|
67
|
-
return err instanceof Error && err.message === 'test' && err.caught;
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
const p = require('./napi_child').spawnSync(
|
|
71
|
-
process.execPath, [__filename, 'fatal', bindingPath]);
|
|
72
|
-
assert.ifError(p.error);
|
|
73
|
-
assert.ok(p.stderr.toString().includes(
|
|
74
|
-
'FATAL ERROR: Error::ThrowFatalError This is a fatal error'));
|
|
75
|
-
|
|
76
|
-
assert.throws(() => binding.error.throwDefaultError(false),
|
|
77
|
-
/Cannot convert undefined or null to object/);
|
|
78
|
-
|
|
79
|
-
assert.throws(() => binding.error.throwDefaultError(true),
|
|
80
|
-
/A number was expected/);
|
|
81
|
-
}
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const assert = require('assert');
|
|
4
|
+
|
|
5
|
+
if (process.argv[2] === 'fatal') {
|
|
6
|
+
const binding = require(process.argv[3]);
|
|
7
|
+
binding.error.throwFatalError();
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
module.exports = require('./common').runTestWithBindingPath(test);
|
|
11
|
+
|
|
12
|
+
function test (bindingPath) {
|
|
13
|
+
const binding = require(bindingPath);
|
|
14
|
+
|
|
15
|
+
assert.throws(() => binding.error.throwApiError('test'), function (err) {
|
|
16
|
+
return err instanceof Error && err.message.includes('Invalid');
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
assert.throws(() => binding.error.lastExceptionErrorCode(), function (err) {
|
|
20
|
+
return err instanceof TypeError && err.message === 'A boolean was expected';
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
assert.throws(() => binding.error.throwJSError('test'), function (err) {
|
|
24
|
+
return err instanceof Error && err.message === 'test';
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
assert.throws(() => binding.error.throwTypeError('test'), function (err) {
|
|
28
|
+
return err instanceof TypeError && err.message === 'test';
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
assert.throws(() => binding.error.throwRangeError('test'), function (err) {
|
|
32
|
+
return err instanceof RangeError && err.message === 'test';
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
assert.throws(
|
|
36
|
+
() => binding.error.doNotCatch(
|
|
37
|
+
() => {
|
|
38
|
+
throw new TypeError('test');
|
|
39
|
+
}),
|
|
40
|
+
function (err) {
|
|
41
|
+
return err instanceof TypeError && err.message === 'test' && !err.caught;
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
assert.throws(
|
|
45
|
+
() => binding.error.catchAndRethrowError(
|
|
46
|
+
() => {
|
|
47
|
+
throw new TypeError('test');
|
|
48
|
+
}),
|
|
49
|
+
function (err) {
|
|
50
|
+
return err instanceof TypeError && err.message === 'test' && err.caught;
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const err = binding.error.catchError(
|
|
54
|
+
() => { throw new TypeError('test'); });
|
|
55
|
+
assert(err instanceof TypeError);
|
|
56
|
+
assert.strictEqual(err.message, 'test');
|
|
57
|
+
|
|
58
|
+
const msg = binding.error.catchErrorMessage(
|
|
59
|
+
() => { throw new TypeError('test'); });
|
|
60
|
+
assert.strictEqual(msg, 'test');
|
|
61
|
+
|
|
62
|
+
assert.throws(() => binding.error.throwErrorThatEscapesScope('test'), function (err) {
|
|
63
|
+
return err instanceof Error && err.message === 'test';
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
assert.throws(() => binding.error.catchAndRethrowErrorThatEscapesScope('test'), function (err) {
|
|
67
|
+
return err instanceof Error && err.message === 'test' && err.caught;
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const p = require('./napi_child').spawnSync(
|
|
71
|
+
process.execPath, [__filename, 'fatal', bindingPath]);
|
|
72
|
+
assert.ifError(p.error);
|
|
73
|
+
assert.ok(p.stderr.toString().includes(
|
|
74
|
+
'FATAL ERROR: Error::ThrowFatalError This is a fatal error'));
|
|
75
|
+
|
|
76
|
+
assert.throws(() => binding.error.throwDefaultError(false),
|
|
77
|
+
/Cannot convert undefined or null to object/);
|
|
78
|
+
|
|
79
|
+
assert.throws(() => binding.error.throwDefaultError(true),
|
|
80
|
+
/A number was expected/);
|
|
81
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
#include <napi.h>
|
|
2
|
-
|
|
3
|
-
namespace {
|
|
4
|
-
void Test(const Napi::CallbackInfo& info) {
|
|
5
|
-
info[0].As<Napi::Function>().Call({});
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
} // namespace
|
|
9
|
-
Napi::Object InitErrorHandlingPrim(Napi::Env env) {
|
|
10
|
-
Napi::Object exports = Napi::Object::New(env);
|
|
11
|
-
exports.Set("errorHandlingPrim", Napi::Function::New<Test>(env));
|
|
12
|
-
return exports;
|
|
13
|
-
}
|
|
1
|
+
#include <napi.h>
|
|
2
|
+
|
|
3
|
+
namespace {
|
|
4
|
+
void Test(const Napi::CallbackInfo& info) {
|
|
5
|
+
info[0].As<Napi::Function>().Call({});
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
} // namespace
|
|
9
|
+
Napi::Object InitErrorHandlingPrim(Napi::Env env) {
|
|
10
|
+
Napi::Object exports = Napi::Object::New(env);
|
|
11
|
+
exports.Set("errorHandlingPrim", Napi::Function::New<Test>(env));
|
|
12
|
+
return exports;
|
|
13
|
+
}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const assert = require('assert');
|
|
4
|
-
|
|
5
|
-
module.exports = require('./common').runTest((binding) => {
|
|
6
|
-
test(binding.errorHandlingPrim);
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
function canThrow (binding, errorMessage, errorType) {
|
|
10
|
-
try {
|
|
11
|
-
binding.errorHandlingPrim(() => {
|
|
12
|
-
throw errorMessage;
|
|
13
|
-
});
|
|
14
|
-
} catch (e) {
|
|
15
|
-
// eslint-disable-next-line valid-typeof
|
|
16
|
-
assert(typeof e === errorType);
|
|
17
|
-
assert(e === errorMessage);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function test (binding) {
|
|
22
|
-
canThrow(binding, '404 server not found!', 'string');
|
|
23
|
-
canThrow(binding, 42, 'number');
|
|
24
|
-
canThrow(binding, Symbol.for('newSym'), 'symbol');
|
|
25
|
-
canThrow(binding, false, 'boolean');
|
|
26
|
-
canThrow(binding, BigInt(123), 'bigint');
|
|
27
|
-
canThrow(binding, () => { console.log('Logger shutdown incorrectly'); }, 'function');
|
|
28
|
-
canThrow(binding, { status: 403, errorMsg: 'Not authenticated' }, 'object');
|
|
29
|
-
}
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const assert = require('assert');
|
|
4
|
+
|
|
5
|
+
module.exports = require('./common').runTest((binding) => {
|
|
6
|
+
test(binding.errorHandlingPrim);
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
function canThrow (binding, errorMessage, errorType) {
|
|
10
|
+
try {
|
|
11
|
+
binding.errorHandlingPrim(() => {
|
|
12
|
+
throw errorMessage;
|
|
13
|
+
});
|
|
14
|
+
} catch (e) {
|
|
15
|
+
// eslint-disable-next-line valid-typeof
|
|
16
|
+
assert(typeof e === errorType);
|
|
17
|
+
assert(e === errorMessage);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function test (binding) {
|
|
22
|
+
canThrow(binding, '404 server not found!', 'string');
|
|
23
|
+
canThrow(binding, 42, 'number');
|
|
24
|
+
canThrow(binding, Symbol.for('newSym'), 'symbol');
|
|
25
|
+
canThrow(binding, false, 'boolean');
|
|
26
|
+
canThrow(binding, BigInt(123), 'bigint');
|
|
27
|
+
canThrow(binding, () => { console.log('Logger shutdown incorrectly'); }, 'function');
|
|
28
|
+
canThrow(binding, { status: 403, errorMsg: 'Not authenticated' }, 'object');
|
|
29
|
+
}
|
|
@@ -1,94 +1,94 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
const buildType = process.config.target_defaults.default_configuration;
|
|
3
|
-
const assert = require('assert');
|
|
4
|
-
|
|
5
|
-
// These tests ensure that Error types can be used in a terminating
|
|
6
|
-
// environment without triggering any fatal errors.
|
|
7
|
-
|
|
8
|
-
if (process.argv[2] === 'runInChildProcess') {
|
|
9
|
-
const binding_path = process.argv[3];
|
|
10
|
-
const index_for_test_case = Number(process.argv[4]);
|
|
11
|
-
|
|
12
|
-
const binding = require(binding_path);
|
|
13
|
-
|
|
14
|
-
// Use C++ promises to ensure the worker thread is terminated right
|
|
15
|
-
// before running the testable code in the binding.
|
|
16
|
-
|
|
17
|
-
binding.error.resetPromises()
|
|
18
|
-
|
|
19
|
-
const { Worker } = require('worker_threads');
|
|
20
|
-
|
|
21
|
-
const worker = new Worker(
|
|
22
|
-
__filename,
|
|
23
|
-
{
|
|
24
|
-
argv: [
|
|
25
|
-
'runInWorkerThread',
|
|
26
|
-
binding_path,
|
|
27
|
-
index_for_test_case,
|
|
28
|
-
]
|
|
29
|
-
}
|
|
30
|
-
);
|
|
31
|
-
|
|
32
|
-
binding.error.waitForWorkerThread()
|
|
33
|
-
|
|
34
|
-
worker.terminate();
|
|
35
|
-
|
|
36
|
-
binding.error.releaseWorkerThread()
|
|
37
|
-
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (process.argv[2] === 'runInWorkerThread') {
|
|
42
|
-
const binding_path = process.argv[3];
|
|
43
|
-
const index_for_test_case = Number(process.argv[4]);
|
|
44
|
-
|
|
45
|
-
const binding = require(binding_path);
|
|
46
|
-
|
|
47
|
-
switch (index_for_test_case) {
|
|
48
|
-
case 0:
|
|
49
|
-
binding.error.throwJSError('test', true);
|
|
50
|
-
break;
|
|
51
|
-
case 1:
|
|
52
|
-
binding.error.throwTypeError('test', true);
|
|
53
|
-
break;
|
|
54
|
-
case 2:
|
|
55
|
-
binding.error.throwRangeError('test', true);
|
|
56
|
-
break;
|
|
57
|
-
case 3:
|
|
58
|
-
binding.error.throwDefaultError(false, true);
|
|
59
|
-
break;
|
|
60
|
-
case 4:
|
|
61
|
-
binding.error.throwDefaultError(true, true);
|
|
62
|
-
break;
|
|
63
|
-
default: assert.fail('Invalid index');
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
assert.fail('This should not be reachable');
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
test(`./build/${buildType}/binding.node`, true);
|
|
70
|
-
test(`./build/${buildType}/binding_noexcept.node`, true);
|
|
71
|
-
test(`./build/${buildType}/binding_swallowexcept.node`, false);
|
|
72
|
-
test(`./build/${buildType}/binding_swallowexcept_noexcept.node`, false);
|
|
73
|
-
|
|
74
|
-
function test(bindingPath, process_should_abort) {
|
|
75
|
-
const number_of_test_cases = 5;
|
|
76
|
-
|
|
77
|
-
for (let i = 0; i < number_of_test_cases; ++i) {
|
|
78
|
-
const child_process = require('./napi_child').spawnSync(
|
|
79
|
-
process.execPath,
|
|
80
|
-
[
|
|
81
|
-
__filename,
|
|
82
|
-
'runInChildProcess',
|
|
83
|
-
bindingPath,
|
|
84
|
-
i,
|
|
85
|
-
]
|
|
86
|
-
);
|
|
87
|
-
|
|
88
|
-
if (process_should_abort) {
|
|
89
|
-
assert(child_process.status !== 0, `Test case ${bindingPath} ${i} failed: Process exited with status code 0.`);
|
|
90
|
-
} else {
|
|
91
|
-
assert(child_process.status === 0, `Test case ${bindingPath} ${i} failed: Process status ${child_process.status} is non-zero`);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
1
|
+
'use strict';
|
|
2
|
+
const buildType = process.config.target_defaults.default_configuration;
|
|
3
|
+
const assert = require('assert');
|
|
4
|
+
|
|
5
|
+
// These tests ensure that Error types can be used in a terminating
|
|
6
|
+
// environment without triggering any fatal errors.
|
|
7
|
+
|
|
8
|
+
if (process.argv[2] === 'runInChildProcess') {
|
|
9
|
+
const binding_path = process.argv[3];
|
|
10
|
+
const index_for_test_case = Number(process.argv[4]);
|
|
11
|
+
|
|
12
|
+
const binding = require(binding_path);
|
|
13
|
+
|
|
14
|
+
// Use C++ promises to ensure the worker thread is terminated right
|
|
15
|
+
// before running the testable code in the binding.
|
|
16
|
+
|
|
17
|
+
binding.error.resetPromises()
|
|
18
|
+
|
|
19
|
+
const { Worker } = require('worker_threads');
|
|
20
|
+
|
|
21
|
+
const worker = new Worker(
|
|
22
|
+
__filename,
|
|
23
|
+
{
|
|
24
|
+
argv: [
|
|
25
|
+
'runInWorkerThread',
|
|
26
|
+
binding_path,
|
|
27
|
+
index_for_test_case,
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
binding.error.waitForWorkerThread()
|
|
33
|
+
|
|
34
|
+
worker.terminate();
|
|
35
|
+
|
|
36
|
+
binding.error.releaseWorkerThread()
|
|
37
|
+
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (process.argv[2] === 'runInWorkerThread') {
|
|
42
|
+
const binding_path = process.argv[3];
|
|
43
|
+
const index_for_test_case = Number(process.argv[4]);
|
|
44
|
+
|
|
45
|
+
const binding = require(binding_path);
|
|
46
|
+
|
|
47
|
+
switch (index_for_test_case) {
|
|
48
|
+
case 0:
|
|
49
|
+
binding.error.throwJSError('test', true);
|
|
50
|
+
break;
|
|
51
|
+
case 1:
|
|
52
|
+
binding.error.throwTypeError('test', true);
|
|
53
|
+
break;
|
|
54
|
+
case 2:
|
|
55
|
+
binding.error.throwRangeError('test', true);
|
|
56
|
+
break;
|
|
57
|
+
case 3:
|
|
58
|
+
binding.error.throwDefaultError(false, true);
|
|
59
|
+
break;
|
|
60
|
+
case 4:
|
|
61
|
+
binding.error.throwDefaultError(true, true);
|
|
62
|
+
break;
|
|
63
|
+
default: assert.fail('Invalid index');
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
assert.fail('This should not be reachable');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
test(`./build/${buildType}/binding.node`, true);
|
|
70
|
+
test(`./build/${buildType}/binding_noexcept.node`, true);
|
|
71
|
+
test(`./build/${buildType}/binding_swallowexcept.node`, false);
|
|
72
|
+
test(`./build/${buildType}/binding_swallowexcept_noexcept.node`, false);
|
|
73
|
+
|
|
74
|
+
function test(bindingPath, process_should_abort) {
|
|
75
|
+
const number_of_test_cases = 5;
|
|
76
|
+
|
|
77
|
+
for (let i = 0; i < number_of_test_cases; ++i) {
|
|
78
|
+
const child_process = require('./napi_child').spawnSync(
|
|
79
|
+
process.execPath,
|
|
80
|
+
[
|
|
81
|
+
__filename,
|
|
82
|
+
'runInChildProcess',
|
|
83
|
+
bindingPath,
|
|
84
|
+
i,
|
|
85
|
+
]
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
if (process_should_abort) {
|
|
89
|
+
assert(child_process.status !== 0, `Test case ${bindingPath} ${i} failed: Process exited with status code 0.`);
|
|
90
|
+
} else {
|
|
91
|
+
assert(child_process.status === 0, `Test case ${bindingPath} ${i} failed: Process status ${child_process.status} is non-zero`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
#include "napi.h"
|
|
2
|
-
|
|
3
|
-
using namespace Napi;
|
|
4
|
-
|
|
5
|
-
namespace {
|
|
6
|
-
|
|
7
|
-
int testData = 1;
|
|
8
|
-
int finalizeCount = 0;
|
|
9
|
-
|
|
10
|
-
Value CreateExternal(const CallbackInfo& info) {
|
|
11
|
-
finalizeCount = 0;
|
|
12
|
-
return External<int>::New(info.Env(), &testData);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
Value CreateExternalWithFinalize(const CallbackInfo& info) {
|
|
16
|
-
finalizeCount = 0;
|
|
17
|
-
return External<int>::New(info.Env(), new int(1),
|
|
18
|
-
[](Env /*env*/, int* data) {
|
|
19
|
-
delete data;
|
|
20
|
-
finalizeCount++;
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
Value CreateExternalWithFinalizeHint(const CallbackInfo& info) {
|
|
25
|
-
finalizeCount = 0;
|
|
26
|
-
char* hint = nullptr;
|
|
27
|
-
return External<int>::New(info.Env(), new int(1),
|
|
28
|
-
[](Env /*env*/, int* data, char* /*hint*/) {
|
|
29
|
-
delete data;
|
|
30
|
-
finalizeCount++;
|
|
31
|
-
},
|
|
32
|
-
hint);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
void CheckExternal(const CallbackInfo& info) {
|
|
36
|
-
Value arg = info[0];
|
|
37
|
-
if (arg.Type() != napi_external) {
|
|
38
|
-
Error::New(info.Env(), "An external argument was expected.").ThrowAsJavaScriptException();
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
External<int> external = arg.As<External<int>>();
|
|
43
|
-
int* externalData = external.Data();
|
|
44
|
-
if (externalData == nullptr || *externalData != 1) {
|
|
45
|
-
Error::New(info.Env(), "An external value of 1 was expected.").ThrowAsJavaScriptException();
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
Value GetFinalizeCount(const CallbackInfo& info) {
|
|
51
|
-
return Number::New(info.Env(), finalizeCount);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
Value CreateExternalWithFinalizeException(const CallbackInfo& info) {
|
|
55
|
-
return External<int>::New(info.Env(), new int(1),
|
|
56
|
-
[](Env env, int* data) {
|
|
57
|
-
Error error = Error::New(env, "Finalizer exception");
|
|
58
|
-
delete data;
|
|
59
|
-
#ifdef NAPI_CPP_EXCEPTIONS
|
|
60
|
-
throw error;
|
|
61
|
-
#else
|
|
62
|
-
error.ThrowAsJavaScriptException();
|
|
63
|
-
#endif
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
} // end anonymous namespace
|
|
68
|
-
|
|
69
|
-
Object InitExternal(Env env) {
|
|
70
|
-
Object exports = Object::New(env);
|
|
71
|
-
|
|
72
|
-
exports["createExternal"] = Function::New(env, CreateExternal);
|
|
73
|
-
exports["createExternalWithFinalize"] = Function::New(env, CreateExternalWithFinalize);
|
|
74
|
-
exports["createExternalWithFinalizeException"] =
|
|
75
|
-
Function::New(env, CreateExternalWithFinalizeException);
|
|
76
|
-
exports["createExternalWithFinalizeHint"] = Function::New(env, CreateExternalWithFinalizeHint);
|
|
77
|
-
exports["checkExternal"] = Function::New(env, CheckExternal);
|
|
78
|
-
exports["getFinalizeCount"] = Function::New(env, GetFinalizeCount);
|
|
79
|
-
|
|
80
|
-
return exports;
|
|
81
|
-
}
|
|
1
|
+
#include "napi.h"
|
|
2
|
+
|
|
3
|
+
using namespace Napi;
|
|
4
|
+
|
|
5
|
+
namespace {
|
|
6
|
+
|
|
7
|
+
int testData = 1;
|
|
8
|
+
int finalizeCount = 0;
|
|
9
|
+
|
|
10
|
+
Value CreateExternal(const CallbackInfo& info) {
|
|
11
|
+
finalizeCount = 0;
|
|
12
|
+
return External<int>::New(info.Env(), &testData);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
Value CreateExternalWithFinalize(const CallbackInfo& info) {
|
|
16
|
+
finalizeCount = 0;
|
|
17
|
+
return External<int>::New(info.Env(), new int(1),
|
|
18
|
+
[](Env /*env*/, int* data) {
|
|
19
|
+
delete data;
|
|
20
|
+
finalizeCount++;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
Value CreateExternalWithFinalizeHint(const CallbackInfo& info) {
|
|
25
|
+
finalizeCount = 0;
|
|
26
|
+
char* hint = nullptr;
|
|
27
|
+
return External<int>::New(info.Env(), new int(1),
|
|
28
|
+
[](Env /*env*/, int* data, char* /*hint*/) {
|
|
29
|
+
delete data;
|
|
30
|
+
finalizeCount++;
|
|
31
|
+
},
|
|
32
|
+
hint);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
void CheckExternal(const CallbackInfo& info) {
|
|
36
|
+
Value arg = info[0];
|
|
37
|
+
if (arg.Type() != napi_external) {
|
|
38
|
+
Error::New(info.Env(), "An external argument was expected.").ThrowAsJavaScriptException();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
External<int> external = arg.As<External<int>>();
|
|
43
|
+
int* externalData = external.Data();
|
|
44
|
+
if (externalData == nullptr || *externalData != 1) {
|
|
45
|
+
Error::New(info.Env(), "An external value of 1 was expected.").ThrowAsJavaScriptException();
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
Value GetFinalizeCount(const CallbackInfo& info) {
|
|
51
|
+
return Number::New(info.Env(), finalizeCount);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
Value CreateExternalWithFinalizeException(const CallbackInfo& info) {
|
|
55
|
+
return External<int>::New(info.Env(), new int(1),
|
|
56
|
+
[](Env env, int* data) {
|
|
57
|
+
Error error = Error::New(env, "Finalizer exception");
|
|
58
|
+
delete data;
|
|
59
|
+
#ifdef NAPI_CPP_EXCEPTIONS
|
|
60
|
+
throw error;
|
|
61
|
+
#else
|
|
62
|
+
error.ThrowAsJavaScriptException();
|
|
63
|
+
#endif
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
} // end anonymous namespace
|
|
68
|
+
|
|
69
|
+
Object InitExternal(Env env) {
|
|
70
|
+
Object exports = Object::New(env);
|
|
71
|
+
|
|
72
|
+
exports["createExternal"] = Function::New(env, CreateExternal);
|
|
73
|
+
exports["createExternalWithFinalize"] = Function::New(env, CreateExternalWithFinalize);
|
|
74
|
+
exports["createExternalWithFinalizeException"] =
|
|
75
|
+
Function::New(env, CreateExternalWithFinalizeException);
|
|
76
|
+
exports["createExternalWithFinalizeHint"] = Function::New(env, CreateExternalWithFinalizeHint);
|
|
77
|
+
exports["checkExternal"] = Function::New(env, CheckExternal);
|
|
78
|
+
exports["getFinalizeCount"] = Function::New(env, GetFinalizeCount);
|
|
79
|
+
|
|
80
|
+
return exports;
|
|
81
|
+
}
|