koffi 2.3.4 → 2.3.6-beta.1
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/CHANGELOG.md +25 -2
- package/doc/changelog.md +4 -0
- package/doc/index.rst +1 -2
- package/doc/types.md +3 -3
- package/package.json +5 -5
- package/src/cnoke/cnoke.js +40 -834
- package/src/cnoke/package.json +1 -0
- package/src/cnoke/src/builder.js +447 -0
- package/src/cnoke/src/index.js +20 -0
- package/src/cnoke/src/tools.js +401 -0
- package/src/core/libcc/libcc.cc +2 -2
- package/src/koffi/build/2.3.6-beta.1/koffi_darwin_arm64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_darwin_x64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_freebsd_arm64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_freebsd_ia32/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_freebsd_x64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_linux_arm32hf/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_linux_arm64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_linux_ia32/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_linux_riscv64hf64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_linux_x64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_openbsd_ia32/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_openbsd_x64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_arm64/koffi.exp +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_arm64/koffi.lib +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_arm64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_arm64/koffi.pdb +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_ia32/koffi.exp +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_ia32/koffi.lib +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_ia32/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_ia32/koffi.pdb +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_x64/koffi.exp +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_x64/koffi.lib +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_x64/koffi.node +0 -0
- package/src/koffi/build/2.3.6-beta.1/koffi_win32_x64/koffi.pdb +0 -0
- package/src/koffi/src/abi_arm32.cc +43 -14
- package/src/koffi/src/abi_arm64.cc +95 -21
- package/src/koffi/src/abi_riscv64.cc +125 -64
- package/src/koffi/src/abi_x64_sysv.cc +38 -20
- package/src/koffi/src/abi_x64_win.cc +11 -5
- package/src/koffi/src/abi_x86.cc +14 -7
- package/src/koffi/src/call.cc +114 -44
- package/src/koffi/src/call.hh +6 -4
- package/src/koffi/src/ffi.cc +172 -147
- package/src/koffi/src/ffi.hh +18 -10
- package/src/koffi/src/index.d.ts +28 -7
- package/src/koffi/src/index.js +23 -4
- package/src/koffi/src/util.cc +261 -69
- package/src/koffi/src/util.hh +34 -8
- package/vendor/node-addon-api/CHANGELOG.md +122 -9
- package/vendor/node-addon-api/CONTRIBUTING.md +10 -10
- package/vendor/node-addon-api/README.md +36 -12
- package/vendor/node-addon-api/benchmark/function_args.cc +95 -62
- package/vendor/node-addon-api/benchmark/function_args.js +6 -6
- package/vendor/node-addon-api/benchmark/index.js +1 -1
- package/vendor/node-addon-api/benchmark/property_descriptor.cc +27 -34
- package/vendor/node-addon-api/benchmark/property_descriptor.js +5 -4
- package/vendor/node-addon-api/doc/async_operations.md +1 -1
- package/vendor/node-addon-api/doc/async_worker_variants.md +23 -2
- package/vendor/node-addon-api/doc/cmake-js.md +1 -1
- package/vendor/node-addon-api/doc/error_handling.md +3 -3
- package/vendor/node-addon-api/doc/external.md +7 -0
- package/vendor/node-addon-api/doc/handle_scope.md +14 -0
- package/vendor/node-addon-api/doc/hierarchy.md +1 -1
- package/vendor/node-addon-api/doc/object.md +27 -0
- package/vendor/node-addon-api/index.js +3 -3
- package/vendor/node-addon-api/napi-inl.deprecated.h +121 -127
- package/vendor/node-addon-api/napi-inl.h +1178 -1144
- package/vendor/node-addon-api/napi.h +2786 -2675
- package/vendor/node-addon-api/package.json +42 -1
- package/vendor/node-addon-api/test/addon.cc +8 -6
- package/vendor/node-addon-api/test/addon_build/index.js +9 -9
- package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +2 -1
- package/vendor/node-addon-api/test/addon_build/tpl/index.js +4 -4
- package/vendor/node-addon-api/test/addon_data.cc +12 -13
- package/vendor/node-addon-api/test/array_buffer.js +3 -2
- package/vendor/node-addon-api/test/async_progress_queue_worker.cc +13 -3
- package/vendor/node-addon-api/test/async_progress_queue_worker.js +5 -5
- package/vendor/node-addon-api/test/async_progress_worker.cc +65 -9
- package/vendor/node-addon-api/test/async_progress_worker.js +14 -9
- package/vendor/node-addon-api/test/async_worker.cc +236 -3
- package/vendor/node-addon-api/test/async_worker.js +122 -37
- package/vendor/node-addon-api/test/async_worker_nocallback.js +9 -3
- package/vendor/node-addon-api/test/async_worker_persistent.js +2 -2
- package/vendor/node-addon-api/test/basic_types/array.js +3 -4
- package/vendor/node-addon-api/test/basic_types/boolean.cc +4 -2
- package/vendor/node-addon-api/test/basic_types/boolean.js +1 -2
- package/vendor/node-addon-api/test/basic_types/number.cc +12 -6
- package/vendor/node-addon-api/test/basic_types/number.js +19 -18
- package/vendor/node-addon-api/test/basic_types/value.cc +52 -1
- package/vendor/node-addon-api/test/basic_types/value.js +44 -21
- package/vendor/node-addon-api/test/bigint.cc +2 -1
- package/vendor/node-addon-api/test/binding.cc +11 -5
- package/vendor/node-addon-api/test/binding.gyp +3 -1
- package/vendor/node-addon-api/test/buffer.cc +46 -38
- package/vendor/node-addon-api/test/buffer.js +12 -12
- package/vendor/node-addon-api/test/callbackInfo.cc +27 -0
- package/vendor/node-addon-api/test/callbackInfo.js +9 -0
- package/vendor/node-addon-api/test/callbackscope.cc +19 -2
- package/vendor/node-addon-api/test/callbackscope.js +20 -20
- package/vendor/node-addon-api/test/common/index.js +37 -4
- package/vendor/node-addon-api/test/dataview/dataview.js +5 -5
- package/vendor/node-addon-api/test/dataview/dataview_read_write.js +14 -12
- package/vendor/node-addon-api/test/date.cc +2 -1
- package/vendor/node-addon-api/test/date.js +2 -2
- package/vendor/node-addon-api/test/env_cleanup.cc +12 -0
- package/vendor/node-addon-api/test/env_cleanup.js +38 -39
- package/vendor/node-addon-api/test/error.cc +6 -5
- package/vendor/node-addon-api/test/error_terminating_environment.js +64 -60
- package/vendor/node-addon-api/test/external.cc +36 -32
- package/vendor/node-addon-api/test/external.js +43 -46
- package/vendor/node-addon-api/test/function.cc +58 -44
- package/vendor/node-addon-api/test/function.js +4 -0
- package/vendor/node-addon-api/test/function_reference.cc +15 -13
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +50 -53
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +33 -34
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +38 -40
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +47 -49
- package/vendor/node-addon-api/test/handlescope.cc +29 -3
- package/vendor/node-addon-api/test/handlescope.js +5 -3
- package/vendor/node-addon-api/test/index.js +1 -5
- package/vendor/node-addon-api/test/maybe/check.cc +49 -3
- package/vendor/node-addon-api/test/maybe/index.js +19 -7
- package/vendor/node-addon-api/test/memory_management.cc +9 -8
- package/vendor/node-addon-api/test/memory_management.js +2 -2
- package/vendor/node-addon-api/test/movable_callbacks.js +2 -2
- package/vendor/node-addon-api/test/name.js +3 -3
- package/vendor/node-addon-api/test/napi_child.js +2 -2
- package/vendor/node-addon-api/test/object/delete_property.js +7 -7
- package/vendor/node-addon-api/test/object/finalizer.cc +13 -12
- package/vendor/node-addon-api/test/object/finalizer.js +2 -2
- package/vendor/node-addon-api/test/object/get_property.js +6 -6
- package/vendor/node-addon-api/test/object/has_own_property.js +3 -3
- package/vendor/node-addon-api/test/object/has_property.js +4 -4
- package/vendor/node-addon-api/test/object/object.cc +191 -111
- package/vendor/node-addon-api/test/object/object.js +53 -52
- package/vendor/node-addon-api/test/object/object_deprecated.cc +24 -20
- package/vendor/node-addon-api/test/object/object_deprecated.js +3 -8
- package/vendor/node-addon-api/test/object/object_freeze_seal.js +54 -54
- package/vendor/node-addon-api/test/object/object_type_tag.cc +39 -0
- package/vendor/node-addon-api/test/object/object_type_tag.js +55 -0
- package/vendor/node-addon-api/test/object/subscript_operator.js +2 -2
- package/vendor/node-addon-api/test/object_reference.js +100 -100
- package/vendor/node-addon-api/test/objectwrap.cc +41 -34
- package/vendor/node-addon-api/test/objectwrap.js +23 -19
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +5 -5
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +1 -1
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +7 -7
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +1 -1
- package/vendor/node-addon-api/test/objectwrap_removewrap.js +24 -32
- package/vendor/node-addon-api/test/objectwrap_worker_thread.js +5 -4
- package/vendor/node-addon-api/test/promise.cc +7 -0
- package/vendor/node-addon-api/test/promise.js +3 -1
- package/vendor/node-addon-api/test/reference.cc +1 -1
- package/vendor/node-addon-api/test/reference.js +2 -2
- package/vendor/node-addon-api/test/run_script.cc +1 -1
- package/vendor/node-addon-api/test/symbol.js +59 -66
- package/vendor/node-addon-api/test/testUtil.js +6 -6
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +64 -29
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +71 -34
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +111 -19
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +2 -1
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +36 -26
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +5 -5
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +3 -2
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +1 -1
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +47 -32
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +3 -3
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +22 -9
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +76 -31
- package/vendor/node-addon-api/test/thunking_manual.cc +61 -74
- package/vendor/node-addon-api/test/thunking_manual.js +6 -7
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +20 -20
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +19 -19
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +57 -5
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +2 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +5 -5
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +5 -1
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +4 -3
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +3 -3
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +14 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +76 -31
- package/vendor/node-addon-api/test/typedarray-bigint.js +2 -2
- package/vendor/node-addon-api/test/typedarray.cc +263 -70
- package/vendor/node-addon-api/test/typedarray.js +44 -10
- package/vendor/node-addon-api/test/version_management.cc +16 -15
- package/vendor/node-addon-api/test/version_management.js +18 -20
- package/vendor/node-addon-api/tools/check-napi.js +13 -14
- package/vendor/node-addon-api/tools/conversion.js +161 -169
- package/vendor/node-addon-api/tools/eslint-format.js +9 -1
- package/vendor/node-addon-api/unit-test/README.md +4 -4
- package/src/koffi/build/2.3.4/koffi_darwin_arm64.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_darwin_x64.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_freebsd_arm64.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_freebsd_ia32.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_freebsd_x64.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_linux_arm32hf.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_linux_arm64.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_linux_ia32.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_linux_riscv64hf64.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_linux_x64.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_openbsd_ia32.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_openbsd_x64.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_win32_arm64.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_win32_ia32.tar.gz +0 -0
- package/src/koffi/build/2.3.4/koffi_win32_x64.tar.gz +0 -0
|
@@ -14,66 +14,70 @@ Value CreateExternal(const CallbackInfo& info) {
|
|
|
14
14
|
|
|
15
15
|
Value CreateExternalWithFinalize(const CallbackInfo& info) {
|
|
16
16
|
finalizeCount = 0;
|
|
17
|
-
return External<int>::New(info.Env(), new int(1),
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
});
|
|
17
|
+
return External<int>::New(info.Env(), new int(1), [](Env /*env*/, int* data) {
|
|
18
|
+
delete data;
|
|
19
|
+
finalizeCount++;
|
|
20
|
+
});
|
|
22
21
|
}
|
|
23
22
|
|
|
24
23
|
Value CreateExternalWithFinalizeHint(const CallbackInfo& info) {
|
|
25
24
|
finalizeCount = 0;
|
|
26
25
|
char* hint = nullptr;
|
|
27
|
-
return External<int>::New(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
26
|
+
return External<int>::New(
|
|
27
|
+
info.Env(),
|
|
28
|
+
new int(1),
|
|
29
|
+
[](Env /*env*/, int* data, char* /*hint*/) {
|
|
30
|
+
delete data;
|
|
31
|
+
finalizeCount++;
|
|
32
|
+
},
|
|
33
|
+
hint);
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
void CheckExternal(const CallbackInfo& info) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
Value arg = info[0];
|
|
38
|
+
if (arg.Type() != napi_external) {
|
|
39
|
+
Error::New(info.Env(), "An external argument was expected.")
|
|
40
|
+
.ThrowAsJavaScriptException();
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
41
43
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
External<int> external = arg.As<External<int>>();
|
|
45
|
+
int* externalData = external.Data();
|
|
46
|
+
if (externalData == nullptr || *externalData != 1) {
|
|
47
|
+
Error::New(info.Env(), "An external value of 1 was expected.")
|
|
48
|
+
.ThrowAsJavaScriptException();
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
48
51
|
}
|
|
49
52
|
|
|
50
53
|
Value GetFinalizeCount(const CallbackInfo& info) {
|
|
51
|
-
|
|
54
|
+
return Number::New(info.Env(), finalizeCount);
|
|
52
55
|
}
|
|
53
56
|
|
|
54
57
|
Value CreateExternalWithFinalizeException(const CallbackInfo& info) {
|
|
55
|
-
return External<int>::New(info.Env(), new int(1),
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
delete data;
|
|
58
|
+
return External<int>::New(info.Env(), new int(1), [](Env env, int* data) {
|
|
59
|
+
Error error = Error::New(env, "Finalizer exception");
|
|
60
|
+
delete data;
|
|
59
61
|
#ifdef NAPI_CPP_EXCEPTIONS
|
|
60
|
-
|
|
62
|
+
throw error;
|
|
61
63
|
#else
|
|
62
64
|
error.ThrowAsJavaScriptException();
|
|
63
65
|
#endif
|
|
64
|
-
|
|
66
|
+
});
|
|
65
67
|
}
|
|
66
68
|
|
|
67
|
-
}
|
|
69
|
+
} // end anonymous namespace
|
|
68
70
|
|
|
69
71
|
Object InitExternal(Env env) {
|
|
70
72
|
Object exports = Object::New(env);
|
|
71
73
|
|
|
72
74
|
exports["createExternal"] = Function::New(env, CreateExternal);
|
|
73
|
-
exports["createExternalWithFinalize"] =
|
|
75
|
+
exports["createExternalWithFinalize"] =
|
|
76
|
+
Function::New(env, CreateExternalWithFinalize);
|
|
74
77
|
exports["createExternalWithFinalizeException"] =
|
|
75
78
|
Function::New(env, CreateExternalWithFinalizeException);
|
|
76
|
-
exports["createExternalWithFinalizeHint"] =
|
|
79
|
+
exports["createExternalWithFinalizeHint"] =
|
|
80
|
+
Function::New(env, CreateExternalWithFinalizeHint);
|
|
77
81
|
exports["checkExternal"] = Function::New(env, CheckExternal);
|
|
78
82
|
exports["getFinalizeCount"] = Function::New(env, GetFinalizeCount);
|
|
79
83
|
|
|
@@ -27,62 +27,59 @@ if (process.argv.length === 3) {
|
|
|
27
27
|
// exception is thrown from a native `SetImmediate()` we cannot catch it
|
|
28
28
|
// anywhere except in the process' `uncaughtException` handler.
|
|
29
29
|
let maxGCTries = 10;
|
|
30
|
-
(function gcInterval() {
|
|
30
|
+
(function gcInterval () {
|
|
31
31
|
global.gc();
|
|
32
32
|
if (!interval) {
|
|
33
33
|
interval = setInterval(gcInterval, 100);
|
|
34
34
|
} else if (--maxGCTries === 0) {
|
|
35
35
|
throw new Error('Timed out waiting for the gc to throw');
|
|
36
|
-
process.exit(1);
|
|
37
36
|
}
|
|
38
37
|
})();
|
|
38
|
+
} else {
|
|
39
|
+
module.exports = require('./common').runTestWithBindingPath(test);
|
|
39
40
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
module.exports = require('./common').runTestWithBindingPath(test);
|
|
44
|
-
|
|
45
|
-
function test(bindingPath) {
|
|
46
|
-
const binding = require(bindingPath);
|
|
41
|
+
function test (bindingPath) {
|
|
42
|
+
const binding = require(bindingPath);
|
|
47
43
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
44
|
+
const child = spawnSync(process.execPath, [
|
|
45
|
+
'--expose-gc', __filename, bindingPath
|
|
46
|
+
], { stdio: 'inherit' });
|
|
47
|
+
assert.strictEqual(child.status, 0);
|
|
48
|
+
assert.strictEqual(child.signal, null);
|
|
53
49
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
50
|
+
return testUtil.runGCTests([
|
|
51
|
+
'External without finalizer',
|
|
52
|
+
() => {
|
|
53
|
+
const test = binding.external.createExternal();
|
|
54
|
+
assert.strictEqual(typeof test, 'object');
|
|
55
|
+
binding.external.checkExternal(test);
|
|
56
|
+
assert.strictEqual(0, binding.external.getFinalizeCount());
|
|
57
|
+
},
|
|
58
|
+
() => {
|
|
59
|
+
assert.strictEqual(0, binding.external.getFinalizeCount());
|
|
60
|
+
},
|
|
65
61
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
62
|
+
'External with finalizer',
|
|
63
|
+
() => {
|
|
64
|
+
const test = binding.external.createExternalWithFinalize();
|
|
65
|
+
assert.strictEqual(typeof test, 'object');
|
|
66
|
+
binding.external.checkExternal(test);
|
|
67
|
+
assert.strictEqual(0, binding.external.getFinalizeCount());
|
|
68
|
+
},
|
|
69
|
+
() => {
|
|
70
|
+
assert.strictEqual(1, binding.external.getFinalizeCount());
|
|
71
|
+
},
|
|
76
72
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
73
|
+
'External with finalizer hint',
|
|
74
|
+
() => {
|
|
75
|
+
const test = binding.external.createExternalWithFinalizeHint();
|
|
76
|
+
assert.strictEqual(typeof test, 'object');
|
|
77
|
+
binding.external.checkExternal(test);
|
|
78
|
+
assert.strictEqual(0, binding.external.getFinalizeCount());
|
|
79
|
+
},
|
|
80
|
+
() => {
|
|
81
|
+
assert.strictEqual(1, binding.external.getFinalizeCount());
|
|
82
|
+
}
|
|
83
|
+
]);
|
|
84
|
+
}
|
|
88
85
|
}
|
|
@@ -60,13 +60,13 @@ Value CallWithArgs(const CallbackInfo& info) {
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
Value CallWithVector(const CallbackInfo& info) {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
63
|
+
Function func = info[0].As<Function>();
|
|
64
|
+
std::vector<napi_value> args;
|
|
65
|
+
args.reserve(3);
|
|
66
|
+
args.push_back(info[1]);
|
|
67
|
+
args.push_back(info[2]);
|
|
68
|
+
args.push_back(info[3]);
|
|
69
|
+
return MaybeUnwrap(func.Call(args));
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
Value CallWithVectorUsingCppWrapper(const CallbackInfo& info) {
|
|
@@ -101,21 +101,21 @@ Value CallWithReceiverAndCStyleArray(const CallbackInfo& info) {
|
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
Value CallWithReceiverAndArgs(const CallbackInfo& info) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
104
|
+
Function func = info[0].As<Function>();
|
|
105
|
+
Value receiver = info[1];
|
|
106
|
+
return MaybeUnwrap(func.Call(
|
|
107
|
+
receiver, std::initializer_list<napi_value>{info[2], info[3], info[4]}));
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
Value CallWithReceiverAndVector(const CallbackInfo& info) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
111
|
+
Function func = info[0].As<Function>();
|
|
112
|
+
Value receiver = info[1];
|
|
113
|
+
std::vector<napi_value> args;
|
|
114
|
+
args.reserve(3);
|
|
115
|
+
args.push_back(info[2]);
|
|
116
|
+
args.push_back(info[3]);
|
|
117
|
+
args.push_back(info[4]);
|
|
118
|
+
return MaybeUnwrap(func.Call(receiver, args));
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
Value CallWithReceiverAndVectorUsingCppWrapper(const CallbackInfo& info) {
|
|
@@ -130,25 +130,25 @@ Value CallWithReceiverAndVectorUsingCppWrapper(const CallbackInfo& info) {
|
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
Value CallWithInvalidReceiver(const CallbackInfo& info) {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
133
|
+
Function func = info[0].As<Function>();
|
|
134
|
+
return MaybeUnwrapOr(func.Call(Value(), std::initializer_list<napi_value>{}),
|
|
135
|
+
Value());
|
|
136
136
|
}
|
|
137
137
|
|
|
138
138
|
Value CallConstructorWithArgs(const CallbackInfo& info) {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
139
|
+
Function func = info[0].As<Function>();
|
|
140
|
+
return MaybeUnwrap(
|
|
141
|
+
func.New(std::initializer_list<napi_value>{info[1], info[2], info[3]}));
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
Value CallConstructorWithVector(const CallbackInfo& info) {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
145
|
+
Function func = info[0].As<Function>();
|
|
146
|
+
std::vector<napi_value> args;
|
|
147
|
+
args.reserve(3);
|
|
148
|
+
args.push_back(info[1]);
|
|
149
|
+
args.push_back(info[2]);
|
|
150
|
+
args.push_back(info[3]);
|
|
151
|
+
return MaybeUnwrap(func.New(args));
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
Value CallConstructorWithCStyleArray(const CallbackInfo& info) {
|
|
@@ -162,9 +162,13 @@ Value CallConstructorWithCStyleArray(const CallbackInfo& info) {
|
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
void IsConstructCall(const CallbackInfo& info) {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
165
|
+
Function callback = info[0].As<Function>();
|
|
166
|
+
bool isConstructCall = info.IsConstructCall();
|
|
167
|
+
callback({Napi::Boolean::New(info.Env(), isConstructCall)});
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
Value NewTargetCallback(const CallbackInfo& info) {
|
|
171
|
+
return info.NewTarget();
|
|
168
172
|
}
|
|
169
173
|
|
|
170
174
|
void MakeCallbackWithArgs(const CallbackInfo& info) {
|
|
@@ -220,18 +224,21 @@ Value CallWithFunctionOperator(const CallbackInfo& info) {
|
|
|
220
224
|
return MaybeUnwrap(func({info[1], info[2], info[3]}));
|
|
221
225
|
}
|
|
222
226
|
|
|
223
|
-
}
|
|
227
|
+
} // end anonymous namespace
|
|
224
228
|
|
|
225
229
|
Object InitFunction(Env env) {
|
|
226
230
|
Object result = Object::New(env);
|
|
227
231
|
Object exports = Object::New(env);
|
|
228
232
|
exports["emptyConstructor"] = Function::New(env, EmptyConstructor);
|
|
229
233
|
exports["voidCallback"] = Function::New(env, VoidCallback, "voidCallback");
|
|
230
|
-
exports["valueCallback"] =
|
|
234
|
+
exports["valueCallback"] =
|
|
235
|
+
Function::New(env, ValueCallback, std::string("valueCallback"));
|
|
231
236
|
exports["voidCallbackWithData"] =
|
|
232
|
-
|
|
237
|
+
Function::New(env, VoidCallbackWithData, nullptr, &testData);
|
|
233
238
|
exports["valueCallbackWithData"] =
|
|
234
|
-
|
|
239
|
+
Function::New(env, ValueCallbackWithData, nullptr, &testData);
|
|
240
|
+
exports["newTargetCallback"] =
|
|
241
|
+
Function::New(env, NewTargetCallback, std::string("newTargetCallback"));
|
|
235
242
|
exports["callWithArgs"] = Function::New(env, CallWithArgs);
|
|
236
243
|
exports["callWithVector"] = Function::New(env, CallWithVector);
|
|
237
244
|
exports["callWithVectorUsingCppWrapper"] =
|
|
@@ -239,13 +246,18 @@ Object InitFunction(Env env) {
|
|
|
239
246
|
exports["callWithCStyleArray"] = Function::New(env, CallWithCStyleArray);
|
|
240
247
|
exports["callWithReceiverAndCStyleArray"] =
|
|
241
248
|
Function::New(env, CallWithReceiverAndCStyleArray);
|
|
242
|
-
exports["callWithReceiverAndArgs"] =
|
|
243
|
-
|
|
249
|
+
exports["callWithReceiverAndArgs"] =
|
|
250
|
+
Function::New(env, CallWithReceiverAndArgs);
|
|
251
|
+
exports["callWithReceiverAndVector"] =
|
|
252
|
+
Function::New(env, CallWithReceiverAndVector);
|
|
244
253
|
exports["callWithReceiverAndVectorUsingCppWrapper"] =
|
|
245
254
|
Function::New(env, CallWithReceiverAndVectorUsingCppWrapper);
|
|
246
|
-
exports["callWithInvalidReceiver"] =
|
|
247
|
-
|
|
248
|
-
exports["
|
|
255
|
+
exports["callWithInvalidReceiver"] =
|
|
256
|
+
Function::New(env, CallWithInvalidReceiver);
|
|
257
|
+
exports["callConstructorWithArgs"] =
|
|
258
|
+
Function::New(env, CallConstructorWithArgs);
|
|
259
|
+
exports["callConstructorWithVector"] =
|
|
260
|
+
Function::New(env, CallConstructorWithVector);
|
|
249
261
|
exports["callConstructorWithCStyleArray"] =
|
|
250
262
|
Function::New(env, CallConstructorWithCStyleArray);
|
|
251
263
|
exports["isConstructCall"] = Function::New(env, IsConstructCall);
|
|
@@ -265,6 +277,8 @@ Object InitFunction(Env env) {
|
|
|
265
277
|
exports["voidCallback"] = Function::New<VoidCallback>(env, "voidCallback");
|
|
266
278
|
exports["valueCallback"] =
|
|
267
279
|
Function::New<ValueCallback>(env, std::string("valueCallback"));
|
|
280
|
+
exports["newTargetCallback"] =
|
|
281
|
+
Function::New<NewTargetCallback>(env, std::string("newTargetCallback"));
|
|
268
282
|
exports["voidCallbackWithData"] =
|
|
269
283
|
Function::New<VoidCallbackWithData>(env, nullptr, &testData);
|
|
270
284
|
exports["valueCallbackWithData"] =
|
|
@@ -18,6 +18,10 @@ function test (binding) {
|
|
|
18
18
|
|
|
19
19
|
assert.deepStrictEqual(binding.valueCallback(), { foo: 'bar' });
|
|
20
20
|
|
|
21
|
+
/* eslint-disable-next-line no-new, new-cap */
|
|
22
|
+
assert.strictEqual(new binding.newTargetCallback(), binding.newTargetCallback);
|
|
23
|
+
assert.strictEqual(binding.newTargetCallback(), undefined);
|
|
24
|
+
|
|
21
25
|
let args = null;
|
|
22
26
|
let ret = null;
|
|
23
27
|
let receiver = null;
|
|
@@ -82,16 +82,16 @@ Value CallWithRecvVector(const CallbackInfo& info) {
|
|
|
82
82
|
Value CallWithRecvArgc(const CallbackInfo& info) {
|
|
83
83
|
HandleScope scope(info.Env());
|
|
84
84
|
FunctionReference ref;
|
|
85
|
-
int argLength = info.Length() - 2;
|
|
86
|
-
napi_value* args = new napi_value[argLength];
|
|
87
85
|
ref.Reset(info[0].As<Function>());
|
|
88
86
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
87
|
+
size_t argLength = info.Length() > 2 ? info.Length() - 2 : 0;
|
|
88
|
+
std::unique_ptr<napi_value[]> args{argLength > 0 ? new napi_value[argLength]
|
|
89
|
+
: nullptr};
|
|
90
|
+
for (size_t i = 0; i < argLength; ++i) {
|
|
91
|
+
args[i] = info[i + 2];
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
return MaybeUnwrap(ref.Call(info[1], argLength, args));
|
|
94
|
+
return MaybeUnwrap(ref.Call(info[1], argLength, args.get()));
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
Value MakeAsyncCallbackWithInitList(const Napi::CallbackInfo& info) {
|
|
@@ -121,17 +121,19 @@ Value MakeAsyncCallbackWithVector(const Napi::CallbackInfo& info) {
|
|
|
121
121
|
Value MakeAsyncCallbackWithArgv(const Napi::CallbackInfo& info) {
|
|
122
122
|
Napi::FunctionReference ref;
|
|
123
123
|
ref.Reset(info[0].As<Function>());
|
|
124
|
-
int argLength = info.Length() - 1;
|
|
125
|
-
napi_value* args = new napi_value[argLength];
|
|
126
124
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
125
|
+
size_t argLength = info.Length() > 1 ? info.Length() - 1 : 0;
|
|
126
|
+
std::unique_ptr<napi_value[]> args{argLength > 0 ? new napi_value[argLength]
|
|
127
|
+
: nullptr};
|
|
128
|
+
for (size_t i = 0; i < argLength; ++i) {
|
|
129
|
+
args[i] = info[i + 1];
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
Napi::AsyncContext context(info.Env(), "func_ref_resources", {});
|
|
133
|
-
return MaybeUnwrap(ref.MakeCallback(
|
|
134
|
-
|
|
133
|
+
return MaybeUnwrap(ref.MakeCallback(Napi::Object::New(info.Env()),
|
|
134
|
+
argLength,
|
|
135
|
+
argLength > 0 ? args.get() : nullptr,
|
|
136
|
+
context));
|
|
135
137
|
}
|
|
136
138
|
|
|
137
139
|
Value CreateFunctionReferenceUsingNew(const Napi::CallbackInfo& info) {
|
|
@@ -4,58 +4,55 @@ const assert = require('assert');
|
|
|
4
4
|
|
|
5
5
|
module.exports = require('../common').runTest(test);
|
|
6
6
|
|
|
7
|
-
function test(binding) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
{
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
assert.notStrictEqual(binding.globalObject.hasPropertyWithInt32(key), true);
|
|
33
|
-
break;
|
|
34
|
-
}
|
|
7
|
+
function test (binding) {
|
|
8
|
+
const KEY_TYPE = {
|
|
9
|
+
C_STR: 'KEY_AS_C_STRING',
|
|
10
|
+
CPP_STR: 'KEY_AS_CPP_STRING',
|
|
11
|
+
NAPI: 'KEY_AS_NAPI_VALUES',
|
|
12
|
+
INT_32: 'KEY_AS_INT_32_NUM'
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
function assertNotGlobalObjectHasNoProperty (key, keyType) {
|
|
16
|
+
switch (keyType) {
|
|
17
|
+
case KEY_TYPE.NAPI:
|
|
18
|
+
assert.notStrictEqual(binding.globalObject.hasPropertyWithNapiValue(key), true);
|
|
19
|
+
break;
|
|
20
|
+
|
|
21
|
+
case KEY_TYPE.C_STR:
|
|
22
|
+
assert.notStrictEqual(binding.globalObject.hasPropertyWithCStyleString(key), true);
|
|
23
|
+
break;
|
|
24
|
+
|
|
25
|
+
case KEY_TYPE.CPP_STR:
|
|
26
|
+
assert.notStrictEqual(binding.globalObject.hasPropertyWithCppStyleString(key), true);
|
|
27
|
+
break;
|
|
28
|
+
|
|
29
|
+
case KEY_TYPE.INT_32:
|
|
30
|
+
assert.notStrictEqual(binding.globalObject.hasPropertyWithInt32(key), true);
|
|
31
|
+
break;
|
|
35
32
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function assertErrMessageIsThrown (propertyCheckExistenceFunction, errMsg) {
|
|
36
|
+
assert.throws(() => {
|
|
37
|
+
propertyCheckExistenceFunction(undefined);
|
|
38
|
+
}, errMsg);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
binding.globalObject.createMockTestObject();
|
|
42
|
+
|
|
43
|
+
binding.globalObject.deletePropertyWithCStyleString('c_str_key');
|
|
44
|
+
binding.globalObject.deletePropertyWithCppStyleString('cpp_string_key');
|
|
45
|
+
binding.globalObject.deletePropertyWithCppStyleString('circular');
|
|
46
|
+
binding.globalObject.deletePropertyWithInt32(15);
|
|
47
|
+
binding.globalObject.deletePropertyWithNapiValue('2');
|
|
48
|
+
|
|
49
|
+
assertNotGlobalObjectHasNoProperty('c_str_key', KEY_TYPE.C_STR);
|
|
50
|
+
assertNotGlobalObjectHasNoProperty('cpp_string_key', KEY_TYPE.CPP_STR);
|
|
51
|
+
assertNotGlobalObjectHasNoProperty('circular', KEY_TYPE.CPP_STR);
|
|
52
|
+
assertNotGlobalObjectHasNoProperty(15, true);
|
|
53
|
+
assertNotGlobalObjectHasNoProperty('2', KEY_TYPE.NAPI);
|
|
54
|
+
|
|
55
|
+
assertErrMessageIsThrown(binding.globalObject.hasPropertyWithCppStyleString, 'Error: A string was expected');
|
|
56
|
+
assertErrMessageIsThrown(binding.globalObject.hasPropertyWithCStyleString, 'Error: A string was expected');
|
|
57
|
+
assertErrMessageIsThrown(binding.globalObject.hasPropertyWithInt32, 'Error: A number was expected');
|
|
61
58
|
}
|
|
@@ -4,51 +4,50 @@ const assert = require('assert');
|
|
|
4
4
|
|
|
5
5
|
module.exports = require('../common').runTest(test);
|
|
6
6
|
|
|
7
|
-
function test(binding) {
|
|
7
|
+
function test (binding) {
|
|
8
8
|
const KEY_TYPE = {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
C_STR: 'KEY_AS_C_STRING',
|
|
10
|
+
CPP_STR: 'KEY_AS_CPP_STRING',
|
|
11
|
+
NAPI: 'KEY_AS_NAPI_VALUES',
|
|
12
|
+
INT_32: 'KEY_AS_INT_32_NUM'
|
|
13
|
+
};
|
|
14
14
|
|
|
15
15
|
binding.globalObject.createMockTestObject();
|
|
16
|
-
function assertGlobalObjectPropertyIs(key, attribute, keyType) {
|
|
16
|
+
function assertGlobalObjectPropertyIs (key, attribute, keyType) {
|
|
17
17
|
let napiObjectAttr;
|
|
18
|
-
switch(keyType)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
18
|
+
switch (keyType) {
|
|
19
|
+
case KEY_TYPE.NAPI:
|
|
20
|
+
napiObjectAttr = binding.globalObject.getPropertyWithNapiValue(key);
|
|
21
|
+
assert.deepStrictEqual(attribute, napiObjectAttr);
|
|
22
|
+
break;
|
|
23
|
+
|
|
24
|
+
case KEY_TYPE.C_STR:
|
|
25
|
+
napiObjectAttr = binding.globalObject.getPropertyWithCString(key);
|
|
26
|
+
assert.deepStrictEqual(attribute, napiObjectAttr);
|
|
27
|
+
break;
|
|
28
|
+
|
|
29
|
+
case KEY_TYPE.CPP_STR:
|
|
30
|
+
napiObjectAttr = binding.globalObject.getPropertyWithCppString(key);
|
|
31
|
+
assert.deepStrictEqual(attribute, napiObjectAttr);
|
|
32
|
+
break;
|
|
33
|
+
|
|
34
|
+
case KEY_TYPE.INT_32:
|
|
35
|
+
napiObjectAttr = binding.globalObject.getPropertyWithInt32(key);
|
|
36
|
+
assert.deepStrictEqual(attribute, napiObjectAttr);
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
40
39
|
}
|
|
41
40
|
|
|
42
|
-
function assertErrMessageIsThrown(propertyFetchFunction, errMsg) {
|
|
41
|
+
function assertErrMessageIsThrown (propertyFetchFunction, errMsg) {
|
|
43
42
|
assert.throws(() => {
|
|
44
43
|
propertyFetchFunction(undefined);
|
|
45
44
|
}, errMsg);
|
|
46
45
|
}
|
|
47
46
|
|
|
48
|
-
assertGlobalObjectPropertyIs('2',global['2'], KEY_TYPE.NAPI);
|
|
49
|
-
assertGlobalObjectPropertyIs('c_str_key',global
|
|
50
|
-
assertGlobalObjectPropertyIs('cpp_string_key',global
|
|
51
|
-
assertGlobalObjectPropertyIs('circular',global
|
|
47
|
+
assertGlobalObjectPropertyIs('2', global['2'], KEY_TYPE.NAPI);
|
|
48
|
+
assertGlobalObjectPropertyIs('c_str_key', global.c_str_key, KEY_TYPE.C_STR);
|
|
49
|
+
assertGlobalObjectPropertyIs('cpp_string_key', global.cpp_string_key, KEY_TYPE.CPP_STR);
|
|
50
|
+
assertGlobalObjectPropertyIs('circular', global.circular, KEY_TYPE.CPP_STR);
|
|
52
51
|
assertGlobalObjectPropertyIs(15, global['15'], KEY_TYPE.INT_32);
|
|
53
52
|
|
|
54
53
|
assertErrMessageIsThrown(binding.globalObject.getPropertyWithCString, 'Error: A string was expected');
|