koffi 1.0.4 → 1.1.0-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/README.md +51 -22
- 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
- package/package.json +1 -1
- package/qemu/qemu.js +11 -5
- package/qemu/registry/machines.json +20 -10
- package/src/abi_arm32.cc +13 -6
- package/src/abi_arm64.cc +13 -6
- package/src/abi_x64_sysv.cc +13 -6
- package/src/abi_x64_win.cc +13 -6
- package/src/abi_x86.cc +13 -6
- package/src/call.cc +25 -26
- package/src/call.hh +27 -41
- package/src/ffi.cc +152 -17
- package/src/ffi.hh +24 -10
- package/test/misc.c +2 -2
- package/build/qemu/1.0.4/koffi_darwin_x64.tar.gz +0 -0
- package/build/qemu/1.0.4/koffi_freebsd_arm64.tar.gz +0 -0
- package/build/qemu/1.0.4/koffi_freebsd_ia32.tar.gz +0 -0
- package/build/qemu/1.0.4/koffi_freebsd_x64.tar.gz +0 -0
- package/build/qemu/1.0.4/koffi_linux_arm.tar.gz +0 -0
- package/build/qemu/1.0.4/koffi_linux_arm64.tar.gz +0 -0
- package/build/qemu/1.0.4/koffi_linux_ia32.tar.gz +0 -0
- package/build/qemu/1.0.4/koffi_linux_x64.tar.gz +0 -0
- package/build/qemu/1.0.4/koffi_win32_ia32.tar.gz +0 -0
- package/build/qemu/1.0.4/koffi_win32_x64.tar.gz +0 -0
- package/test/misc.js +0 -227
- package/vendor/node-addon-api/CODE_OF_CONDUCT.md +0 -4
- package/vendor/node-addon-api/CONTRIBUTING.md +0 -93
- package/vendor/node-addon-api/appveyor.yml +0 -37
- package/vendor/node-addon-api/benchmark/README.md +0 -47
- package/vendor/node-addon-api/benchmark/binding.gyp +0 -25
- package/vendor/node-addon-api/benchmark/function_args.cc +0 -217
- package/vendor/node-addon-api/benchmark/function_args.js +0 -60
- package/vendor/node-addon-api/benchmark/index.js +0 -34
- package/vendor/node-addon-api/benchmark/property_descriptor.cc +0 -91
- package/vendor/node-addon-api/benchmark/property_descriptor.js +0 -37
- package/vendor/node-addon-api/doc/addon.md +0 -163
- package/vendor/node-addon-api/doc/array.md +0 -81
- package/vendor/node-addon-api/doc/array_buffer.md +0 -155
- package/vendor/node-addon-api/doc/async_context.md +0 -86
- package/vendor/node-addon-api/doc/async_operations.md +0 -31
- package/vendor/node-addon-api/doc/async_worker.md +0 -427
- package/vendor/node-addon-api/doc/async_worker_variants.md +0 -557
- package/vendor/node-addon-api/doc/bigint.md +0 -97
- package/vendor/node-addon-api/doc/boolean.md +0 -68
- package/vendor/node-addon-api/doc/buffer.md +0 -150
- package/vendor/node-addon-api/doc/callback_scope.md +0 -54
- package/vendor/node-addon-api/doc/callbackinfo.md +0 -97
- package/vendor/node-addon-api/doc/checker-tool.md +0 -32
- package/vendor/node-addon-api/doc/class_property_descriptor.md +0 -123
- package/vendor/node-addon-api/doc/cmake-js.md +0 -68
- package/vendor/node-addon-api/doc/conversion-tool.md +0 -28
- package/vendor/node-addon-api/doc/creating_a_release.md +0 -62
- package/vendor/node-addon-api/doc/dataview.md +0 -248
- package/vendor/node-addon-api/doc/date.md +0 -68
- package/vendor/node-addon-api/doc/env.md +0 -196
- package/vendor/node-addon-api/doc/error.md +0 -120
- package/vendor/node-addon-api/doc/error_handling.md +0 -254
- package/vendor/node-addon-api/doc/escapable_handle_scope.md +0 -80
- package/vendor/node-addon-api/doc/external.md +0 -63
- package/vendor/node-addon-api/doc/function.md +0 -402
- package/vendor/node-addon-api/doc/function_reference.md +0 -238
- package/vendor/node-addon-api/doc/generator.md +0 -13
- package/vendor/node-addon-api/doc/handle_scope.md +0 -63
- package/vendor/node-addon-api/doc/hierarchy.md +0 -91
- package/vendor/node-addon-api/doc/instance_wrap.md +0 -408
- package/vendor/node-addon-api/doc/maybe.md +0 -76
- package/vendor/node-addon-api/doc/memory_management.md +0 -27
- package/vendor/node-addon-api/doc/name.md +0 -29
- package/vendor/node-addon-api/doc/node-gyp.md +0 -82
- package/vendor/node-addon-api/doc/number.md +0 -163
- package/vendor/node-addon-api/doc/object.md +0 -411
- package/vendor/node-addon-api/doc/object_lifetime_management.md +0 -83
- package/vendor/node-addon-api/doc/object_reference.md +0 -117
- package/vendor/node-addon-api/doc/object_wrap.md +0 -588
- package/vendor/node-addon-api/doc/prebuild_tools.md +0 -16
- package/vendor/node-addon-api/doc/promises.md +0 -79
- package/vendor/node-addon-api/doc/property_descriptor.md +0 -286
- package/vendor/node-addon-api/doc/propertylvalue.md +0 -50
- package/vendor/node-addon-api/doc/range_error.md +0 -59
- package/vendor/node-addon-api/doc/reference.md +0 -113
- package/vendor/node-addon-api/doc/setup.md +0 -110
- package/vendor/node-addon-api/doc/string.md +0 -93
- package/vendor/node-addon-api/doc/symbol.md +0 -61
- package/vendor/node-addon-api/doc/threadsafe.md +0 -121
- package/vendor/node-addon-api/doc/threadsafe_function.md +0 -290
- package/vendor/node-addon-api/doc/type_error.md +0 -59
- package/vendor/node-addon-api/doc/typed_array.md +0 -78
- package/vendor/node-addon-api/doc/typed_array_of.md +0 -137
- package/vendor/node-addon-api/doc/typed_threadsafe_function.md +0 -306
- package/vendor/node-addon-api/doc/value.md +0 -340
- package/vendor/node-addon-api/doc/version_management.md +0 -43
- package/vendor/node-addon-api/package.json +0 -415
- package/vendor/node-addon-api/test/README.md +0 -91
- package/vendor/node-addon-api/test/addon.cc +0 -36
- package/vendor/node-addon-api/test/addon.js +0 -11
- package/vendor/node-addon-api/test/addon_build/index.js +0 -49
- package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +0 -17
- package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +0 -62
- package/vendor/node-addon-api/test/addon_build/tpl/index.js +0 -9
- package/vendor/node-addon-api/test/addon_build/tpl/package.json +0 -11
- package/vendor/node-addon-api/test/addon_data.cc +0 -99
- package/vendor/node-addon-api/test/addon_data.js +0 -46
- package/vendor/node-addon-api/test/array_buffer.cc +0 -243
- package/vendor/node-addon-api/test/array_buffer.js +0 -69
- package/vendor/node-addon-api/test/async_context.cc +0 -36
- package/vendor/node-addon-api/test/async_context.js +0 -122
- package/vendor/node-addon-api/test/async_progress_queue_worker.cc +0 -83
- package/vendor/node-addon-api/test/async_progress_queue_worker.js +0 -46
- package/vendor/node-addon-api/test/async_progress_worker.cc +0 -134
- package/vendor/node-addon-api/test/async_progress_worker.js +0 -61
- package/vendor/node-addon-api/test/async_worker.cc +0 -106
- package/vendor/node-addon-api/test/async_worker.js +0 -179
- package/vendor/node-addon-api/test/async_worker_nocallback.js +0 -13
- package/vendor/node-addon-api/test/async_worker_persistent.cc +0 -63
- package/vendor/node-addon-api/test/async_worker_persistent.js +0 -24
- package/vendor/node-addon-api/test/basic_types/array.cc +0 -40
- package/vendor/node-addon-api/test/basic_types/array.js +0 -35
- package/vendor/node-addon-api/test/basic_types/boolean.cc +0 -38
- package/vendor/node-addon-api/test/basic_types/boolean.js +0 -35
- package/vendor/node-addon-api/test/basic_types/number.cc +0 -99
- package/vendor/node-addon-api/test/basic_types/number.js +0 -114
- package/vendor/node-addon-api/test/basic_types/value.cc +0 -120
- package/vendor/node-addon-api/test/basic_types/value.js +0 -133
- package/vendor/node-addon-api/test/bigint.cc +0 -91
- package/vendor/node-addon-api/test/bigint.js +0 -53
- package/vendor/node-addon-api/test/binding-swallowexcept.cc +0 -12
- package/vendor/node-addon-api/test/binding.cc +0 -173
- package/vendor/node-addon-api/test/binding.gyp +0 -124
- package/vendor/node-addon-api/test/buffer.cc +0 -183
- package/vendor/node-addon-api/test/buffer.js +0 -69
- package/vendor/node-addon-api/test/callbackscope.cc +0 -22
- package/vendor/node-addon-api/test/callbackscope.js +0 -49
- package/vendor/node-addon-api/test/common/index.js +0 -114
- package/vendor/node-addon-api/test/common/test_helper.h +0 -71
- package/vendor/node-addon-api/test/dataview/dataview.cc +0 -48
- package/vendor/node-addon-api/test/dataview/dataview.js +0 -35
- package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +0 -115
- package/vendor/node-addon-api/test/dataview/dataview_read_write.js +0 -90
- package/vendor/node-addon-api/test/date.cc +0 -44
- package/vendor/node-addon-api/test/date.js +0 -18
- package/vendor/node-addon-api/test/env_cleanup.cc +0 -88
- package/vendor/node-addon-api/test/env_cleanup.js +0 -56
- package/vendor/node-addon-api/test/error.cc +0 -287
- package/vendor/node-addon-api/test/error.js +0 -81
- package/vendor/node-addon-api/test/error_handling_for_primitives.cc +0 -13
- package/vendor/node-addon-api/test/error_handling_for_primitives.js +0 -29
- package/vendor/node-addon-api/test/error_terminating_environment.js +0 -95
- package/vendor/node-addon-api/test/external.cc +0 -81
- package/vendor/node-addon-api/test/external.js +0 -88
- package/vendor/node-addon-api/test/function.cc +0 -324
- package/vendor/node-addon-api/test/function.js +0 -133
- package/vendor/node-addon-api/test/function_reference.cc +0 -202
- package/vendor/node-addon-api/test/function_reference.js +0 -157
- package/vendor/node-addon-api/test/globalObject/global_object.cc +0 -61
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +0 -31
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +0 -61
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +0 -40
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +0 -57
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +0 -28
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +0 -48
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +0 -31
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +0 -58
- package/vendor/node-addon-api/test/handlescope.cc +0 -60
- package/vendor/node-addon-api/test/handlescope.js +0 -14
- package/vendor/node-addon-api/test/index.js +0 -159
- package/vendor/node-addon-api/test/maybe/check.cc +0 -23
- package/vendor/node-addon-api/test/maybe/index.js +0 -38
- package/vendor/node-addon-api/test/memory_management.cc +0 -17
- package/vendor/node-addon-api/test/memory_management.js +0 -9
- package/vendor/node-addon-api/test/movable_callbacks.cc +0 -23
- package/vendor/node-addon-api/test/movable_callbacks.js +0 -21
- package/vendor/node-addon-api/test/name.cc +0 -108
- package/vendor/node-addon-api/test/name.js +0 -59
- package/vendor/node-addon-api/test/napi_child.js +0 -14
- package/vendor/node-addon-api/test/object/delete_property.cc +0 -38
- package/vendor/node-addon-api/test/object/delete_property.js +0 -41
- package/vendor/node-addon-api/test/object/finalizer.cc +0 -29
- package/vendor/node-addon-api/test/object/finalizer.js +0 -28
- package/vendor/node-addon-api/test/object/get_property.cc +0 -34
- package/vendor/node-addon-api/test/object/get_property.js +0 -40
- package/vendor/node-addon-api/test/object/has_own_property.cc +0 -34
- package/vendor/node-addon-api/test/object/has_own_property.js +0 -34
- package/vendor/node-addon-api/test/object/has_property.cc +0 -38
- package/vendor/node-addon-api/test/object/has_property.js +0 -37
- package/vendor/node-addon-api/test/object/object.cc +0 -350
- package/vendor/node-addon-api/test/object/object.js +0 -217
- package/vendor/node-addon-api/test/object/object_deprecated.cc +0 -66
- package/vendor/node-addon-api/test/object/object_deprecated.js +0 -47
- package/vendor/node-addon-api/test/object/object_freeze_seal.cc +0 -25
- package/vendor/node-addon-api/test/object/object_freeze_seal.js +0 -61
- package/vendor/node-addon-api/test/object/set_property.cc +0 -45
- package/vendor/node-addon-api/test/object/set_property.js +0 -30
- package/vendor/node-addon-api/test/object/subscript_operator.cc +0 -58
- package/vendor/node-addon-api/test/object/subscript_operator.js +0 -17
- package/vendor/node-addon-api/test/object_reference.cc +0 -219
- package/vendor/node-addon-api/test/object_reference.js +0 -259
- package/vendor/node-addon-api/test/objectwrap.cc +0 -268
- package/vendor/node-addon-api/test/objectwrap.js +0 -284
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +0 -26
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +0 -18
- package/vendor/node-addon-api/test/objectwrap_function.cc +0 -45
- package/vendor/node-addon-api/test/objectwrap_function.js +0 -22
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +0 -30
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +0 -13
- package/vendor/node-addon-api/test/objectwrap_removewrap.cc +0 -45
- package/vendor/node-addon-api/test/objectwrap_removewrap.js +0 -40
- package/vendor/node-addon-api/test/objectwrap_worker_thread.js +0 -19
- package/vendor/node-addon-api/test/promise.cc +0 -29
- package/vendor/node-addon-api/test/promise.js +0 -18
- package/vendor/node-addon-api/test/reference.cc +0 -24
- package/vendor/node-addon-api/test/reference.js +0 -14
- package/vendor/node-addon-api/test/run_script.cc +0 -56
- package/vendor/node-addon-api/test/run_script.js +0 -45
- package/vendor/node-addon-api/test/symbol.cc +0 -79
- package/vendor/node-addon-api/test/symbol.js +0 -73
- package/vendor/node-addon-api/test/testUtil.js +0 -54
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +0 -195
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +0 -188
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +0 -63
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +0 -12
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +0 -115
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +0 -14
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +0 -26
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +0 -7
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +0 -225
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +0 -59
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +0 -42
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +0 -53
- package/vendor/node-addon-api/test/thunking_manual.cc +0 -140
- package/vendor/node-addon-api/test/thunking_manual.js +0 -17
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +0 -215
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +0 -188
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +0 -68
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +0 -12
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +0 -127
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +0 -14
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +0 -28
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +0 -7
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +0 -237
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +0 -59
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +0 -53
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +0 -53
- package/vendor/node-addon-api/test/typedarray-bigint.js +0 -58
- package/vendor/node-addon-api/test/typedarray.cc +0 -216
- package/vendor/node-addon-api/test/typedarray.js +0 -69
- package/vendor/node-addon-api/test/version_management.cc +0 -27
- package/vendor/node-addon-api/test/version_management.js +0 -31
- package/vendor/node-addon-api/unit-test/README.md +0 -28
- package/vendor/node-addon-api/unit-test/binding-file-template.js +0 -39
- package/vendor/node-addon-api/unit-test/binding.gyp +0 -72
- package/vendor/node-addon-api/unit-test/exceptions.js +0 -32
- package/vendor/node-addon-api/unit-test/generate-binding-cc.js +0 -61
- package/vendor/node-addon-api/unit-test/injectTestParams.js +0 -101
- package/vendor/node-addon-api/unit-test/listOfTestModules.js +0 -88
- package/vendor/node-addon-api/unit-test/matchModules.js +0 -65
- package/vendor/node-addon-api/unit-test/setup.js +0 -13
- package/vendor/node-addon-api/unit-test/spawnTask.js +0 -26
- package/vendor/node-addon-api/unit-test/test.js +0 -30
package/README.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
- [Introduction](#introduction)
|
|
4
4
|
- [Get started](#get-started)
|
|
5
|
+
- [Extra features](#extra-features)
|
|
6
|
+
* [Variadic functions](#variadic-functions)
|
|
7
|
+
* [Asynchronous calls](#asynchronous-calls)
|
|
8
|
+
* [Callbacks](#callbacks)
|
|
5
9
|
- [Benchmarks](#benchmarks)
|
|
6
10
|
* [atoi results](#atoi-results)
|
|
7
11
|
* [Raylib results](#raylib-results)
|
|
@@ -17,36 +21,36 @@ Koffi is a fast and easy-to-use FFI module for Node.js, with support for primiti
|
|
|
17
21
|
After the release of version 1.0, the following features are planned:
|
|
18
22
|
|
|
19
23
|
* 1.1: Asynchronous calls
|
|
20
|
-
* 1.2:
|
|
21
|
-
* 1.3:
|
|
24
|
+
* 1.2: Fixed-size array types
|
|
25
|
+
* 1.3: C to JS callbacks
|
|
22
26
|
|
|
23
27
|
The following platforms __are officially supported and tested__ at the moment:
|
|
24
28
|
|
|
25
|
-
|
|
26
|
-
--------- | -------------------------------- |
|
|
27
|
-
Windows | x86 (cdecl, stdcall, fastcall) | 🟩 Yes
|
|
28
|
-
Windows | x86_64 | 🟩 Yes
|
|
29
|
-
Linux | x86 | 🟩 Yes
|
|
30
|
-
Linux | x86_64 | 🟩 Yes
|
|
31
|
-
Linux | ARM32+VFP Little Endian | 🟩 Yes
|
|
32
|
-
Linux | ARM64 Little Endian | 🟩 Yes
|
|
33
|
-
FreeBSD | x86 | 🟩 Yes
|
|
34
|
-
FreeBSD | x86_64 | 🟩 Yes
|
|
35
|
-
FreeBSD | ARM64 Little Endian | 🟩 Yes
|
|
36
|
-
macOS | x86_64 | 🟩 Yes
|
|
37
|
-
macOS | ARM64 (M1) Little Endian | 🟩 Yes
|
|
38
|
-
OpenBSD | x86_64 | 🟧 Maybe | 🟥 No
|
|
39
|
-
OpenBSD | x86 | 🟧 Maybe | 🟥 No
|
|
40
|
-
OpenBSD | ARM64 Little Endian | 🟧 Maybe | 🟥 No
|
|
41
|
-
NetBSD | x86_64 | 🟧 Maybe | 🟥 No
|
|
42
|
-
NetBSD | x86 | 🟧 Maybe | 🟥 No
|
|
43
|
-
NetBSD | ARM64 Little Endian | 🟧 Maybe | 🟥 No
|
|
29
|
+
Platform | Architecture | Sync calls | Async calls | Callbacks | Pre-built binary
|
|
30
|
+
--------- | -------------------------------- | ---------- | ----------- | --------- | ----------------
|
|
31
|
+
Windows | x86 (cdecl, stdcall, fastcall) | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
|
|
32
|
+
Windows | x86_64 | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
|
|
33
|
+
Linux | x86 | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
|
|
34
|
+
Linux | x86_64 | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
|
|
35
|
+
Linux | ARM32+VFP Little Endian | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
|
|
36
|
+
Linux | ARM64 Little Endian | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
|
|
37
|
+
FreeBSD | x86 | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
|
|
38
|
+
FreeBSD | x86_64 | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
|
|
39
|
+
FreeBSD | ARM64 Little Endian | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
|
|
40
|
+
macOS | x86_64 | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
|
|
41
|
+
macOS | ARM64 (M1) Little Endian | 🟩 Yes | 🟩 Yes | 🟥 No | 🟥 No
|
|
42
|
+
OpenBSD | x86_64 | 🟧 Maybe | 🟧 Maybe | 🟥 No | 🟥 No
|
|
43
|
+
OpenBSD | x86 | 🟧 Maybe | 🟧 Maybe | 🟥 No | 🟥 No
|
|
44
|
+
OpenBSD | ARM64 Little Endian | 🟧 Maybe | 🟧 Maybe | 🟥 No | 🟥 No
|
|
45
|
+
NetBSD | x86_64 | 🟧 Maybe | 🟧 Maybe | 🟥 No | 🟥 No
|
|
46
|
+
NetBSD | x86 | 🟧 Maybe | 🟧 Maybe | 🟥 No | 🟥 No
|
|
47
|
+
NetBSD | ARM64 Little Endian | 🟧 Maybe | 🟧 Maybe | 🟥 No | 🟥 No
|
|
44
48
|
|
|
45
49
|
🟩 Tested, fully operational
|
|
46
50
|
🟧 May work, but not actively tested
|
|
47
51
|
🟥 Does not work yet
|
|
48
52
|
|
|
49
|
-
This is still in development, bugs are to expected. More tests will come in the near future.
|
|
53
|
+
This is still in development, bugs are to be expected. More tests will come in the near future.
|
|
50
54
|
|
|
51
55
|
# Get started
|
|
52
56
|
|
|
@@ -227,6 +231,31 @@ const printf = lib.func('printf', 'int', ['string', '...']);
|
|
|
227
231
|
printf('Integer %d, double %g, string %s', 'int', 6, 'double', 8.5, 'string', 'THE END');
|
|
228
232
|
```
|
|
229
233
|
|
|
234
|
+
## Asynchronous calls
|
|
235
|
+
|
|
236
|
+
You can issue asynchronous calls by calling the function through its async member.
|
|
237
|
+
In this case, you need to provide a callback function as the last argument, with
|
|
238
|
+
`(err, res)` parameters.
|
|
239
|
+
|
|
240
|
+
```js
|
|
241
|
+
const koffi = require('koffi');
|
|
242
|
+
const lib = koffi.load('libc.so.6');
|
|
243
|
+
|
|
244
|
+
const atoi = lib.func('int atoi(const char *str)');
|
|
245
|
+
|
|
246
|
+
atoi.async('1257', (err, res) => {
|
|
247
|
+
console.log('Result:', res);
|
|
248
|
+
})
|
|
249
|
+
console.log('Hello World!');
|
|
250
|
+
|
|
251
|
+
// This program will print "Hello World!", and then "Result: 1257"
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
You can easily convert this callback-style async function with `util.promisify()` from the
|
|
255
|
+
Node.js standard library.
|
|
256
|
+
|
|
257
|
+
Variadic functions do not support async.
|
|
258
|
+
|
|
230
259
|
## Callbacks
|
|
231
260
|
|
|
232
261
|
Koffi does not yet support passing JS functions as callbacks. This is planned for version 1.1.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
package/qemu/qemu.js
CHANGED
|
@@ -430,16 +430,22 @@ async function copy(func) {
|
|
|
430
430
|
let copied = true;
|
|
431
431
|
|
|
432
432
|
for (let directory of func(machine)) {
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
433
|
+
for (let i = 0; i < 10; i++) {
|
|
434
|
+
try {
|
|
435
|
+
await machine.ssh.exec('rm', ['-rf', directory]);
|
|
436
|
+
break;
|
|
437
|
+
} catch (err) {
|
|
438
|
+
// Fails often on Windows (busy directory or whatever), but rarely a problem
|
|
439
|
+
|
|
440
|
+
await wait(1000);
|
|
441
|
+
continue;
|
|
442
|
+
}
|
|
437
443
|
}
|
|
438
444
|
|
|
439
445
|
try {
|
|
440
446
|
await machine.ssh.putDirectory(snapshot_dir, directory, {
|
|
441
447
|
recursive: true,
|
|
442
|
-
concurrency: 4
|
|
448
|
+
concurrency: (process.platform != 'win32') ? 4 : 1
|
|
443
449
|
});
|
|
444
450
|
} catch (err) {
|
|
445
451
|
ignore.add(machine);
|
|
@@ -35,8 +35,9 @@
|
|
|
35
35
|
"Build": "node ../cnoke/cnoke.js -C test"
|
|
36
36
|
},
|
|
37
37
|
"commands": {
|
|
38
|
+
"Test Sync": "node test/sync.js",
|
|
39
|
+
"Test Async": "node test/async.js",
|
|
38
40
|
"Test Raylib": "xvfb-run node test/raylib.js",
|
|
39
|
-
"Test Misc": "node test/misc.js",
|
|
40
41
|
"Test SQLite": "node test/sqlite.js"
|
|
41
42
|
}
|
|
42
43
|
}
|
|
@@ -79,8 +80,9 @@
|
|
|
79
80
|
"Build": "node ../cnoke/cnoke.js -C test"
|
|
80
81
|
},
|
|
81
82
|
"commands": {
|
|
83
|
+
"Test Sync": "node test/sync.js",
|
|
84
|
+
"Test Async": "node test/async.js",
|
|
82
85
|
"Test Raylib": "xvfb-run node test/raylib.js",
|
|
83
|
-
"Test Misc": "node test/misc.js",
|
|
84
86
|
"Test SQLite": "node test/sqlite.js"
|
|
85
87
|
}
|
|
86
88
|
}
|
|
@@ -123,8 +125,9 @@
|
|
|
123
125
|
"Build": "node ../cnoke/cnoke.js -C test"
|
|
124
126
|
},
|
|
125
127
|
"commands": {
|
|
128
|
+
"Test Sync": "node test/sync.js",
|
|
129
|
+
"Test Async": "node test/async.js",
|
|
126
130
|
"Test Raylib": "xvfb-run node test/raylib.js",
|
|
127
|
-
"Test Misc": "node test/misc.js",
|
|
128
131
|
"Test SQLite": "node test/sqlite.js"
|
|
129
132
|
}
|
|
130
133
|
}
|
|
@@ -167,8 +170,9 @@
|
|
|
167
170
|
"Build": "node ../cnoke/cnoke.js -C test"
|
|
168
171
|
},
|
|
169
172
|
"commands": {
|
|
173
|
+
"Test Sync": "node test/sync.js",
|
|
174
|
+
"Test Async": "node test/async.js",
|
|
170
175
|
"Test Raylib": "xvfb-run node test/raylib.js",
|
|
171
|
-
"Test Misc": "node test/misc.js",
|
|
172
176
|
"Test SQLite": "node test/sqlite.js"
|
|
173
177
|
}
|
|
174
178
|
}
|
|
@@ -218,8 +222,9 @@
|
|
|
218
222
|
"Build": "C:\\Node32\\node32.cmd node ../cnoke/cnoke.js -C test"
|
|
219
223
|
},
|
|
220
224
|
"commands": {
|
|
225
|
+
"Test Sync": "C:\\Node32\\node32.cmd node test/sync.js",
|
|
226
|
+
"Test Async": "C:\\Node32\\node32.cmd node test/async.js",
|
|
221
227
|
"Test Raylib": "seatsh C:\\Node32\\node32.cmd node test/raylib.js",
|
|
222
|
-
"Test Misc": "C:\\Node32\\node32.cmd node test/misc.js",
|
|
223
228
|
"Test SQLite": "C:\\Node32\\node32.cmd node test/sqlite.js"
|
|
224
229
|
}
|
|
225
230
|
},
|
|
@@ -230,8 +235,9 @@
|
|
|
230
235
|
"Build": "C:\\Node64\\node64.cmd node ../cnoke/cnoke.js -C test"
|
|
231
236
|
},
|
|
232
237
|
"commands": {
|
|
238
|
+
"Test Sync": "C:\\Node64\\node64.cmd node test/sync.js",
|
|
239
|
+
"Test Async": "C:\\Node64\\node64.cmd node test/async.js",
|
|
233
240
|
"Test Raylib": "seatsh C:\\Node64\\node64.cmd node test/raylib.js",
|
|
234
|
-
"Test Misc": "C:\\Node64\\node64.cmd node test/misc.js",
|
|
235
241
|
"Test SQLite": "C:\\Node64\\node64.cmd node test/sqlite.js"
|
|
236
242
|
}
|
|
237
243
|
}
|
|
@@ -274,8 +280,9 @@
|
|
|
274
280
|
"Build": "node ../cnoke/cnoke.js -C test"
|
|
275
281
|
},
|
|
276
282
|
"commands": {
|
|
283
|
+
"Test Sync": "node test/sync.js",
|
|
284
|
+
"Test Async": "node test/async.js",
|
|
277
285
|
"Test Raylib": "xvfb-run node test/raylib.js",
|
|
278
|
-
"Test Misc": "node test/misc.js",
|
|
279
286
|
"Test SQLite": "node test/sqlite.js"
|
|
280
287
|
}
|
|
281
288
|
}
|
|
@@ -318,8 +325,9 @@
|
|
|
318
325
|
"Build": "node ../cnoke/cnoke.js -C test"
|
|
319
326
|
},
|
|
320
327
|
"commands": {
|
|
328
|
+
"Test Sync": "node test/sync.js",
|
|
329
|
+
"Test Async": "node test/async.js",
|
|
321
330
|
"Test Raylib": "xvfb-run node test/raylib.js",
|
|
322
|
-
"Test Misc": "node test/misc.js",
|
|
323
331
|
"Test SQLite": "node test/sqlite.js"
|
|
324
332
|
}
|
|
325
333
|
}
|
|
@@ -362,8 +370,9 @@
|
|
|
362
370
|
"Build": "node ../cnoke/cnoke.js -C test"
|
|
363
371
|
},
|
|
364
372
|
"commands": {
|
|
373
|
+
"Test Sync": "node test/sync.js",
|
|
374
|
+
"Test Async": "node test/async.js",
|
|
365
375
|
"Test Raylib": "xvfb-run node test/raylib.js",
|
|
366
|
-
"Test Misc": "node test/misc.js",
|
|
367
376
|
"Test SQLite": "node test/sqlite.js"
|
|
368
377
|
}
|
|
369
378
|
}
|
|
@@ -406,7 +415,8 @@
|
|
|
406
415
|
"Build": "PATH=/usr/local/bin:/usr/bin:/bin SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk node ../cnoke/cnoke.js -C test"
|
|
407
416
|
},
|
|
408
417
|
"commands": {
|
|
409
|
-
"Test
|
|
418
|
+
"Test Sync": "PATH=/usr/local/bin:/usr/bin:/bin node test/sync.js",
|
|
419
|
+
"Test Async": "PATH=/usr/local/bin:/usr/bin:/bin node test/async.js",
|
|
410
420
|
"Test SQLite": "PATH=/usr/local/bin:/usr/bin:/bin node test/sqlite.js"
|
|
411
421
|
}
|
|
412
422
|
}
|
package/src/abi_arm32.cc
CHANGED
|
@@ -305,8 +305,11 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
|
|
|
305
305
|
memset(ptr, 0, param.type->size);
|
|
306
306
|
}
|
|
307
307
|
if (param.directions & 2) {
|
|
308
|
-
OutObject out =
|
|
309
|
-
|
|
308
|
+
OutObject *out = out_objects.AppendDefault();
|
|
309
|
+
|
|
310
|
+
out->ref.Reset(obj, 1);
|
|
311
|
+
out->ptr = ptr;
|
|
312
|
+
out->type = param.type->ref;
|
|
310
313
|
}
|
|
311
314
|
} else if (IsNullOrUndefined(value)) {
|
|
312
315
|
ptr = nullptr;
|
|
@@ -391,6 +394,9 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
|
|
|
391
394
|
}
|
|
392
395
|
}
|
|
393
396
|
|
|
397
|
+
stack = MakeSpan(mem->stack.end(), old_stack_mem.end() - mem->stack.end());
|
|
398
|
+
heap = MakeSpan(old_heap_mem.ptr, mem->heap.ptr - old_heap_mem.ptr);
|
|
399
|
+
|
|
394
400
|
return true;
|
|
395
401
|
}
|
|
396
402
|
|
|
@@ -398,8 +404,8 @@ void CallData::Execute()
|
|
|
398
404
|
{
|
|
399
405
|
#define PERFORM_CALL(Suffix) \
|
|
400
406
|
([&]() { \
|
|
401
|
-
auto ret = (func->forward_fp ? ForwardCallX ## Suffix(func->func,
|
|
402
|
-
: ForwardCall ## Suffix(func->func,
|
|
407
|
+
auto ret = (func->forward_fp ? ForwardCallX ## Suffix(func->func, stack.ptr) \
|
|
408
|
+
: ForwardCall ## Suffix(func->func, stack.ptr)); \
|
|
403
409
|
return ret; \
|
|
404
410
|
})()
|
|
405
411
|
|
|
@@ -435,8 +441,9 @@ void CallData::Execute()
|
|
|
435
441
|
|
|
436
442
|
Napi::Value CallData::Complete()
|
|
437
443
|
{
|
|
438
|
-
for (const OutObject &
|
|
439
|
-
|
|
444
|
+
for (const OutObject &out: out_objects) {
|
|
445
|
+
Napi::Object obj = out.ref.Value().As<Napi::Object>();
|
|
446
|
+
PopObject(obj, out.ptr, out.type);
|
|
440
447
|
}
|
|
441
448
|
|
|
442
449
|
switch (func->ret.type->primitive) {
|
package/src/abi_arm64.cc
CHANGED
|
@@ -384,8 +384,11 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
|
|
|
384
384
|
memset(ptr, 0, param.type->size);
|
|
385
385
|
}
|
|
386
386
|
if (param.directions & 2) {
|
|
387
|
-
OutObject out =
|
|
388
|
-
|
|
387
|
+
OutObject *out = out_objects.AppendDefault();
|
|
388
|
+
|
|
389
|
+
out->ref.Reset(obj, 1);
|
|
390
|
+
out->ptr = ptr;
|
|
391
|
+
out->type = param.type->ref;
|
|
389
392
|
}
|
|
390
393
|
} else if (IsNullOrUndefined(value)) {
|
|
391
394
|
ptr = nullptr;
|
|
@@ -451,6 +454,9 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
|
|
|
451
454
|
}
|
|
452
455
|
}
|
|
453
456
|
|
|
457
|
+
stack = MakeSpan(mem->stack.end(), old_stack_mem.end() - mem->stack.end());
|
|
458
|
+
heap = MakeSpan(old_heap_mem.ptr, mem->heap.ptr - old_heap_mem.ptr);
|
|
459
|
+
|
|
454
460
|
return true;
|
|
455
461
|
}
|
|
456
462
|
|
|
@@ -458,8 +464,8 @@ void CallData::Execute()
|
|
|
458
464
|
{
|
|
459
465
|
#define PERFORM_CALL(Suffix) \
|
|
460
466
|
([&]() { \
|
|
461
|
-
auto ret = (func->forward_fp ? ForwardCallX ## Suffix(func->func,
|
|
462
|
-
: ForwardCall ## Suffix(func->func,
|
|
467
|
+
auto ret = (func->forward_fp ? ForwardCallX ## Suffix(func->func, stack.ptr) \
|
|
468
|
+
: ForwardCall ## Suffix(func->func, stack.ptr)); \
|
|
463
469
|
return ret; \
|
|
464
470
|
})()
|
|
465
471
|
|
|
@@ -498,8 +504,9 @@ void CallData::Execute()
|
|
|
498
504
|
|
|
499
505
|
Napi::Value CallData::Complete()
|
|
500
506
|
{
|
|
501
|
-
for (const OutObject &
|
|
502
|
-
|
|
507
|
+
for (const OutObject &out: out_objects) {
|
|
508
|
+
Napi::Object obj = out.ref.Value().As<Napi::Object>();
|
|
509
|
+
PopObject(obj, out.ptr, out.type);
|
|
503
510
|
}
|
|
504
511
|
|
|
505
512
|
switch (func->ret.type->primitive) {
|
package/src/abi_x64_sysv.cc
CHANGED
|
@@ -308,8 +308,11 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
|
|
|
308
308
|
memset(ptr, 0, param.type->size);
|
|
309
309
|
}
|
|
310
310
|
if (param.directions & 2) {
|
|
311
|
-
OutObject out =
|
|
312
|
-
|
|
311
|
+
OutObject *out = out_objects.AppendDefault();
|
|
312
|
+
|
|
313
|
+
out->ref.Reset(obj, 1);
|
|
314
|
+
out->ptr = ptr;
|
|
315
|
+
out->type = param.type->ref;
|
|
313
316
|
}
|
|
314
317
|
} else if (IsNullOrUndefined(value)) {
|
|
315
318
|
ptr = nullptr;
|
|
@@ -402,6 +405,9 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
|
|
|
402
405
|
}
|
|
403
406
|
}
|
|
404
407
|
|
|
408
|
+
stack = MakeSpan(mem->stack.end(), old_stack_mem.end() - mem->stack.end());
|
|
409
|
+
heap = MakeSpan(old_heap_mem.ptr, mem->heap.ptr - old_heap_mem.ptr);
|
|
410
|
+
|
|
405
411
|
return true;
|
|
406
412
|
}
|
|
407
413
|
|
|
@@ -409,8 +415,8 @@ void CallData::Execute()
|
|
|
409
415
|
{
|
|
410
416
|
#define PERFORM_CALL(Suffix) \
|
|
411
417
|
([&]() { \
|
|
412
|
-
auto ret = (func->forward_fp ? ForwardCallX ## Suffix(func->func,
|
|
413
|
-
: ForwardCall ## Suffix(func->func,
|
|
418
|
+
auto ret = (func->forward_fp ? ForwardCallX ## Suffix(func->func, stack.ptr) \
|
|
419
|
+
: ForwardCall ## Suffix(func->func, stack.ptr)); \
|
|
414
420
|
return ret; \
|
|
415
421
|
})()
|
|
416
422
|
|
|
@@ -453,8 +459,9 @@ void CallData::Execute()
|
|
|
453
459
|
|
|
454
460
|
Napi::Value CallData::Complete()
|
|
455
461
|
{
|
|
456
|
-
for (const OutObject &
|
|
457
|
-
|
|
462
|
+
for (const OutObject &out: out_objects) {
|
|
463
|
+
Napi::Object obj = out.ref.Value().As<Napi::Object>();
|
|
464
|
+
PopObject(obj, out.ptr, out.type);
|
|
458
465
|
}
|
|
459
466
|
|
|
460
467
|
switch (func->ret.type->primitive) {
|
package/src/abi_x64_win.cc
CHANGED
|
@@ -148,8 +148,11 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
|
|
|
148
148
|
memset(ptr, 0, param.type->size);
|
|
149
149
|
}
|
|
150
150
|
if (param.directions & 2) {
|
|
151
|
-
OutObject out =
|
|
152
|
-
|
|
151
|
+
OutObject *out = out_objects.AppendDefault();
|
|
152
|
+
|
|
153
|
+
out->ref.Reset(obj, 1);
|
|
154
|
+
out->ptr = ptr;
|
|
155
|
+
out->type = param.type->ref;
|
|
153
156
|
}
|
|
154
157
|
} else if (IsNullOrUndefined(value)) {
|
|
155
158
|
ptr = nullptr;
|
|
@@ -200,6 +203,9 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
|
|
|
200
203
|
}
|
|
201
204
|
}
|
|
202
205
|
|
|
206
|
+
stack = MakeSpan(mem->stack.end(), old_stack_mem.end() - mem->stack.end());
|
|
207
|
+
heap = MakeSpan(old_heap_mem.ptr, mem->heap.ptr - old_heap_mem.ptr);
|
|
208
|
+
|
|
203
209
|
return true;
|
|
204
210
|
}
|
|
205
211
|
|
|
@@ -207,8 +213,8 @@ void CallData::Execute()
|
|
|
207
213
|
{
|
|
208
214
|
#define PERFORM_CALL(Suffix) \
|
|
209
215
|
([&]() { \
|
|
210
|
-
auto ret = (func->forward_fp ? ForwardCallX ## Suffix(func->func,
|
|
211
|
-
: ForwardCall ## Suffix(func->func,
|
|
216
|
+
auto ret = (func->forward_fp ? ForwardCallX ## Suffix(func->func, stack.ptr) \
|
|
217
|
+
: ForwardCall ## Suffix(func->func, stack.ptr)); \
|
|
212
218
|
return ret; \
|
|
213
219
|
})()
|
|
214
220
|
|
|
@@ -236,8 +242,9 @@ void CallData::Execute()
|
|
|
236
242
|
|
|
237
243
|
Napi::Value CallData::Complete()
|
|
238
244
|
{
|
|
239
|
-
for (const OutObject &
|
|
240
|
-
|
|
245
|
+
for (const OutObject &out: out_objects) {
|
|
246
|
+
Napi::Object obj = out.ref.Value().As<Napi::Object>();
|
|
247
|
+
PopObject(obj, out.ptr, out.type);
|
|
241
248
|
}
|
|
242
249
|
|
|
243
250
|
switch (func->ret.type->primitive) {
|
package/src/abi_x86.cc
CHANGED
|
@@ -192,8 +192,11 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
|
|
|
192
192
|
memset(ptr, 0, param.type->size);
|
|
193
193
|
}
|
|
194
194
|
if (param.directions & 2) {
|
|
195
|
-
OutObject out =
|
|
196
|
-
|
|
195
|
+
OutObject *out = out_objects.AppendDefault();
|
|
196
|
+
|
|
197
|
+
out->ref.Reset(obj, 1);
|
|
198
|
+
out->ptr = ptr;
|
|
199
|
+
out->type = param.type->ref;
|
|
197
200
|
}
|
|
198
201
|
} else if (IsNullOrUndefined(value)) {
|
|
199
202
|
ptr = nullptr;
|
|
@@ -245,6 +248,9 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
|
|
|
245
248
|
}
|
|
246
249
|
}
|
|
247
250
|
|
|
251
|
+
stack = MakeSpan(mem->stack.end(), old_stack_mem.end() - mem->stack.end());
|
|
252
|
+
heap = MakeSpan(old_heap_mem.ptr, mem->heap.ptr - old_heap_mem.ptr);
|
|
253
|
+
|
|
248
254
|
return true;
|
|
249
255
|
}
|
|
250
256
|
|
|
@@ -252,8 +258,8 @@ void CallData::Execute()
|
|
|
252
258
|
{
|
|
253
259
|
#define PERFORM_CALL(Suffix) \
|
|
254
260
|
([&]() { \
|
|
255
|
-
auto ret = (func->convention == CallConvention::Fastcall ? ForwardCallR ## Suffix(func->func,
|
|
256
|
-
: ForwardCall ## Suffix(func->func,
|
|
261
|
+
auto ret = (func->convention == CallConvention::Fastcall ? ForwardCallR ## Suffix(func->func, stack.ptr) \
|
|
262
|
+
: ForwardCall ## Suffix(func->func, stack.ptr)); \
|
|
257
263
|
return ret; \
|
|
258
264
|
})()
|
|
259
265
|
|
|
@@ -282,8 +288,9 @@ void CallData::Execute()
|
|
|
282
288
|
|
|
283
289
|
Napi::Value CallData::Complete()
|
|
284
290
|
{
|
|
285
|
-
for (const OutObject &
|
|
286
|
-
|
|
291
|
+
for (const OutObject &out: out_objects) {
|
|
292
|
+
Napi::Object obj = out.ref.Value().As<Napi::Object>();
|
|
293
|
+
PopObject(obj, out.ptr, out.type);
|
|
287
294
|
}
|
|
288
295
|
|
|
289
296
|
switch (func->ret.type->primitive) {
|
package/src/call.cc
CHANGED
|
@@ -20,19 +20,24 @@
|
|
|
20
20
|
|
|
21
21
|
namespace RG {
|
|
22
22
|
|
|
23
|
-
CallData::CallData(Napi::Env env,
|
|
24
|
-
: env(env), instance(
|
|
25
|
-
|
|
26
|
-
old_stack_mem(instance->stack_mem), old_heap_mem(instance->heap_mem)
|
|
23
|
+
CallData::CallData(Napi::Env env, const FunctionInfo *func, InstanceMemory *mem, bool debug)
|
|
24
|
+
: env(env), instance(env.GetInstanceData<InstanceData>()), func(func), debug(debug),
|
|
25
|
+
mem(mem), old_stack_mem(mem->stack), old_heap_mem(mem->heap)
|
|
27
26
|
{
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
mem->depth++;
|
|
28
|
+
|
|
29
|
+
RG_ASSERT(AlignUp(mem->stack.ptr, 16) == mem->stack.ptr);
|
|
30
|
+
RG_ASSERT(AlignUp(mem->stack.end(), 16) == mem->stack.end());
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
CallData::~CallData()
|
|
33
34
|
{
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
mem->stack = old_stack_mem;
|
|
36
|
+
mem->heap = old_heap_mem;
|
|
37
|
+
|
|
38
|
+
if (!--mem->depth && mem->temporary) {
|
|
39
|
+
delete mem;
|
|
40
|
+
}
|
|
36
41
|
}
|
|
37
42
|
|
|
38
43
|
const char *CallData::PushString(const Napi::Value &value)
|
|
@@ -45,8 +50,8 @@ const char *CallData::PushString(const Napi::Value &value)
|
|
|
45
50
|
size_t len = 0;
|
|
46
51
|
napi_status status;
|
|
47
52
|
|
|
48
|
-
buf.ptr = (char *)
|
|
49
|
-
buf.len = std::max((Size)0,
|
|
53
|
+
buf.ptr = (char *)mem->heap.ptr;
|
|
54
|
+
buf.len = std::max((Size)0, mem->heap.len - Kibibytes(32));
|
|
50
55
|
|
|
51
56
|
status = napi_get_value_string_utf8(env, value, buf.ptr, (size_t)buf.len, &len);
|
|
52
57
|
RG_ASSERT(status == napi_ok);
|
|
@@ -54,15 +59,15 @@ const char *CallData::PushString(const Napi::Value &value)
|
|
|
54
59
|
len++;
|
|
55
60
|
|
|
56
61
|
if (RG_LIKELY(len < (size_t)buf.len)) {
|
|
57
|
-
|
|
58
|
-
|
|
62
|
+
mem->heap.ptr += (Size)len;
|
|
63
|
+
mem->heap.len -= (Size)len;
|
|
59
64
|
} else {
|
|
60
65
|
status = napi_get_value_string_utf8(env, value, nullptr, 0, &len);
|
|
61
66
|
RG_ASSERT(status == napi_ok);
|
|
62
67
|
|
|
63
68
|
len++;
|
|
64
69
|
|
|
65
|
-
buf.ptr = (char *)Allocator::Allocate(&big_alloc, (Size)len);
|
|
70
|
+
buf.ptr = (char *)Allocator::Allocate(&mem->big_alloc, (Size)len);
|
|
66
71
|
buf.len = (Size)len;
|
|
67
72
|
|
|
68
73
|
status = napi_get_value_string_utf8(env, value, buf.ptr, (size_t)buf.len, &len);
|
|
@@ -82,8 +87,8 @@ const char16_t *CallData::PushString16(const Napi::Value &value)
|
|
|
82
87
|
size_t len = 0;
|
|
83
88
|
napi_status status;
|
|
84
89
|
|
|
85
|
-
buf.ptr = (char16_t *)
|
|
86
|
-
buf.len = std::max((Size)0,
|
|
90
|
+
buf.ptr = (char16_t *)mem->heap.ptr;
|
|
91
|
+
buf.len = std::max((Size)0, mem->heap.len - Kibibytes(32)) / 2;
|
|
87
92
|
|
|
88
93
|
status = napi_get_value_string_utf16(env, value, buf.ptr, (size_t)buf.len, &len);
|
|
89
94
|
RG_ASSERT(status == napi_ok);
|
|
@@ -91,15 +96,15 @@ const char16_t *CallData::PushString16(const Napi::Value &value)
|
|
|
91
96
|
len++;
|
|
92
97
|
|
|
93
98
|
if (RG_LIKELY(len < (size_t)buf.len)) {
|
|
94
|
-
|
|
95
|
-
|
|
99
|
+
mem->heap.ptr += (Size)len * 2;
|
|
100
|
+
mem->heap.len -= (Size)len * 2;
|
|
96
101
|
} else {
|
|
97
102
|
status = napi_get_value_string_utf16(env, value, nullptr, 0, &len);
|
|
98
103
|
RG_ASSERT(status == napi_ok);
|
|
99
104
|
|
|
100
105
|
len++;
|
|
101
106
|
|
|
102
|
-
buf.ptr = (char16_t *)Allocator::Allocate(&big_alloc, (Size)len * 2);
|
|
107
|
+
buf.ptr = (char16_t *)Allocator::Allocate(&mem->big_alloc, (Size)len * 2);
|
|
103
108
|
buf.len = (Size)len;
|
|
104
109
|
|
|
105
110
|
status = napi_get_value_string_utf16(env, value, buf.ptr, (size_t)buf.len, &len);
|
|
@@ -111,9 +116,6 @@ const char16_t *CallData::PushString16(const Napi::Value &value)
|
|
|
111
116
|
|
|
112
117
|
bool CallData::PushObject(const Napi::Object &obj, const TypeInfo *type, uint8_t *dest)
|
|
113
118
|
{
|
|
114
|
-
Napi::Env env = obj.Env();
|
|
115
|
-
InstanceData *instance = env.GetInstanceData<InstanceData>();
|
|
116
|
-
|
|
117
119
|
RG_ASSERT(IsObject(obj));
|
|
118
120
|
RG_ASSERT(type->primitive == PrimitiveKind::Record);
|
|
119
121
|
|
|
@@ -226,9 +228,6 @@ bool CallData::PushObject(const Napi::Object &obj, const TypeInfo *type, uint8_t
|
|
|
226
228
|
|
|
227
229
|
void CallData::PopObject(Napi::Object obj, const uint8_t *ptr, const TypeInfo *type)
|
|
228
230
|
{
|
|
229
|
-
Napi::Env env = obj.Env();
|
|
230
|
-
InstanceData *instance = env.GetInstanceData<InstanceData>();
|
|
231
|
-
|
|
232
231
|
RG_ASSERT(type->primitive == PrimitiveKind::Record);
|
|
233
232
|
|
|
234
233
|
for (const RecordMember &member: type->members) {
|
|
@@ -346,8 +345,8 @@ void CallData::DumpDebug() const
|
|
|
346
345
|
}
|
|
347
346
|
PrintLn(stderr, "Return: %1 (%2)", func->ret.type->name, FmtMemSize(func->ret.type->size));
|
|
348
347
|
|
|
349
|
-
DumpMemory("Stack",
|
|
350
|
-
DumpMemory("Heap",
|
|
348
|
+
DumpMemory("Stack", stack);
|
|
349
|
+
DumpMemory("Heap", heap);
|
|
351
350
|
}
|
|
352
351
|
|
|
353
352
|
}
|