koffi 1.1.0-beta.1 → 1.1.0-beta.2
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 +4 -0
- package/README.md +12 -11
- package/build/qemu/1.1.0-beta.2/koffi_darwin_x64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.2/koffi_freebsd_arm64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.2/koffi_freebsd_ia32.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.2/koffi_freebsd_x64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.2/koffi_linux_arm.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.2/koffi_linux_arm64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.2/koffi_linux_ia32.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.2/koffi_linux_x64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.2/koffi_win32_ia32.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.2/koffi_win32_x64.tar.gz +0 -0
- package/package.json +1 -1
- package/qemu/qemu.js +1 -0
- package/src/abi_arm32.cc +27 -45
- package/src/abi_arm64.cc +58 -132
- package/src/abi_x64_sysv.cc +24 -7
- package/src/abi_x64_win.cc +3 -0
- package/src/abi_x86.cc +3 -0
- package/src/call.cc +540 -33
- package/src/call.hh +5 -3
- package/src/ffi.cc +66 -2
- package/src/ffi.hh +3 -1
- package/src/parser.cc +4 -0
- package/src/util.cc +72 -0
- package/src/util.hh +2 -0
- package/test/misc.c +14 -8
- package/vendor/node-addon-api/CODE_OF_CONDUCT.md +4 -0
- package/vendor/node-addon-api/CONTRIBUTING.md +93 -0
- package/vendor/node-addon-api/appveyor.yml +37 -0
- package/vendor/node-addon-api/benchmark/README.md +47 -0
- package/vendor/node-addon-api/benchmark/binding.gyp +25 -0
- package/vendor/node-addon-api/benchmark/function_args.cc +217 -0
- package/vendor/node-addon-api/benchmark/function_args.js +60 -0
- package/vendor/node-addon-api/benchmark/index.js +34 -0
- package/vendor/node-addon-api/benchmark/property_descriptor.cc +91 -0
- package/vendor/node-addon-api/benchmark/property_descriptor.js +37 -0
- package/vendor/node-addon-api/doc/addon.md +163 -0
- package/vendor/node-addon-api/doc/array.md +81 -0
- package/vendor/node-addon-api/doc/array_buffer.md +155 -0
- package/vendor/node-addon-api/doc/async_context.md +86 -0
- package/vendor/node-addon-api/doc/async_operations.md +31 -0
- package/vendor/node-addon-api/doc/async_worker.md +427 -0
- package/vendor/node-addon-api/doc/async_worker_variants.md +557 -0
- package/vendor/node-addon-api/doc/bigint.md +97 -0
- package/vendor/node-addon-api/doc/boolean.md +68 -0
- package/vendor/node-addon-api/doc/buffer.md +150 -0
- package/vendor/node-addon-api/doc/callback_scope.md +54 -0
- package/vendor/node-addon-api/doc/callbackinfo.md +97 -0
- package/vendor/node-addon-api/doc/checker-tool.md +32 -0
- package/vendor/node-addon-api/doc/class_property_descriptor.md +123 -0
- package/vendor/node-addon-api/doc/cmake-js.md +68 -0
- package/vendor/node-addon-api/doc/conversion-tool.md +28 -0
- package/vendor/node-addon-api/doc/creating_a_release.md +62 -0
- package/vendor/node-addon-api/doc/dataview.md +248 -0
- package/vendor/node-addon-api/doc/date.md +68 -0
- package/vendor/node-addon-api/doc/env.md +196 -0
- package/vendor/node-addon-api/doc/error.md +120 -0
- package/vendor/node-addon-api/doc/error_handling.md +254 -0
- package/vendor/node-addon-api/doc/escapable_handle_scope.md +80 -0
- package/vendor/node-addon-api/doc/external.md +63 -0
- package/vendor/node-addon-api/doc/function.md +402 -0
- package/vendor/node-addon-api/doc/function_reference.md +238 -0
- package/vendor/node-addon-api/doc/generator.md +13 -0
- package/vendor/node-addon-api/doc/handle_scope.md +63 -0
- package/vendor/node-addon-api/doc/hierarchy.md +91 -0
- package/vendor/node-addon-api/doc/instance_wrap.md +408 -0
- package/vendor/node-addon-api/doc/maybe.md +76 -0
- package/vendor/node-addon-api/doc/memory_management.md +27 -0
- package/vendor/node-addon-api/doc/name.md +29 -0
- package/vendor/node-addon-api/doc/node-gyp.md +82 -0
- package/vendor/node-addon-api/doc/number.md +163 -0
- package/vendor/node-addon-api/doc/object.md +411 -0
- package/vendor/node-addon-api/doc/object_lifetime_management.md +83 -0
- package/vendor/node-addon-api/doc/object_reference.md +117 -0
- package/vendor/node-addon-api/doc/object_wrap.md +588 -0
- package/vendor/node-addon-api/doc/prebuild_tools.md +16 -0
- package/vendor/node-addon-api/doc/promises.md +79 -0
- package/vendor/node-addon-api/doc/property_descriptor.md +286 -0
- package/vendor/node-addon-api/doc/propertylvalue.md +50 -0
- package/vendor/node-addon-api/doc/range_error.md +59 -0
- package/vendor/node-addon-api/doc/reference.md +113 -0
- package/vendor/node-addon-api/doc/setup.md +110 -0
- package/vendor/node-addon-api/doc/string.md +93 -0
- package/vendor/node-addon-api/doc/symbol.md +61 -0
- package/vendor/node-addon-api/doc/threadsafe.md +121 -0
- package/vendor/node-addon-api/doc/threadsafe_function.md +290 -0
- package/vendor/node-addon-api/doc/type_error.md +59 -0
- package/vendor/node-addon-api/doc/typed_array.md +78 -0
- package/vendor/node-addon-api/doc/typed_array_of.md +137 -0
- package/vendor/node-addon-api/doc/typed_threadsafe_function.md +306 -0
- package/vendor/node-addon-api/doc/value.md +340 -0
- package/vendor/node-addon-api/doc/version_management.md +43 -0
- package/vendor/node-addon-api/package.json +415 -0
- package/vendor/node-addon-api/test/README.md +91 -0
- package/vendor/node-addon-api/test/addon.cc +36 -0
- package/vendor/node-addon-api/test/addon.js +11 -0
- package/vendor/node-addon-api/test/addon_build/index.js +49 -0
- package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +17 -0
- package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +62 -0
- package/vendor/node-addon-api/test/addon_build/tpl/index.js +9 -0
- package/vendor/node-addon-api/test/addon_build/tpl/package.json +11 -0
- package/vendor/node-addon-api/test/addon_data.cc +99 -0
- package/vendor/node-addon-api/test/addon_data.js +46 -0
- package/vendor/node-addon-api/test/array_buffer.cc +243 -0
- package/vendor/node-addon-api/test/array_buffer.js +69 -0
- package/vendor/node-addon-api/test/async_context.cc +36 -0
- package/vendor/node-addon-api/test/async_context.js +122 -0
- package/vendor/node-addon-api/test/async_progress_queue_worker.cc +83 -0
- package/vendor/node-addon-api/test/async_progress_queue_worker.js +46 -0
- package/vendor/node-addon-api/test/async_progress_worker.cc +134 -0
- package/vendor/node-addon-api/test/async_progress_worker.js +61 -0
- package/vendor/node-addon-api/test/async_worker.cc +106 -0
- package/vendor/node-addon-api/test/async_worker.js +179 -0
- package/vendor/node-addon-api/test/async_worker_nocallback.js +13 -0
- package/vendor/node-addon-api/test/async_worker_persistent.cc +63 -0
- package/vendor/node-addon-api/test/async_worker_persistent.js +24 -0
- package/vendor/node-addon-api/test/basic_types/array.cc +40 -0
- package/vendor/node-addon-api/test/basic_types/array.js +35 -0
- package/vendor/node-addon-api/test/basic_types/boolean.cc +38 -0
- package/vendor/node-addon-api/test/basic_types/boolean.js +35 -0
- package/vendor/node-addon-api/test/basic_types/number.cc +99 -0
- package/vendor/node-addon-api/test/basic_types/number.js +114 -0
- package/vendor/node-addon-api/test/basic_types/value.cc +120 -0
- package/vendor/node-addon-api/test/basic_types/value.js +133 -0
- package/vendor/node-addon-api/test/bigint.cc +91 -0
- package/vendor/node-addon-api/test/bigint.js +53 -0
- package/vendor/node-addon-api/test/binding-swallowexcept.cc +12 -0
- package/vendor/node-addon-api/test/binding.cc +173 -0
- package/vendor/node-addon-api/test/binding.gyp +124 -0
- package/vendor/node-addon-api/test/buffer.cc +183 -0
- package/vendor/node-addon-api/test/buffer.js +69 -0
- package/vendor/node-addon-api/test/callbackscope.cc +22 -0
- package/vendor/node-addon-api/test/callbackscope.js +49 -0
- package/vendor/node-addon-api/test/common/index.js +114 -0
- package/vendor/node-addon-api/test/common/test_helper.h +71 -0
- package/vendor/node-addon-api/test/dataview/dataview.cc +48 -0
- package/vendor/node-addon-api/test/dataview/dataview.js +35 -0
- package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +115 -0
- package/vendor/node-addon-api/test/dataview/dataview_read_write.js +90 -0
- package/vendor/node-addon-api/test/date.cc +44 -0
- package/vendor/node-addon-api/test/date.js +18 -0
- package/vendor/node-addon-api/test/env_cleanup.cc +88 -0
- package/vendor/node-addon-api/test/env_cleanup.js +56 -0
- package/vendor/node-addon-api/test/error.cc +287 -0
- package/vendor/node-addon-api/test/error.js +81 -0
- package/vendor/node-addon-api/test/error_handling_for_primitives.cc +13 -0
- package/vendor/node-addon-api/test/error_handling_for_primitives.js +29 -0
- package/vendor/node-addon-api/test/error_terminating_environment.js +95 -0
- package/vendor/node-addon-api/test/external.cc +81 -0
- package/vendor/node-addon-api/test/external.js +88 -0
- package/vendor/node-addon-api/test/function.cc +324 -0
- package/vendor/node-addon-api/test/function.js +133 -0
- package/vendor/node-addon-api/test/function_reference.cc +202 -0
- package/vendor/node-addon-api/test/function_reference.js +157 -0
- package/vendor/node-addon-api/test/globalObject/global_object.cc +61 -0
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +31 -0
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +61 -0
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +40 -0
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +57 -0
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +28 -0
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +48 -0
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +31 -0
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +58 -0
- package/vendor/node-addon-api/test/handlescope.cc +60 -0
- package/vendor/node-addon-api/test/handlescope.js +14 -0
- package/vendor/node-addon-api/test/index.js +159 -0
- package/vendor/node-addon-api/test/maybe/check.cc +23 -0
- package/vendor/node-addon-api/test/maybe/index.js +38 -0
- package/vendor/node-addon-api/test/memory_management.cc +17 -0
- package/vendor/node-addon-api/test/memory_management.js +9 -0
- package/vendor/node-addon-api/test/movable_callbacks.cc +23 -0
- package/vendor/node-addon-api/test/movable_callbacks.js +21 -0
- package/vendor/node-addon-api/test/name.cc +108 -0
- package/vendor/node-addon-api/test/name.js +59 -0
- package/vendor/node-addon-api/test/napi_child.js +14 -0
- package/vendor/node-addon-api/test/object/delete_property.cc +38 -0
- package/vendor/node-addon-api/test/object/delete_property.js +41 -0
- package/vendor/node-addon-api/test/object/finalizer.cc +29 -0
- package/vendor/node-addon-api/test/object/finalizer.js +28 -0
- package/vendor/node-addon-api/test/object/get_property.cc +34 -0
- package/vendor/node-addon-api/test/object/get_property.js +40 -0
- package/vendor/node-addon-api/test/object/has_own_property.cc +34 -0
- package/vendor/node-addon-api/test/object/has_own_property.js +34 -0
- package/vendor/node-addon-api/test/object/has_property.cc +38 -0
- package/vendor/node-addon-api/test/object/has_property.js +37 -0
- package/vendor/node-addon-api/test/object/object.cc +350 -0
- package/vendor/node-addon-api/test/object/object.js +217 -0
- package/vendor/node-addon-api/test/object/object_deprecated.cc +66 -0
- package/vendor/node-addon-api/test/object/object_deprecated.js +47 -0
- package/vendor/node-addon-api/test/object/object_freeze_seal.cc +25 -0
- package/vendor/node-addon-api/test/object/object_freeze_seal.js +61 -0
- package/vendor/node-addon-api/test/object/set_property.cc +45 -0
- package/vendor/node-addon-api/test/object/set_property.js +30 -0
- package/vendor/node-addon-api/test/object/subscript_operator.cc +58 -0
- package/vendor/node-addon-api/test/object/subscript_operator.js +17 -0
- package/vendor/node-addon-api/test/object_reference.cc +219 -0
- package/vendor/node-addon-api/test/object_reference.js +259 -0
- package/vendor/node-addon-api/test/objectwrap.cc +268 -0
- package/vendor/node-addon-api/test/objectwrap.js +284 -0
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +26 -0
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +18 -0
- package/vendor/node-addon-api/test/objectwrap_function.cc +45 -0
- package/vendor/node-addon-api/test/objectwrap_function.js +22 -0
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +30 -0
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +13 -0
- package/vendor/node-addon-api/test/objectwrap_removewrap.cc +45 -0
- package/vendor/node-addon-api/test/objectwrap_removewrap.js +40 -0
- package/vendor/node-addon-api/test/objectwrap_worker_thread.js +19 -0
- package/vendor/node-addon-api/test/promise.cc +29 -0
- package/vendor/node-addon-api/test/promise.js +18 -0
- package/vendor/node-addon-api/test/reference.cc +24 -0
- package/vendor/node-addon-api/test/reference.js +14 -0
- package/vendor/node-addon-api/test/run_script.cc +56 -0
- package/vendor/node-addon-api/test/run_script.js +45 -0
- package/vendor/node-addon-api/test/symbol.cc +79 -0
- package/vendor/node-addon-api/test/symbol.js +73 -0
- package/vendor/node-addon-api/test/testUtil.js +54 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +195 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +188 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +63 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +12 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +115 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +14 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +26 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +7 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +225 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +59 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +42 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +53 -0
- package/vendor/node-addon-api/test/thunking_manual.cc +140 -0
- package/vendor/node-addon-api/test/thunking_manual.js +17 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +215 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +188 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +68 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +12 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +127 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +14 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +28 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +7 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +237 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +59 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +53 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +53 -0
- package/vendor/node-addon-api/test/typedarray-bigint.js +58 -0
- package/vendor/node-addon-api/test/typedarray.cc +216 -0
- package/vendor/node-addon-api/test/typedarray.js +69 -0
- package/vendor/node-addon-api/test/version_management.cc +27 -0
- package/vendor/node-addon-api/test/version_management.js +31 -0
- package/vendor/node-addon-api/unit-test/README.md +28 -0
- package/vendor/node-addon-api/unit-test/binding-file-template.js +39 -0
- package/vendor/node-addon-api/unit-test/binding.gyp +72 -0
- package/vendor/node-addon-api/unit-test/exceptions.js +32 -0
- package/vendor/node-addon-api/unit-test/generate-binding-cc.js +61 -0
- package/vendor/node-addon-api/unit-test/injectTestParams.js +101 -0
- package/vendor/node-addon-api/unit-test/listOfTestModules.js +88 -0
- package/vendor/node-addon-api/unit-test/matchModules.js +65 -0
- package/vendor/node-addon-api/unit-test/setup.js +13 -0
- package/vendor/node-addon-api/unit-test/spawnTask.js +26 -0
- package/vendor/node-addon-api/unit-test/test.js +30 -0
- package/build/qemu/1.1.0-beta.1/koffi_darwin_x64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.1/koffi_freebsd_arm64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.1/koffi_freebsd_ia32.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.1/koffi_freebsd_x64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.1/koffi_linux_arm.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.1/koffi_linux_arm64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.1/koffi_linux_ia32.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.1/koffi_linux_x64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.1/koffi_win32_ia32.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.1/koffi_win32_x64.tar.gz +0 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#if (NAPI_VERSION > 5)
|
|
2
|
+
|
|
3
|
+
#define NAPI_EXPERIMENTAL
|
|
4
|
+
#include "napi.h"
|
|
5
|
+
|
|
6
|
+
#include "test_helper.h"
|
|
7
|
+
|
|
8
|
+
using namespace Napi;
|
|
9
|
+
|
|
10
|
+
namespace {
|
|
11
|
+
|
|
12
|
+
Value IsLossless(const CallbackInfo& info) {
|
|
13
|
+
Env env = info.Env();
|
|
14
|
+
|
|
15
|
+
BigInt big = info[0].As<BigInt>();
|
|
16
|
+
bool is_signed = MaybeUnwrap(info[1].ToBoolean()).Value();
|
|
17
|
+
|
|
18
|
+
bool lossless;
|
|
19
|
+
if (is_signed) {
|
|
20
|
+
big.Int64Value(&lossless);
|
|
21
|
+
} else {
|
|
22
|
+
big.Uint64Value(&lossless);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return Boolean::New(env, lossless);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
Value IsBigInt(const CallbackInfo& info) {
|
|
29
|
+
Env env = info.Env();
|
|
30
|
+
|
|
31
|
+
BigInt big = info[0].As<BigInt>();
|
|
32
|
+
|
|
33
|
+
return Boolean::New(env, big.IsBigInt());
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
Value TestInt64(const CallbackInfo& info) {
|
|
37
|
+
bool lossless;
|
|
38
|
+
int64_t input = info[0].As<BigInt>().Int64Value(&lossless);
|
|
39
|
+
|
|
40
|
+
return BigInt::New(info.Env(), input);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
Value TestUint64(const CallbackInfo& info) {
|
|
44
|
+
bool lossless;
|
|
45
|
+
uint64_t input = info[0].As<BigInt>().Uint64Value(&lossless);
|
|
46
|
+
|
|
47
|
+
return BigInt::New(info.Env(), input);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
Value TestWords(const CallbackInfo& info) {
|
|
51
|
+
BigInt big = info[0].As<BigInt>();
|
|
52
|
+
|
|
53
|
+
size_t expected_word_count = big.WordCount();
|
|
54
|
+
|
|
55
|
+
int sign_bit;
|
|
56
|
+
size_t word_count = 10;
|
|
57
|
+
uint64_t words[10] = {0};
|
|
58
|
+
|
|
59
|
+
big.ToWords(&sign_bit, &word_count, words);
|
|
60
|
+
|
|
61
|
+
if (word_count != expected_word_count) {
|
|
62
|
+
Error::New(info.Env(), "word count did not match").ThrowAsJavaScriptException();
|
|
63
|
+
return BigInt();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return BigInt::New(info.Env(), sign_bit, word_count, words);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
Value TestTooBigBigInt(const CallbackInfo& info) {
|
|
70
|
+
int sign_bit = 0;
|
|
71
|
+
size_t word_count = SIZE_MAX;
|
|
72
|
+
uint64_t words[10] = {0};
|
|
73
|
+
|
|
74
|
+
return BigInt::New(info.Env(), sign_bit, word_count, words);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
} // anonymous namespace
|
|
78
|
+
|
|
79
|
+
Object InitBigInt(Env env) {
|
|
80
|
+
Object exports = Object::New(env);
|
|
81
|
+
exports["IsLossless"] = Function::New(env, IsLossless);
|
|
82
|
+
exports["IsBigInt"] = Function::New(env, IsBigInt);
|
|
83
|
+
exports["TestInt64"] = Function::New(env, TestInt64);
|
|
84
|
+
exports["TestUint64"] = Function::New(env, TestUint64);
|
|
85
|
+
exports["TestWords"] = Function::New(env, TestWords);
|
|
86
|
+
exports["TestTooBigBigInt"] = Function::New(env, TestTooBigBigInt);
|
|
87
|
+
|
|
88
|
+
return exports;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
#endif
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const assert = require('assert');
|
|
4
|
+
|
|
5
|
+
module.exports = require('./common').runTest(test);
|
|
6
|
+
|
|
7
|
+
function test (binding) {
|
|
8
|
+
const {
|
|
9
|
+
TestInt64,
|
|
10
|
+
TestUint64,
|
|
11
|
+
TestWords,
|
|
12
|
+
IsLossless,
|
|
13
|
+
IsBigInt,
|
|
14
|
+
TestTooBigBigInt
|
|
15
|
+
} = binding.bigint;
|
|
16
|
+
|
|
17
|
+
[
|
|
18
|
+
0n,
|
|
19
|
+
-0n,
|
|
20
|
+
1n,
|
|
21
|
+
-1n,
|
|
22
|
+
100n,
|
|
23
|
+
2121n,
|
|
24
|
+
-1233n,
|
|
25
|
+
986583n,
|
|
26
|
+
-976675n,
|
|
27
|
+
98765432213456789876546896323445679887645323232436587988766545658n,
|
|
28
|
+
-4350987086545760976737453646576078997096876957864353245245769809n
|
|
29
|
+
].forEach((num) => {
|
|
30
|
+
if (num > -(2n ** 63n) && num < 2n ** 63n) {
|
|
31
|
+
assert.strictEqual(TestInt64(num), num);
|
|
32
|
+
assert.strictEqual(IsLossless(num, true), true);
|
|
33
|
+
} else {
|
|
34
|
+
assert.strictEqual(IsLossless(num, true), false);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (num >= 0 && num < 2n ** 64n) {
|
|
38
|
+
assert.strictEqual(TestUint64(num), num);
|
|
39
|
+
assert.strictEqual(IsLossless(num, false), true);
|
|
40
|
+
} else {
|
|
41
|
+
assert.strictEqual(IsLossless(num, false), false);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
assert.strictEqual(IsBigInt(num), true);
|
|
45
|
+
|
|
46
|
+
assert.strictEqual(num, TestWords(num));
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
assert.throws(TestTooBigBigInt, {
|
|
50
|
+
name: /^(RangeError|Error)$/,
|
|
51
|
+
message: /^(Maximum BigInt size exceeded|Invalid argument)$/
|
|
52
|
+
});
|
|
53
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
#include "napi.h"
|
|
2
|
+
|
|
3
|
+
using namespace Napi;
|
|
4
|
+
|
|
5
|
+
#if (NAPI_VERSION > 5)
|
|
6
|
+
Object InitAddon(Env env);
|
|
7
|
+
Object InitAddonData(Env env);
|
|
8
|
+
#endif
|
|
9
|
+
Object InitArrayBuffer(Env env);
|
|
10
|
+
Object InitAsyncContext(Env env);
|
|
11
|
+
#if (NAPI_VERSION > 3)
|
|
12
|
+
Object InitAsyncProgressQueueWorker(Env env);
|
|
13
|
+
Object InitAsyncProgressWorker(Env env);
|
|
14
|
+
#endif
|
|
15
|
+
Object InitAsyncWorker(Env env);
|
|
16
|
+
Object InitPersistentAsyncWorker(Env env);
|
|
17
|
+
Object InitBasicTypesArray(Env env);
|
|
18
|
+
Object InitBasicTypesBoolean(Env env);
|
|
19
|
+
Object InitBasicTypesNumber(Env env);
|
|
20
|
+
Object InitBasicTypesValue(Env env);
|
|
21
|
+
#if (NAPI_VERSION > 5)
|
|
22
|
+
Object InitBigInt(Env env);
|
|
23
|
+
#endif
|
|
24
|
+
Object InitBuffer(Env env);
|
|
25
|
+
#if (NAPI_VERSION > 2)
|
|
26
|
+
Object InitCallbackScope(Env env);
|
|
27
|
+
#endif
|
|
28
|
+
#if (NAPI_VERSION > 4)
|
|
29
|
+
Object InitDate(Env env);
|
|
30
|
+
#endif
|
|
31
|
+
Object InitDataView(Env env);
|
|
32
|
+
Object InitDataViewReadWrite(Env env);
|
|
33
|
+
Object InitEnvCleanup(Env env);
|
|
34
|
+
Object InitErrorHandlingPrim(Env env);
|
|
35
|
+
Object InitError(Env env);
|
|
36
|
+
Object InitExternal(Env env);
|
|
37
|
+
Object InitFunction(Env env);
|
|
38
|
+
Object InitFunctionReference(Env env);
|
|
39
|
+
Object InitHandleScope(Env env);
|
|
40
|
+
Object InitMovableCallbacks(Env env);
|
|
41
|
+
Object InitMemoryManagement(Env env);
|
|
42
|
+
Object InitName(Env env);
|
|
43
|
+
Object InitObject(Env env);
|
|
44
|
+
#ifndef NODE_ADDON_API_DISABLE_DEPRECATED
|
|
45
|
+
Object InitObjectDeprecated(Env env);
|
|
46
|
+
#endif // !NODE_ADDON_API_DISABLE_DEPRECATED
|
|
47
|
+
Object InitPromise(Env env);
|
|
48
|
+
Object InitRunScript(Env env);
|
|
49
|
+
#if (NAPI_VERSION > 3)
|
|
50
|
+
Object InitThreadSafeFunctionCtx(Env env);
|
|
51
|
+
Object InitThreadSafeFunctionExistingTsfn(Env env);
|
|
52
|
+
Object InitThreadSafeFunctionPtr(Env env);
|
|
53
|
+
Object InitThreadSafeFunctionSum(Env env);
|
|
54
|
+
Object InitThreadSafeFunctionUnref(Env env);
|
|
55
|
+
Object InitThreadSafeFunction(Env env);
|
|
56
|
+
Object InitTypedThreadSafeFunctionCtx(Env env);
|
|
57
|
+
Object InitTypedThreadSafeFunctionExistingTsfn(Env env);
|
|
58
|
+
Object InitTypedThreadSafeFunctionPtr(Env env);
|
|
59
|
+
Object InitTypedThreadSafeFunctionSum(Env env);
|
|
60
|
+
Object InitTypedThreadSafeFunctionUnref(Env env);
|
|
61
|
+
Object InitTypedThreadSafeFunction(Env env);
|
|
62
|
+
#endif
|
|
63
|
+
Object InitSymbol(Env env);
|
|
64
|
+
Object InitTypedArray(Env env);
|
|
65
|
+
Object InitGlobalObject(Env env);
|
|
66
|
+
Object InitObjectWrap(Env env);
|
|
67
|
+
Object InitObjectWrapConstructorException(Env env);
|
|
68
|
+
Object InitObjectWrapFunction(Env env);
|
|
69
|
+
Object InitObjectWrapRemoveWrap(Env env);
|
|
70
|
+
Object InitObjectWrapMultipleInheritance(Env env);
|
|
71
|
+
Object InitObjectReference(Env env);
|
|
72
|
+
Object InitReference(Env env);
|
|
73
|
+
Object InitVersionManagement(Env env);
|
|
74
|
+
Object InitThunkingManual(Env env);
|
|
75
|
+
#if (NAPI_VERSION > 7)
|
|
76
|
+
Object InitObjectFreezeSeal(Env env);
|
|
77
|
+
#endif
|
|
78
|
+
|
|
79
|
+
#if defined(NODE_ADDON_API_ENABLE_MAYBE)
|
|
80
|
+
Object InitMaybeCheck(Env env);
|
|
81
|
+
#endif
|
|
82
|
+
|
|
83
|
+
Object Init(Env env, Object exports) {
|
|
84
|
+
#if (NAPI_VERSION > 5)
|
|
85
|
+
exports.Set("addon", InitAddon(env));
|
|
86
|
+
exports.Set("addon_data", InitAddonData(env));
|
|
87
|
+
#endif
|
|
88
|
+
exports.Set("arraybuffer", InitArrayBuffer(env));
|
|
89
|
+
exports.Set("asynccontext", InitAsyncContext(env));
|
|
90
|
+
#if (NAPI_VERSION > 3)
|
|
91
|
+
exports.Set("asyncprogressqueueworker", InitAsyncProgressQueueWorker(env));
|
|
92
|
+
exports.Set("asyncprogressworker", InitAsyncProgressWorker(env));
|
|
93
|
+
#endif
|
|
94
|
+
exports.Set("globalObject", InitGlobalObject(env));
|
|
95
|
+
exports.Set("asyncworker", InitAsyncWorker(env));
|
|
96
|
+
exports.Set("persistentasyncworker", InitPersistentAsyncWorker(env));
|
|
97
|
+
exports.Set("basic_types_array", InitBasicTypesArray(env));
|
|
98
|
+
exports.Set("basic_types_boolean", InitBasicTypesBoolean(env));
|
|
99
|
+
exports.Set("basic_types_number", InitBasicTypesNumber(env));
|
|
100
|
+
exports.Set("basic_types_value", InitBasicTypesValue(env));
|
|
101
|
+
#if (NAPI_VERSION > 5)
|
|
102
|
+
exports.Set("bigint", InitBigInt(env));
|
|
103
|
+
#endif
|
|
104
|
+
#if (NAPI_VERSION > 4)
|
|
105
|
+
exports.Set("date", InitDate(env));
|
|
106
|
+
#endif
|
|
107
|
+
exports.Set("buffer", InitBuffer(env));
|
|
108
|
+
#if (NAPI_VERSION > 2)
|
|
109
|
+
exports.Set("callbackscope", InitCallbackScope(env));
|
|
110
|
+
#endif
|
|
111
|
+
exports.Set("dataview", InitDataView(env));
|
|
112
|
+
exports.Set("dataview_read_write", InitDataView(env));
|
|
113
|
+
exports.Set("dataview_read_write", InitDataViewReadWrite(env));
|
|
114
|
+
#if (NAPI_VERSION > 2)
|
|
115
|
+
exports.Set("env_cleanup", InitEnvCleanup(env));
|
|
116
|
+
#endif
|
|
117
|
+
exports.Set("error", InitError(env));
|
|
118
|
+
exports.Set("errorHandlingPrim", InitErrorHandlingPrim(env));
|
|
119
|
+
exports.Set("external", InitExternal(env));
|
|
120
|
+
exports.Set("function", InitFunction(env));
|
|
121
|
+
exports.Set("functionreference", InitFunctionReference(env));
|
|
122
|
+
exports.Set("name", InitName(env));
|
|
123
|
+
exports.Set("handlescope", InitHandleScope(env));
|
|
124
|
+
exports.Set("movable_callbacks", InitMovableCallbacks(env));
|
|
125
|
+
exports.Set("memory_management", InitMemoryManagement(env));
|
|
126
|
+
exports.Set("object", InitObject(env));
|
|
127
|
+
#ifndef NODE_ADDON_API_DISABLE_DEPRECATED
|
|
128
|
+
exports.Set("object_deprecated", InitObjectDeprecated(env));
|
|
129
|
+
#endif // !NODE_ADDON_API_DISABLE_DEPRECATED
|
|
130
|
+
exports.Set("promise", InitPromise(env));
|
|
131
|
+
exports.Set("run_script", InitRunScript(env));
|
|
132
|
+
exports.Set("symbol", InitSymbol(env));
|
|
133
|
+
#if (NAPI_VERSION > 3)
|
|
134
|
+
exports.Set("threadsafe_function_ctx", InitThreadSafeFunctionCtx(env));
|
|
135
|
+
exports.Set("threadsafe_function_existing_tsfn", InitThreadSafeFunctionExistingTsfn(env));
|
|
136
|
+
exports.Set("threadsafe_function_ptr", InitThreadSafeFunctionPtr(env));
|
|
137
|
+
exports.Set("threadsafe_function_sum", InitThreadSafeFunctionSum(env));
|
|
138
|
+
exports.Set("threadsafe_function_unref", InitThreadSafeFunctionUnref(env));
|
|
139
|
+
exports.Set("threadsafe_function", InitThreadSafeFunction(env));
|
|
140
|
+
exports.Set("typed_threadsafe_function_ctx",
|
|
141
|
+
InitTypedThreadSafeFunctionCtx(env));
|
|
142
|
+
exports.Set("typed_threadsafe_function_existing_tsfn",
|
|
143
|
+
InitTypedThreadSafeFunctionExistingTsfn(env));
|
|
144
|
+
exports.Set("typed_threadsafe_function_ptr",
|
|
145
|
+
InitTypedThreadSafeFunctionPtr(env));
|
|
146
|
+
exports.Set("typed_threadsafe_function_sum",
|
|
147
|
+
InitTypedThreadSafeFunctionSum(env));
|
|
148
|
+
exports.Set("typed_threadsafe_function_unref",
|
|
149
|
+
InitTypedThreadSafeFunctionUnref(env));
|
|
150
|
+
exports.Set("typed_threadsafe_function", InitTypedThreadSafeFunction(env));
|
|
151
|
+
#endif
|
|
152
|
+
exports.Set("typedarray", InitTypedArray(env));
|
|
153
|
+
exports.Set("objectwrap", InitObjectWrap(env));
|
|
154
|
+
exports.Set("objectwrapConstructorException",
|
|
155
|
+
InitObjectWrapConstructorException(env));
|
|
156
|
+
exports.Set("objectwrap_function", InitObjectWrapFunction(env));
|
|
157
|
+
exports.Set("objectwrap_removewrap", InitObjectWrapRemoveWrap(env));
|
|
158
|
+
exports.Set("objectwrap_multiple_inheritance", InitObjectWrapMultipleInheritance(env));
|
|
159
|
+
exports.Set("objectreference", InitObjectReference(env));
|
|
160
|
+
exports.Set("reference", InitReference(env));
|
|
161
|
+
exports.Set("version_management", InitVersionManagement(env));
|
|
162
|
+
exports.Set("thunking_manual", InitThunkingManual(env));
|
|
163
|
+
#if (NAPI_VERSION > 7)
|
|
164
|
+
exports.Set("object_freeze_seal", InitObjectFreezeSeal(env));
|
|
165
|
+
#endif
|
|
166
|
+
|
|
167
|
+
#if defined(NODE_ADDON_API_ENABLE_MAYBE)
|
|
168
|
+
exports.Set("maybe_check", InitMaybeCheck(env));
|
|
169
|
+
#endif
|
|
170
|
+
return exports;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
NODE_API_MODULE(addon, Init)
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
{
|
|
2
|
+
'target_defaults': {
|
|
3
|
+
'includes': ['../common.gypi'],
|
|
4
|
+
'include_dirs': ['./common'],
|
|
5
|
+
'variables': {
|
|
6
|
+
'build_sources': [
|
|
7
|
+
'addon.cc',
|
|
8
|
+
'addon_data.cc',
|
|
9
|
+
'array_buffer.cc',
|
|
10
|
+
'async_context.cc',
|
|
11
|
+
'async_progress_queue_worker.cc',
|
|
12
|
+
'async_progress_worker.cc',
|
|
13
|
+
'async_worker.cc',
|
|
14
|
+
'async_worker_persistent.cc',
|
|
15
|
+
'basic_types/array.cc',
|
|
16
|
+
'basic_types/boolean.cc',
|
|
17
|
+
'basic_types/number.cc',
|
|
18
|
+
'basic_types/value.cc',
|
|
19
|
+
'bigint.cc',
|
|
20
|
+
'date.cc',
|
|
21
|
+
'binding.cc',
|
|
22
|
+
'buffer.cc',
|
|
23
|
+
'callbackscope.cc',
|
|
24
|
+
'dataview/dataview.cc',
|
|
25
|
+
'dataview/dataview_read_write.cc',
|
|
26
|
+
'env_cleanup.cc',
|
|
27
|
+
'error.cc',
|
|
28
|
+
'error_handling_for_primitives.cc',
|
|
29
|
+
'external.cc',
|
|
30
|
+
'function.cc',
|
|
31
|
+
'function_reference.cc',
|
|
32
|
+
'handlescope.cc',
|
|
33
|
+
'maybe/check.cc',
|
|
34
|
+
'movable_callbacks.cc',
|
|
35
|
+
'memory_management.cc',
|
|
36
|
+
'name.cc',
|
|
37
|
+
'globalObject/global_object_delete_property.cc',
|
|
38
|
+
'globalObject/global_object_has_own_property.cc',
|
|
39
|
+
'globalObject/global_object_set_property.cc',
|
|
40
|
+
'globalObject/global_object_get_property.cc',
|
|
41
|
+
'globalObject/global_object.cc',
|
|
42
|
+
'object/delete_property.cc',
|
|
43
|
+
'object/finalizer.cc',
|
|
44
|
+
'object/get_property.cc',
|
|
45
|
+
'object/has_own_property.cc',
|
|
46
|
+
'object/has_property.cc',
|
|
47
|
+
'object/object.cc',
|
|
48
|
+
'object/object_freeze_seal.cc',
|
|
49
|
+
'object/set_property.cc',
|
|
50
|
+
'object/subscript_operator.cc',
|
|
51
|
+
'promise.cc',
|
|
52
|
+
'run_script.cc',
|
|
53
|
+
"symbol.cc",
|
|
54
|
+
'threadsafe_function/threadsafe_function_ctx.cc',
|
|
55
|
+
'threadsafe_function/threadsafe_function_existing_tsfn.cc',
|
|
56
|
+
'threadsafe_function/threadsafe_function_ptr.cc',
|
|
57
|
+
'threadsafe_function/threadsafe_function_sum.cc',
|
|
58
|
+
'threadsafe_function/threadsafe_function_unref.cc',
|
|
59
|
+
'threadsafe_function/threadsafe_function.cc',
|
|
60
|
+
'typed_threadsafe_function/typed_threadsafe_function_ctx.cc',
|
|
61
|
+
'typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc',
|
|
62
|
+
'typed_threadsafe_function/typed_threadsafe_function_ptr.cc',
|
|
63
|
+
'typed_threadsafe_function/typed_threadsafe_function_sum.cc',
|
|
64
|
+
'typed_threadsafe_function/typed_threadsafe_function_unref.cc',
|
|
65
|
+
'typed_threadsafe_function/typed_threadsafe_function.cc',
|
|
66
|
+
'typedarray.cc',
|
|
67
|
+
'objectwrap.cc',
|
|
68
|
+
'objectwrap_constructor_exception.cc',
|
|
69
|
+
'objectwrap_function.cc',
|
|
70
|
+
'objectwrap_removewrap.cc',
|
|
71
|
+
'objectwrap_multiple_inheritance.cc',
|
|
72
|
+
'object_reference.cc',
|
|
73
|
+
'reference.cc',
|
|
74
|
+
'version_management.cc',
|
|
75
|
+
'thunking_manual.cc',
|
|
76
|
+
],
|
|
77
|
+
'build_sources_swallowexcept': [
|
|
78
|
+
'binding-swallowexcept.cc',
|
|
79
|
+
'error.cc',
|
|
80
|
+
],
|
|
81
|
+
'conditions': [
|
|
82
|
+
['disable_deprecated!="true"', {
|
|
83
|
+
'build_sources': ['object/object_deprecated.cc']
|
|
84
|
+
}]
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
'targets': [
|
|
89
|
+
{
|
|
90
|
+
'target_name': 'binding',
|
|
91
|
+
'includes': ['../except.gypi'],
|
|
92
|
+
'sources': ['>@(build_sources)']
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
'target_name': 'binding_noexcept',
|
|
96
|
+
'includes': ['../noexcept.gypi'],
|
|
97
|
+
'sources': ['>@(build_sources)']
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
'target_name': 'binding_noexcept_maybe',
|
|
101
|
+
'includes': ['../noexcept.gypi'],
|
|
102
|
+
'sources': ['>@(build_sources)'],
|
|
103
|
+
'defines': ['NODE_ADDON_API_ENABLE_MAYBE']
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
'target_name': 'binding_swallowexcept',
|
|
107
|
+
'includes': ['../except.gypi'],
|
|
108
|
+
'sources': [ '>@(build_sources_swallowexcept)'],
|
|
109
|
+
'defines': ['NODE_API_SWALLOW_UNTHROWABLE_EXCEPTIONS']
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
'target_name': 'binding_swallowexcept_noexcept',
|
|
113
|
+
'includes': ['../noexcept.gypi'],
|
|
114
|
+
'sources': ['>@(build_sources_swallowexcept)'],
|
|
115
|
+
'defines': ['NODE_API_SWALLOW_UNTHROWABLE_EXCEPTIONS']
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
'target_name': 'binding_custom_namespace',
|
|
119
|
+
'includes': ['../noexcept.gypi'],
|
|
120
|
+
'sources': ['>@(build_sources)'],
|
|
121
|
+
'defines': ['NAPI_CPP_CUSTOM_NAMESPACE=cstm']
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
#include "napi.h"
|
|
2
|
+
|
|
3
|
+
using namespace Napi;
|
|
4
|
+
|
|
5
|
+
namespace {
|
|
6
|
+
|
|
7
|
+
const size_t testLength = 4;
|
|
8
|
+
uint16_t testData[testLength];
|
|
9
|
+
int finalizeCount = 0;
|
|
10
|
+
|
|
11
|
+
template <typename T>
|
|
12
|
+
void InitData(T* data, size_t length) {
|
|
13
|
+
for (size_t i = 0; i < length; i++) {
|
|
14
|
+
data[i] = static_cast<T>(i);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
template <typename T>
|
|
19
|
+
bool VerifyData(T* data, size_t length) {
|
|
20
|
+
for (size_t i = 0; i < length; i++) {
|
|
21
|
+
if (data[i] != static_cast<T>(i)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
Value CreateBuffer(const CallbackInfo& info) {
|
|
29
|
+
Buffer<uint16_t> buffer = Buffer<uint16_t>::New(info.Env(), testLength);
|
|
30
|
+
|
|
31
|
+
if (buffer.Length() != testLength) {
|
|
32
|
+
Error::New(info.Env(), "Incorrect buffer length.").ThrowAsJavaScriptException();
|
|
33
|
+
return Value();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
InitData(buffer.Data(), testLength);
|
|
37
|
+
return buffer;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
Value CreateExternalBuffer(const CallbackInfo& info) {
|
|
41
|
+
finalizeCount = 0;
|
|
42
|
+
|
|
43
|
+
Buffer<uint16_t> buffer = Buffer<uint16_t>::New(
|
|
44
|
+
info.Env(),
|
|
45
|
+
testData,
|
|
46
|
+
testLength);
|
|
47
|
+
|
|
48
|
+
if (buffer.Length() != testLength) {
|
|
49
|
+
Error::New(info.Env(), "Incorrect buffer length.").ThrowAsJavaScriptException();
|
|
50
|
+
return Value();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (buffer.Data() != testData) {
|
|
54
|
+
Error::New(info.Env(), "Incorrect buffer data.").ThrowAsJavaScriptException();
|
|
55
|
+
return Value();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
InitData(testData, testLength);
|
|
59
|
+
return buffer;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
Value CreateExternalBufferWithFinalize(const CallbackInfo& info) {
|
|
63
|
+
finalizeCount = 0;
|
|
64
|
+
|
|
65
|
+
uint16_t* data = new uint16_t[testLength];
|
|
66
|
+
|
|
67
|
+
Buffer<uint16_t> buffer = Buffer<uint16_t>::New(
|
|
68
|
+
info.Env(),
|
|
69
|
+
data,
|
|
70
|
+
testLength,
|
|
71
|
+
[](Env /*env*/, uint16_t* finalizeData) {
|
|
72
|
+
delete[] finalizeData;
|
|
73
|
+
finalizeCount++;
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
if (buffer.Length() != testLength) {
|
|
77
|
+
Error::New(info.Env(), "Incorrect buffer length.").ThrowAsJavaScriptException();
|
|
78
|
+
return Value();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (buffer.Data() != data) {
|
|
82
|
+
Error::New(info.Env(), "Incorrect buffer data.").ThrowAsJavaScriptException();
|
|
83
|
+
return Value();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
InitData(data, testLength);
|
|
87
|
+
return buffer;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
Value CreateExternalBufferWithFinalizeHint(const CallbackInfo& info) {
|
|
91
|
+
finalizeCount = 0;
|
|
92
|
+
|
|
93
|
+
uint16_t* data = new uint16_t[testLength];
|
|
94
|
+
|
|
95
|
+
char* hint = nullptr;
|
|
96
|
+
Buffer<uint16_t> buffer = Buffer<uint16_t>::New(
|
|
97
|
+
info.Env(),
|
|
98
|
+
data,
|
|
99
|
+
testLength,
|
|
100
|
+
[](Env /*env*/, uint16_t* finalizeData, char* /*finalizeHint*/) {
|
|
101
|
+
delete[] finalizeData;
|
|
102
|
+
finalizeCount++;
|
|
103
|
+
},
|
|
104
|
+
hint);
|
|
105
|
+
|
|
106
|
+
if (buffer.Length() != testLength) {
|
|
107
|
+
Error::New(info.Env(), "Incorrect buffer length.").ThrowAsJavaScriptException();
|
|
108
|
+
return Value();
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (buffer.Data() != data) {
|
|
112
|
+
Error::New(info.Env(), "Incorrect buffer data.").ThrowAsJavaScriptException();
|
|
113
|
+
return Value();
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
InitData(data, testLength);
|
|
117
|
+
return buffer;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
Value CreateBufferCopy(const CallbackInfo& info) {
|
|
121
|
+
InitData(testData, testLength);
|
|
122
|
+
|
|
123
|
+
Buffer<uint16_t> buffer = Buffer<uint16_t>::Copy(
|
|
124
|
+
info.Env(), testData, testLength);
|
|
125
|
+
|
|
126
|
+
if (buffer.Length() != testLength) {
|
|
127
|
+
Error::New(info.Env(), "Incorrect buffer length.").ThrowAsJavaScriptException();
|
|
128
|
+
return Value();
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (buffer.Data() == testData) {
|
|
132
|
+
Error::New(info.Env(), "Copy should have different memory.").ThrowAsJavaScriptException();
|
|
133
|
+
return Value();
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (!VerifyData(buffer.Data(), buffer.Length())) {
|
|
137
|
+
Error::New(info.Env(), "Copy data is incorrect.").ThrowAsJavaScriptException();
|
|
138
|
+
return Value();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return buffer;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
void CheckBuffer(const CallbackInfo& info) {
|
|
145
|
+
if (!info[0].IsBuffer()) {
|
|
146
|
+
Error::New(info.Env(), "A buffer was expected.").ThrowAsJavaScriptException();
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
Buffer<uint16_t> buffer = info[0].As<Buffer<uint16_t>>();
|
|
151
|
+
|
|
152
|
+
if (buffer.Length() != testLength) {
|
|
153
|
+
Error::New(info.Env(), "Incorrect buffer length.").ThrowAsJavaScriptException();
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (!VerifyData(buffer.Data(), testLength)) {
|
|
158
|
+
Error::New(info.Env(), "Incorrect buffer data.").ThrowAsJavaScriptException();
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
Value GetFinalizeCount(const CallbackInfo& info) {
|
|
164
|
+
return Number::New(info.Env(), finalizeCount);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
} // end anonymous namespace
|
|
168
|
+
|
|
169
|
+
Object InitBuffer(Env env) {
|
|
170
|
+
Object exports = Object::New(env);
|
|
171
|
+
|
|
172
|
+
exports["createBuffer"] = Function::New(env, CreateBuffer);
|
|
173
|
+
exports["createExternalBuffer"] = Function::New(env, CreateExternalBuffer);
|
|
174
|
+
exports["createExternalBufferWithFinalize"] =
|
|
175
|
+
Function::New(env, CreateExternalBufferWithFinalize);
|
|
176
|
+
exports["createExternalBufferWithFinalizeHint"] =
|
|
177
|
+
Function::New(env, CreateExternalBufferWithFinalizeHint);
|
|
178
|
+
exports["createBufferCopy"] = Function::New(env, CreateBufferCopy);
|
|
179
|
+
exports["checkBuffer"] = Function::New(env, CheckBuffer);
|
|
180
|
+
exports["getFinalizeCount"] = Function::New(env, GetFinalizeCount);
|
|
181
|
+
|
|
182
|
+
return exports;
|
|
183
|
+
}
|