koffi 2.16.0-beta.2 → 2.16.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 +66 -0
- package/build/koffi/darwin_arm64/koffi.node +0 -0
- package/build/koffi/darwin_x64/koffi.node +0 -0
- package/build/koffi/freebsd_arm64/koffi.node +0 -0
- package/build/koffi/freebsd_ia32/koffi.node +0 -0
- package/build/koffi/freebsd_x64/koffi.node +0 -0
- package/build/koffi/linux_arm64/koffi.node +0 -0
- package/build/koffi/linux_armhf/koffi.node +0 -0
- package/build/koffi/linux_ia32/koffi.node +0 -0
- package/build/koffi/linux_loong64/koffi.node +0 -0
- package/build/koffi/linux_riscv64d/koffi.node +0 -0
- package/build/koffi/linux_x64/koffi.node +0 -0
- package/build/koffi/musl_arm64/koffi.node +0 -0
- package/build/koffi/musl_x64/koffi.node +0 -0
- package/build/koffi/openbsd_ia32/koffi.node +0 -0
- package/build/koffi/openbsd_x64/koffi.node +0 -0
- package/build/koffi/win32_arm64/koffi.exp +0 -0
- package/build/koffi/win32_arm64/koffi.lib +0 -0
- package/build/koffi/win32_arm64/koffi.node +0 -0
- package/build/koffi/win32_ia32/koffi.exp +0 -0
- package/build/koffi/win32_ia32/koffi.lib +0 -0
- package/build/koffi/win32_ia32/koffi.node +0 -0
- package/build/koffi/win32_x64/koffi.exp +0 -0
- package/build/koffi/win32_x64/koffi.lib +0 -0
- package/build/koffi/win32_x64/koffi.node +0 -0
- package/index.d.ts +9 -11
- package/index.js +6 -9
- package/indirect.js +6 -9
- package/lib/native/base/base.cc +1 -6
- package/package.json +3 -3
- package/src/cnoke/assets/FindCNoke.cmake +27 -16
- package/src/cnoke/assets/toolchains.json +126 -0
- package/src/cnoke/cnoke.js +27 -33
- package/src/cnoke/src/builder.js +124 -63
- package/src/cnoke/src/tools.js +1 -5
- package/src/koffi/CMakeLists.txt +32 -21
- package/src/koffi/src/{abi/arm32.cc → abi_arm32.cc} +235 -246
- package/src/koffi/src/{abi/arm32_asm.S → abi_arm32_asm.S} +19 -15
- package/src/koffi/src/{abi/arm64.cc → abi_arm64.cc} +253 -300
- package/src/koffi/src/{abi/arm64_asm.S → abi_arm64_asm.S} +16 -10
- package/src/koffi/src/{abi/arm64_asm.asm → abi_arm64_asm.asm} +17 -10
- package/src/koffi/src/{abi/loong64_asm.S → abi_loong64_asm.S} +16 -10
- package/src/koffi/src/{abi/riscv64.cc → abi_riscv64.cc} +233 -244
- package/src/koffi/src/{abi/riscv64_asm.S → abi_riscv64_asm.S} +16 -10
- package/src/koffi/src/{abi/x64_sysv.cc → abi_x64_sysv.cc} +208 -220
- package/src/koffi/src/{abi/x64_sysv_asm.S → abi_x64_sysv_asm.S} +17 -10
- package/src/koffi/src/{abi/x64_win.cc → abi_x64_win.cc} +175 -230
- package/src/koffi/src/{abi/x64_win_asm.S → abi_x64_win_asm.S} +49 -27
- package/src/koffi/src/{abi/x64_win_asm.asm → abi_x64_win_asm.asm} +54 -27
- package/src/koffi/src/{abi/x86.cc → abi_x86.cc} +187 -252
- package/src/koffi/src/{abi/x86_asm.S → abi_x86_asm.S} +38 -21
- package/src/koffi/src/{abi/x86_asm.asm → abi_x86_asm.asm} +33 -16
- package/src/koffi/src/call.cc +475 -290
- package/src/koffi/src/call.hh +15 -18
- package/src/koffi/src/ffi.cc +195 -184
- package/src/koffi/src/ffi.hh +60 -16
- package/src/koffi/src/init.js +1 -0
- package/src/koffi/src/util.cc +113 -159
- package/src/koffi/src/util.hh +23 -74
- package/src/koffi/src/win32.cc +13 -0
- package/src/koffi/src/win32.hh +7 -0
- package/src/koffi/tools/write_trampolines.js +77 -0
- package/doc/README.md +0 -27
- package/doc/assets.ini +0 -24
- package/doc/build.sh +0 -9
- package/doc/develop.sh +0 -15
- package/doc/pages/404.md +0 -17
- package/doc/pages.ini +0 -86
- package/doc/static/highlight.js +0 -8
- package/doc/static/koffi.css +0 -11
- package/doc/static/koffi.png +0 -0
- package/doc/static/logo.webp +0 -0
- package/doc/static/perf_linux.png +0 -0
- package/doc/static/perf_windows.png +0 -0
- package/doc/static/print.css +0 -10
- package/doc/templates/code.html +0 -48
- package/doc/templates/page.html +0 -47
- package/src/koffi/cmake/raylib.cmake +0 -85
- package/src/koffi/cmake/sqlite3.cmake +0 -9
- package/src/koffi/examples/electron-builder/README.md +0 -11
- package/src/koffi/examples/electron-builder/package.json +0 -21
- package/src/koffi/examples/electron-builder/src/app.js +0 -20
- package/src/koffi/examples/electron-builder/src/index.html +0 -143
- package/src/koffi/examples/electron-builder/src/preload.js +0 -5
- package/src/koffi/examples/electron-forge/README.md +0 -25
- package/src/koffi/examples/electron-forge/forge.config.js +0 -63
- package/src/koffi/examples/electron-forge/package.json +0 -39
- package/src/koffi/examples/electron-forge/src/index.css +0 -7
- package/src/koffi/examples/electron-forge/src/index.html +0 -143
- package/src/koffi/examples/electron-forge/src/main.js +0 -52
- package/src/koffi/examples/electron-forge/src/preload.js +0 -5
- package/src/koffi/examples/electron-forge/src/renderer.js +0 -31
- package/src/koffi/examples/electron-forge/webpack.main.config.js +0 -11
- package/src/koffi/examples/electron-forge/webpack.renderer.config.js +0 -13
- package/src/koffi/examples/electron-forge/webpack.rules.js +0 -35
- package/src/koffi/examples/node-esbuild/README.md +0 -19
- package/src/koffi/examples/node-esbuild/index.js +0 -2
- package/src/koffi/examples/node-esbuild/package.json +0 -16
- package/src/koffi/examples/nwjs/README.md +0 -20
- package/src/koffi/examples/nwjs/package.json +0 -11
- package/src/koffi/examples/nwjs/src/index.html +0 -145
- package/src/koffi/examples/nwjs/src/package.json +0 -10
- package/src/koffi/examples/yao-pkg/README.md +0 -17
- package/src/koffi/examples/yao-pkg/index.js +0 -2
- package/src/koffi/examples/yao-pkg/package.json +0 -22
- package/src/koffi/src/primitives.inc +0 -39
- package/src/koffi/src/trampolines/armasm.inc +0 -32771
- package/src/koffi/src/trampolines/gnu.inc +0 -24577
- package/src/koffi/src/trampolines/masm32.inc +0 -32769
- package/src/koffi/src/trampolines/masm64.inc +0 -32769
- package/src/koffi/src/trampolines/prototypes.inc +0 -16388
- package/vendor/node-addon-api/CHANGELOG.md +0 -1272
- package/vendor/node-addon-api/CODE_OF_CONDUCT.md +0 -4
- package/vendor/node-addon-api/CONTRIBUTING.md +0 -203
- 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 -250
- 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 -84
- package/vendor/node-addon-api/benchmark/property_descriptor.js +0 -38
- package/vendor/node-addon-api/common.gypi +0 -21
- package/vendor/node-addon-api/doc/README.md +0 -145
- 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 -165
- 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 -428
- package/vendor/node-addon-api/doc/async_worker_variants.md +0 -578
- package/vendor/node-addon-api/doc/basic_env.md +0 -200
- 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 -245
- 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 -87
- package/vendor/node-addon-api/doc/contributing/creating_a_release.md +0 -95
- package/vendor/node-addon-api/doc/conversion-tool.md +0 -28
- 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 -87
- package/vendor/node-addon-api/doc/error.md +0 -120
- package/vendor/node-addon-api/doc/error_handling.md +0 -266
- package/vendor/node-addon-api/doc/escapable_handle_scope.md +0 -80
- package/vendor/node-addon-api/doc/external.md +0 -79
- package/vendor/node-addon-api/doc/external_buffer.md +0 -18
- package/vendor/node-addon-api/doc/finalization.md +0 -153
- 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 -77
- package/vendor/node-addon-api/doc/hierarchy.md +0 -95
- 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 -604
- package/vendor/node-addon-api/doc/prebuild_tools.md +0 -16
- package/vendor/node-addon-api/doc/promises.md +0 -130
- 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 -115
- 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/syntax_error.md +0 -66
- 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/type_taggable.md +0 -40
- 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 -368
- package/vendor/node-addon-api/doc/version_management.md +0 -43
- package/vendor/node-addon-api/eslint.config.js +0 -5
- package/vendor/node-addon-api/except.gypi +0 -25
- package/vendor/node-addon-api/index.js +0 -14
- package/vendor/node-addon-api/node_addon_api.gyp +0 -42
- package/vendor/node-addon-api/node_api.gyp +0 -9
- package/vendor/node-addon-api/noexcept.gypi +0 -26
- package/vendor/node-addon-api/nothing.c +0 -0
- package/vendor/node-addon-api/package-support.json +0 -21
- package/vendor/node-addon-api/package.json +0 -480
- package/vendor/node-addon-api/release-please-config.json +0 -15
- package/vendor/node-addon-api/test/README.md +0 -91
- package/vendor/node-addon-api/test/addon.cc +0 -44
- package/vendor/node-addon-api/test/addon.js +0 -7
- package/vendor/node-addon-api/test/addon_build/index.js +0 -49
- package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +0 -18
- package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +0 -63
- 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 -98
- package/vendor/node-addon-api/test/addon_data.js +0 -24
- package/vendor/node-addon-api/test/array_buffer.cc +0 -243
- package/vendor/node-addon-api/test/array_buffer.js +0 -70
- 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 -248
- package/vendor/node-addon-api/test/async_progress_queue_worker.js +0 -180
- package/vendor/node-addon-api/test/async_progress_worker.cc +0 -357
- package/vendor/node-addon-api/test/async_progress_worker.js +0 -200
- package/vendor/node-addon-api/test/async_worker.cc +0 -341
- package/vendor/node-addon-api/test/async_worker.js +0 -264
- package/vendor/node-addon-api/test/async_worker_nocallback.js +0 -19
- 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 -34
- package/vendor/node-addon-api/test/basic_types/boolean.cc +0 -40
- package/vendor/node-addon-api/test/basic_types/boolean.js +0 -34
- package/vendor/node-addon-api/test/basic_types/number.cc +0 -105
- package/vendor/node-addon-api/test/basic_types/number.js +0 -115
- package/vendor/node-addon-api/test/basic_types/value.cc +0 -177
- package/vendor/node-addon-api/test/basic_types/value.js +0 -173
- 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 -200
- package/vendor/node-addon-api/test/binding.gyp +0 -160
- package/vendor/node-addon-api/test/buffer.cc +0 -185
- package/vendor/node-addon-api/test/buffer.h +0 -26
- package/vendor/node-addon-api/test/buffer.js +0 -150
- package/vendor/node-addon-api/test/buffer_new_or_copy-inl.h +0 -68
- package/vendor/node-addon-api/test/buffer_no_external.cc +0 -24
- package/vendor/node-addon-api/test/callbackInfo.cc +0 -27
- package/vendor/node-addon-api/test/callbackInfo.js +0 -9
- package/vendor/node-addon-api/test/callbackscope.cc +0 -39
- package/vendor/node-addon-api/test/callbackscope.js +0 -49
- package/vendor/node-addon-api/test/child_processes/addon.js +0 -11
- package/vendor/node-addon-api/test/child_processes/addon_data.js +0 -24
- package/vendor/node-addon-api/test/child_processes/objectwrap_function.js +0 -22
- package/vendor/node-addon-api/test/child_processes/threadsafe_function_exception.js +0 -33
- package/vendor/node-addon-api/test/child_processes/typed_threadsafe_function_exception.js +0 -19
- package/vendor/node-addon-api/test/common/index.js +0 -246
- 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 -92
- package/vendor/node-addon-api/test/date.cc +0 -45
- package/vendor/node-addon-api/test/date.js +0 -18
- package/vendor/node-addon-api/test/env_cleanup.cc +0 -100
- package/vendor/node-addon-api/test/env_cleanup.js +0 -55
- package/vendor/node-addon-api/test/env_misc.cc +0 -25
- package/vendor/node-addon-api/test/env_misc.js +0 -12
- package/vendor/node-addon-api/test/error.cc +0 -436
- package/vendor/node-addon-api/test/error.js +0 -111
- 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 -99
- package/vendor/node-addon-api/test/except_all.cc +0 -22
- package/vendor/node-addon-api/test/except_all.js +0 -14
- package/vendor/node-addon-api/test/exports.js +0 -19
- package/vendor/node-addon-api/test/external.cc +0 -85
- package/vendor/node-addon-api/test/external.js +0 -85
- package/vendor/node-addon-api/test/finalizer_order.cc +0 -152
- package/vendor/node-addon-api/test/finalizer_order.js +0 -98
- package/vendor/node-addon-api/test/function.cc +0 -338
- package/vendor/node-addon-api/test/function.js +0 -137
- package/vendor/node-addon-api/test/function_reference.cc +0 -204
- 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 -58
- 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 -56
- 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 -46
- 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 -56
- package/vendor/node-addon-api/test/handlescope.cc +0 -86
- package/vendor/node-addon-api/test/handlescope.js +0 -16
- package/vendor/node-addon-api/test/index.js +0 -160
- package/vendor/node-addon-api/test/maybe/check.cc +0 -69
- package/vendor/node-addon-api/test/maybe/index.js +0 -50
- package/vendor/node-addon-api/test/memory_management.cc +0 -18
- 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 -110
- 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 -30
- 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 -430
- package/vendor/node-addon-api/test/object/object.js +0 -218
- package/vendor/node-addon-api/test/object/object_deprecated.cc +0 -70
- package/vendor/node-addon-api/test/object/object_deprecated.js +0 -42
- 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 -417
- package/vendor/node-addon-api/test/object_reference.js +0 -262
- package/vendor/node-addon-api/test/objectwrap.cc +0 -295
- package/vendor/node-addon-api/test/objectwrap.js +0 -309
- 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 -43
- package/vendor/node-addon-api/test/objectwrap_function.js +0 -6
- 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 -32
- package/vendor/node-addon-api/test/objectwrap_worker_thread.js +0 -20
- package/vendor/node-addon-api/test/promise.cc +0 -111
- package/vendor/node-addon-api/test/promise.js +0 -43
- package/vendor/node-addon-api/test/reference.cc +0 -78
- package/vendor/node-addon-api/test/reference.js +0 -20
- package/vendor/node-addon-api/test/require_basic_finalizers/index.js +0 -38
- package/vendor/node-addon-api/test/require_basic_finalizers/tpl/addon.cc +0 -12
- package/vendor/node-addon-api/test/require_basic_finalizers/tpl/binding.gyp +0 -48
- package/vendor/node-addon-api/test/require_basic_finalizers/tpl/index.js +0 -3
- package/vendor/node-addon-api/test/require_basic_finalizers/tpl/package.json +0 -11
- 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 -66
- package/vendor/node-addon-api/test/testUtil.js +0 -54
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +0 -230
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +0 -225
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +0 -155
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +0 -13
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_exception.cc +0 -50
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_exception.js +0 -20
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +0 -125
- 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 -27
- 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 -240
- 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 -55
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +0 -98
- package/vendor/node-addon-api/test/thunking_manual.cc +0 -127
- package/vendor/node-addon-api/test/thunking_manual.js +0 -16
- package/vendor/node-addon-api/test/type_taggable.cc +0 -66
- package/vendor/node-addon-api/test/type_taggable.js +0 -59
- 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 -120
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +0 -14
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_exception.cc +0 -39
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_exception.js +0 -13
- 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 -32
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +0 -8
- 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 -67
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +0 -98
- package/vendor/node-addon-api/test/typedarray-bigint.js +0 -58
- package/vendor/node-addon-api/test/typedarray.cc +0 -413
- package/vendor/node-addon-api/test/typedarray.js +0 -103
- package/vendor/node-addon-api/test/value_type_cast.cc +0 -60
- package/vendor/node-addon-api/test/value_type_cast.js +0 -106
- package/vendor/node-addon-api/test/version_management.cc +0 -28
- package/vendor/node-addon-api/test/version_management.js +0 -29
- package/vendor/node-addon-api/tools/README.md +0 -73
- package/vendor/node-addon-api/tools/check-napi.js +0 -99
- package/vendor/node-addon-api/tools/clang-format.js +0 -71
- package/vendor/node-addon-api/tools/conversion.js +0 -301
- 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/vendor/node-api-headers/CHANGELOG.md +0 -130
- package/vendor/node-api-headers/CODE_OF_CONDUCT.md +0 -4
- package/vendor/node-api-headers/CONTRIBUTING.md +0 -32
- package/vendor/node-api-headers/CREATING_A_RELEASE.md +0 -68
- package/vendor/node-api-headers/index.js +0 -17
- package/vendor/node-api-headers/lib/clang-utils.js +0 -50
- package/vendor/node-api-headers/lib/parse-utils.js +0 -92
- package/vendor/node-api-headers/package.json +0 -59
- package/vendor/node-api-headers/release-please-config.json +0 -12
- package/vendor/node-api-headers/scripts/update-headers.js +0 -246
- package/vendor/node-api-headers/scripts/write-symbols.js +0 -154
- package/vendor/node-api-headers/scripts/write-win32-def.js +0 -52
- package/vendor/node-api-headers/symbols.js +0 -257
- package/vendor/node-api-headers/test/parse-utils.js +0 -21
- /package/doc/{pages/benchmarks.md → benchmarks.md} +0 -0
- /package/doc/{pages/callbacks.md → callbacks.md} +0 -0
- /package/doc/{pages/contribute.md → contribute.md} +0 -0
- /package/doc/{pages/functions.md → functions.md} +0 -0
- /package/doc/{pages/index.md → index.md} +0 -0
- /package/doc/{pages/input.md → input.md} +0 -0
- /package/doc/{pages/migration.md → migration.md} +0 -0
- /package/doc/{pages/misc.md → misc.md} +0 -0
- /package/doc/{pages/output.md → output.md} +0 -0
- /package/doc/{pages/packaging.md → packaging.md} +0 -0
- /package/doc/{pages/platforms.md → platforms.md} +0 -0
- /package/doc/{pages/pointers.md → pointers.md} +0 -0
- /package/doc/{pages/start.md → start.md} +0 -0
- /package/doc/{pages/unions.md → unions.md} +0 -0
- /package/doc/{pages/variables.md → variables.md} +0 -0
- /package/src/koffi/src/{abi/loong64.cc → abi_loong64.cc} +0 -0
package/src/koffi/src/ffi.hh
CHANGED
|
@@ -22,18 +22,70 @@ static const Size MaxParameters = 64;
|
|
|
22
22
|
static const Size MaxTrampolines = 8192;
|
|
23
23
|
|
|
24
24
|
enum class PrimitiveKind {
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
// Void is explictly not first so that it is not 0, for reasons related to N-API type tags.
|
|
26
|
+
// Look at TypeInfo definition for more information!
|
|
27
|
+
Bool,
|
|
28
|
+
Void,
|
|
29
|
+
Int8,
|
|
30
|
+
UInt8,
|
|
31
|
+
Int16,
|
|
32
|
+
Int16S, // Keep behind Int16
|
|
33
|
+
UInt16,
|
|
34
|
+
UInt16S, // Keep behind UInt16
|
|
35
|
+
Int32,
|
|
36
|
+
Int32S, // Keep behind Int32
|
|
37
|
+
UInt32,
|
|
38
|
+
UInt32S, // Keep behind UInt32
|
|
39
|
+
Int64,
|
|
40
|
+
Int64S, // Keep behind Int64
|
|
41
|
+
UInt64,
|
|
42
|
+
UInt64S, // Keep behind UInt64
|
|
43
|
+
String,
|
|
44
|
+
String16,
|
|
45
|
+
String32,
|
|
46
|
+
Pointer,
|
|
47
|
+
Record,
|
|
48
|
+
Union,
|
|
49
|
+
Array,
|
|
50
|
+
Float32,
|
|
51
|
+
Float64,
|
|
52
|
+
Prototype,
|
|
53
|
+
Callback
|
|
27
54
|
};
|
|
28
55
|
static const char *const PrimitiveKindNames[] = {
|
|
29
|
-
|
|
30
|
-
|
|
56
|
+
"Bool",
|
|
57
|
+
"Void",
|
|
58
|
+
"Int8",
|
|
59
|
+
"UInt8",
|
|
60
|
+
"Int16",
|
|
61
|
+
"Int16S",
|
|
62
|
+
"UInt16",
|
|
63
|
+
"UInt16S",
|
|
64
|
+
"Int32",
|
|
65
|
+
"Int32S",
|
|
66
|
+
"UInt32",
|
|
67
|
+
"UInt32S",
|
|
68
|
+
"Int64",
|
|
69
|
+
"Int64S",
|
|
70
|
+
"UInt64",
|
|
71
|
+
"UInt64S",
|
|
72
|
+
"String",
|
|
73
|
+
"String16",
|
|
74
|
+
"String32",
|
|
75
|
+
"Pointer",
|
|
76
|
+
"Record",
|
|
77
|
+
"Union",
|
|
78
|
+
"Array",
|
|
79
|
+
"Float32",
|
|
80
|
+
"Float64",
|
|
81
|
+
"Prototype",
|
|
82
|
+
"Callback"
|
|
31
83
|
};
|
|
32
84
|
|
|
33
85
|
struct TypeInfo;
|
|
34
86
|
struct RecordMember;
|
|
35
87
|
struct FunctionInfo;
|
|
36
|
-
|
|
88
|
+
struct CallData;
|
|
37
89
|
|
|
38
90
|
typedef void DisposeFunc (Napi::Env env, const TypeInfo *type, const void *ptr);
|
|
39
91
|
|
|
@@ -57,7 +109,7 @@ static const char *const ArrayHintNames[] = {
|
|
|
57
109
|
struct TypeInfo {
|
|
58
110
|
const char *name;
|
|
59
111
|
|
|
60
|
-
// Make sure
|
|
112
|
+
// Make sure primitie ends up as the upper N-API tag value when we cast TypeInfo pointers to
|
|
61
113
|
// napi_type_tag pointers. Yes, I want to do this. We don't do strict aliasing here.
|
|
62
114
|
// N.B. Some node versions don't like when one of the two tag values is 0, so make sure
|
|
63
115
|
// this does not happen! It would happen if primitive is 0 and size is 0. To avoid this
|
|
@@ -72,6 +124,7 @@ struct TypeInfo {
|
|
|
72
124
|
|
|
73
125
|
HeapArray<RecordMember> members; // Record only
|
|
74
126
|
union {
|
|
127
|
+
const void *marker;
|
|
75
128
|
const TypeInfo *type; // Pointer or array
|
|
76
129
|
const FunctionInfo *proto; // Callback only
|
|
77
130
|
} ref;
|
|
@@ -170,7 +223,6 @@ struct FunctionInfo {
|
|
|
170
223
|
|
|
171
224
|
ParameterInfo ret;
|
|
172
225
|
HeapArray<ParameterInfo> parameters;
|
|
173
|
-
HeapArray<PrimitiveKind> primitives;
|
|
174
226
|
int8_t required_parameters;
|
|
175
227
|
int8_t out_parameters;
|
|
176
228
|
bool variadic;
|
|
@@ -197,8 +249,6 @@ struct InstanceMemory {
|
|
|
197
249
|
Span<uint8_t> stack0;
|
|
198
250
|
Span<uint8_t> heap;
|
|
199
251
|
|
|
200
|
-
uint16_t generation; // Can wrap without risk
|
|
201
|
-
|
|
202
252
|
bool busy;
|
|
203
253
|
bool temporary;
|
|
204
254
|
int depth;
|
|
@@ -228,9 +278,6 @@ struct InstanceData {
|
|
|
228
278
|
LocalArray<InstanceMemory *, 17> memories;
|
|
229
279
|
int temporaries = 0;
|
|
230
280
|
|
|
231
|
-
// Variadic cache
|
|
232
|
-
FunctionInfo *variadic_func = nullptr;
|
|
233
|
-
|
|
234
281
|
std::thread::id main_thread_id;
|
|
235
282
|
napi_threadsafe_function broker = nullptr;
|
|
236
283
|
|
|
@@ -256,9 +303,6 @@ struct InstanceData {
|
|
|
256
303
|
int resident_async_pools = DefaultResidentAsyncPools;
|
|
257
304
|
int max_temporaries = DefaultMaxAsyncCalls - DefaultResidentAsyncPools;
|
|
258
305
|
Size max_type_size = DefaultMaxTypeSize;
|
|
259
|
-
|
|
260
|
-
bool fast_pointers = false;
|
|
261
|
-
bool fast_callbacks = false;
|
|
262
306
|
} config;
|
|
263
307
|
|
|
264
308
|
struct {
|
|
@@ -276,7 +320,7 @@ struct TrampolineInfo {
|
|
|
276
320
|
Napi::FunctionReference func;
|
|
277
321
|
Napi::Reference<Napi::Value> recv;
|
|
278
322
|
|
|
279
|
-
|
|
323
|
+
bool used;
|
|
280
324
|
};
|
|
281
325
|
|
|
282
326
|
struct SharedData {
|
package/src/koffi/src/init.js
CHANGED
|
@@ -38,6 +38,7 @@ function init(triplet, native) {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
let filenames = roots.flatMap(root => triplets.flatMap(triplet => [
|
|
41
|
+
`${root}/koffi/build/koffi/${triplet}/koffi.node`,
|
|
41
42
|
`${root}/build/koffi/${triplet}/koffi.node`,
|
|
42
43
|
`${root}/koffi/${triplet}/koffi.node`,
|
|
43
44
|
`${root}/node_modules/koffi/build/koffi/${triplet}/koffi.node`,
|
package/src/koffi/src/util.cc
CHANGED
|
@@ -532,7 +532,7 @@ const char *GetValueType(const InstanceData *instance, Napi::Value value)
|
|
|
532
532
|
if (CheckValueTag(value, &TypeInfoMarker))
|
|
533
533
|
return "Type";
|
|
534
534
|
for (const TypeInfo &type: instance->types) {
|
|
535
|
-
if (type.ref.
|
|
535
|
+
if (type.ref.marker && CheckValueTag(value, type.ref.marker))
|
|
536
536
|
return type.name;
|
|
537
537
|
}
|
|
538
538
|
|
|
@@ -857,7 +857,8 @@ void DecodeObject(Napi::Object obj, const uint8_t *origin, const TypeInfo *type)
|
|
|
857
857
|
const char32_t *str32 = *(const char32_t **)src;
|
|
858
858
|
obj.Set(member.name, str32 ? MakeStringFromUTF32(env, str32) : env.Null());
|
|
859
859
|
} break;
|
|
860
|
-
case PrimitiveKind::Pointer:
|
|
860
|
+
case PrimitiveKind::Pointer:
|
|
861
|
+
case PrimitiveKind::Callback: {
|
|
861
862
|
void *ptr2 = *(void **)src;
|
|
862
863
|
|
|
863
864
|
if (member.countedby >= 0) {
|
|
@@ -866,20 +867,14 @@ void DecodeObject(Napi::Object obj, const uint8_t *origin, const TypeInfo *type)
|
|
|
866
867
|
|
|
867
868
|
Napi::Value value = DecodeArray(env, (const uint8_t *)ptr2, member.type, len);
|
|
868
869
|
obj.Set(member.name, value);
|
|
869
|
-
} else {
|
|
870
|
-
Napi::
|
|
871
|
-
|
|
872
|
-
}
|
|
870
|
+
} else if (ptr2) {
|
|
871
|
+
Napi::External<void> external = Napi::External<void>::New(env, ptr2);
|
|
872
|
+
SetValueTag(external, member.type->ref.marker);
|
|
873
873
|
|
|
874
|
-
|
|
875
|
-
|
|
874
|
+
obj.Set(member.name, external);
|
|
875
|
+
} else {
|
|
876
|
+
obj.Set(member.name, env.Null());
|
|
876
877
|
}
|
|
877
|
-
} break;
|
|
878
|
-
case PrimitiveKind::Callback: {
|
|
879
|
-
void *ptr2 = *(void **)src;
|
|
880
|
-
|
|
881
|
-
Napi::Value p = ptr2 ? WrapCallback(env, member.type->ref.type, ptr2) : env.Null();
|
|
882
|
-
obj.Set(member.name, p);
|
|
883
878
|
|
|
884
879
|
if (member.type->dispose) {
|
|
885
880
|
member.type->dispose(env, member.type, ptr2);
|
|
@@ -941,8 +936,7 @@ Napi::Value DecodeArray(Napi::Env env, const uint8_t *origin, const TypeInfo *ty
|
|
|
941
936
|
\
|
|
942
937
|
return array; \
|
|
943
938
|
} while (false)
|
|
944
|
-
|
|
945
|
-
#define POP_NUMBERS(TypedArrayType, CType) \
|
|
939
|
+
#define POP_NUMBER_ARRAY(TypedArrayType, CType) \
|
|
946
940
|
do { \
|
|
947
941
|
if (type->hint == ArrayHint::Array) { \
|
|
948
942
|
POP_ARRAY({ \
|
|
@@ -958,7 +952,7 @@ Napi::Value DecodeArray(Napi::Env env, const uint8_t *origin, const TypeInfo *ty
|
|
|
958
952
|
return array; \
|
|
959
953
|
} \
|
|
960
954
|
} while (false)
|
|
961
|
-
#define
|
|
955
|
+
#define POP_NUMBER_ARRAY_SWAP(TypedArrayType, CType) \
|
|
962
956
|
do { \
|
|
963
957
|
if (type->hint == ArrayHint::Array) { \
|
|
964
958
|
POP_ARRAY({ \
|
|
@@ -994,9 +988,9 @@ Napi::Value DecodeArray(Napi::Env env, const uint8_t *origin, const TypeInfo *ty
|
|
|
994
988
|
return str;
|
|
995
989
|
}
|
|
996
990
|
|
|
997
|
-
|
|
991
|
+
POP_NUMBER_ARRAY(Int8Array, int8_t);
|
|
998
992
|
} break;
|
|
999
|
-
case PrimitiveKind::UInt8: {
|
|
993
|
+
case PrimitiveKind::UInt8: { POP_NUMBER_ARRAY(Uint8Array, uint8_t); } break;
|
|
1000
994
|
case PrimitiveKind::Int16: {
|
|
1001
995
|
if (type->hint == ArrayHint::String) {
|
|
1002
996
|
const char16_t *ptr = (const char16_t *)origin;
|
|
@@ -1006,11 +1000,11 @@ Napi::Value DecodeArray(Napi::Env env, const uint8_t *origin, const TypeInfo *ty
|
|
|
1006
1000
|
return str;
|
|
1007
1001
|
}
|
|
1008
1002
|
|
|
1009
|
-
|
|
1003
|
+
POP_NUMBER_ARRAY(Int16Array, int16_t);
|
|
1010
1004
|
} break;
|
|
1011
|
-
case PrimitiveKind::Int16S: {
|
|
1012
|
-
case PrimitiveKind::UInt16: {
|
|
1013
|
-
case PrimitiveKind::UInt16S: {
|
|
1005
|
+
case PrimitiveKind::Int16S: { POP_NUMBER_ARRAY_SWAP(Int16Array, int16_t); } break;
|
|
1006
|
+
case PrimitiveKind::UInt16: { POP_NUMBER_ARRAY(Uint16Array, uint16_t); } break;
|
|
1007
|
+
case PrimitiveKind::UInt16S: { POP_NUMBER_ARRAY_SWAP(Uint16Array, uint16_t); } break;
|
|
1014
1008
|
case PrimitiveKind::Int32: {
|
|
1015
1009
|
if (type->hint == ArrayHint::String) {
|
|
1016
1010
|
const char32_t *ptr = (const char32_t *)origin;
|
|
@@ -1020,11 +1014,11 @@ Napi::Value DecodeArray(Napi::Env env, const uint8_t *origin, const TypeInfo *ty
|
|
|
1020
1014
|
return str;
|
|
1021
1015
|
}
|
|
1022
1016
|
|
|
1023
|
-
|
|
1017
|
+
POP_NUMBER_ARRAY(Int32Array, int32_t);
|
|
1024
1018
|
} break;
|
|
1025
|
-
case PrimitiveKind::Int32S: {
|
|
1026
|
-
case PrimitiveKind::UInt32: {
|
|
1027
|
-
case PrimitiveKind::UInt32S: {
|
|
1019
|
+
case PrimitiveKind::Int32S: { POP_NUMBER_ARRAY_SWAP(Int32Array, int32_t); } break;
|
|
1020
|
+
case PrimitiveKind::UInt32: { POP_NUMBER_ARRAY(Uint32Array, uint32_t); } break;
|
|
1021
|
+
case PrimitiveKind::UInt32S: { POP_NUMBER_ARRAY_SWAP(Uint32Array, uint32_t); } break;
|
|
1028
1022
|
case PrimitiveKind::Int64: {
|
|
1029
1023
|
POP_ARRAY({
|
|
1030
1024
|
int64_t v = *(int64_t *)src;
|
|
@@ -1067,20 +1061,19 @@ Napi::Value DecodeArray(Napi::Env env, const uint8_t *origin, const TypeInfo *ty
|
|
|
1067
1061
|
array.Set(i, str32 ? MakeStringFromUTF32(env, str32) : env.Null());
|
|
1068
1062
|
});
|
|
1069
1063
|
} break;
|
|
1070
|
-
case PrimitiveKind::Pointer:
|
|
1071
|
-
POP_ARRAY({
|
|
1072
|
-
void *ptr2 = *(void **)src;
|
|
1073
|
-
|
|
1074
|
-
Napi::Value p = ptr2 ? WrapPointer(env, type->ref.type->ref.type, ptr2) : env.Null();
|
|
1075
|
-
array.Set(i, p);
|
|
1076
|
-
});
|
|
1077
|
-
} break;
|
|
1064
|
+
case PrimitiveKind::Pointer:
|
|
1078
1065
|
case PrimitiveKind::Callback: {
|
|
1079
1066
|
POP_ARRAY({
|
|
1080
1067
|
void *ptr2 = *(void **)src;
|
|
1081
1068
|
|
|
1082
|
-
|
|
1083
|
-
|
|
1069
|
+
if (ptr2) {
|
|
1070
|
+
Napi::External<void> external = Napi::External<void>::New(env, ptr2);
|
|
1071
|
+
SetValueTag(external, type->ref.type->ref.marker);
|
|
1072
|
+
|
|
1073
|
+
array.Set(i, external);
|
|
1074
|
+
} else {
|
|
1075
|
+
array.Set(i, env.Null());
|
|
1076
|
+
}
|
|
1084
1077
|
});
|
|
1085
1078
|
} break;
|
|
1086
1079
|
case PrimitiveKind::Record:
|
|
@@ -1096,15 +1089,14 @@ Napi::Value DecodeArray(Napi::Env env, const uint8_t *origin, const TypeInfo *ty
|
|
|
1096
1089
|
array.Set(i, value);
|
|
1097
1090
|
});
|
|
1098
1091
|
} break;
|
|
1099
|
-
case PrimitiveKind::Float32: {
|
|
1100
|
-
case PrimitiveKind::Float64: {
|
|
1092
|
+
case PrimitiveKind::Float32: { POP_NUMBER_ARRAY(Float32Array, float); } break;
|
|
1093
|
+
case PrimitiveKind::Float64: { POP_NUMBER_ARRAY(Float64Array, double); } break;
|
|
1101
1094
|
|
|
1102
1095
|
case PrimitiveKind::Prototype: { K_UNREACHABLE(); } break;
|
|
1103
1096
|
}
|
|
1104
1097
|
|
|
1105
|
-
#undef
|
|
1106
|
-
#undef
|
|
1107
|
-
|
|
1098
|
+
#undef POP_NUMBER_ARRAY_SWAP
|
|
1099
|
+
#undef POP_NUMBER_ARRAY
|
|
1108
1100
|
#undef POP_ARRAY
|
|
1109
1101
|
|
|
1110
1102
|
K_UNREACHABLE();
|
|
@@ -1139,15 +1131,14 @@ void DecodeNormalArray(Napi::Array array, const uint8_t *origin, const TypeInfo
|
|
|
1139
1131
|
offset += ref->size; \
|
|
1140
1132
|
} \
|
|
1141
1133
|
} while (false)
|
|
1142
|
-
|
|
1143
|
-
#define POP_NUMBERS(CType) \
|
|
1134
|
+
#define POP_NUMBER_ARRAY(CType) \
|
|
1144
1135
|
do { \
|
|
1145
1136
|
POP_ARRAY({ \
|
|
1146
1137
|
double d = (double)*(CType *)src; \
|
|
1147
1138
|
array.Set(i, Napi::Number::New(env, d)); \
|
|
1148
1139
|
}); \
|
|
1149
1140
|
} while (false)
|
|
1150
|
-
#define
|
|
1141
|
+
#define POP_NUMBER_ARRAY_SWAP(CType) \
|
|
1151
1142
|
do { \
|
|
1152
1143
|
POP_ARRAY({ \
|
|
1153
1144
|
CType v = *(CType *)src; \
|
|
@@ -1165,16 +1156,16 @@ void DecodeNormalArray(Napi::Array array, const uint8_t *origin, const TypeInfo
|
|
|
1165
1156
|
array.Set(i, Napi::Boolean::New(env, b));
|
|
1166
1157
|
});
|
|
1167
1158
|
} break;
|
|
1168
|
-
case PrimitiveKind::Int8: {
|
|
1169
|
-
case PrimitiveKind::UInt8: {
|
|
1170
|
-
case PrimitiveKind::Int16: {
|
|
1171
|
-
case PrimitiveKind::Int16S: {
|
|
1172
|
-
case PrimitiveKind::UInt16: {
|
|
1173
|
-
case PrimitiveKind::UInt16S: {
|
|
1174
|
-
case PrimitiveKind::Int32: {
|
|
1175
|
-
case PrimitiveKind::Int32S: {
|
|
1176
|
-
case PrimitiveKind::UInt32: {
|
|
1177
|
-
case PrimitiveKind::UInt32S: {
|
|
1159
|
+
case PrimitiveKind::Int8: { POP_NUMBER_ARRAY(int8_t); } break;
|
|
1160
|
+
case PrimitiveKind::UInt8: { POP_NUMBER_ARRAY(uint8_t); } break;
|
|
1161
|
+
case PrimitiveKind::Int16: { POP_NUMBER_ARRAY(int16_t); } break;
|
|
1162
|
+
case PrimitiveKind::Int16S: { POP_NUMBER_ARRAY_SWAP(int16_t); } break;
|
|
1163
|
+
case PrimitiveKind::UInt16: { POP_NUMBER_ARRAY(uint16_t); } break;
|
|
1164
|
+
case PrimitiveKind::UInt16S: { POP_NUMBER_ARRAY_SWAP(uint16_t); } break;
|
|
1165
|
+
case PrimitiveKind::Int32: { POP_NUMBER_ARRAY(int32_t); } break;
|
|
1166
|
+
case PrimitiveKind::Int32S: { POP_NUMBER_ARRAY_SWAP(int32_t); } break;
|
|
1167
|
+
case PrimitiveKind::UInt32: { POP_NUMBER_ARRAY(uint32_t); } break;
|
|
1168
|
+
case PrimitiveKind::UInt32S: { POP_NUMBER_ARRAY_SWAP(uint32_t); } break;
|
|
1178
1169
|
case PrimitiveKind::Int64: {
|
|
1179
1170
|
POP_ARRAY({
|
|
1180
1171
|
int64_t v = *(int64_t *)src;
|
|
@@ -1229,24 +1220,19 @@ void DecodeNormalArray(Napi::Array array, const uint8_t *origin, const TypeInfo
|
|
|
1229
1220
|
}
|
|
1230
1221
|
});
|
|
1231
1222
|
} break;
|
|
1232
|
-
case PrimitiveKind::Pointer:
|
|
1223
|
+
case PrimitiveKind::Pointer:
|
|
1224
|
+
case PrimitiveKind::Callback: {
|
|
1233
1225
|
POP_ARRAY({
|
|
1234
1226
|
void *ptr2 = *(void **)src;
|
|
1235
1227
|
|
|
1236
|
-
|
|
1237
|
-
|
|
1228
|
+
if (ptr2) {
|
|
1229
|
+
Napi::External<void> external = Napi::External<void>::New(env, ptr2);
|
|
1230
|
+
SetValueTag(external, ref->ref.marker);
|
|
1238
1231
|
|
|
1239
|
-
|
|
1240
|
-
|
|
1232
|
+
array.Set(i, external);
|
|
1233
|
+
} else {
|
|
1234
|
+
array.Set(i, env.Null());
|
|
1241
1235
|
}
|
|
1242
|
-
});
|
|
1243
|
-
} break;
|
|
1244
|
-
case PrimitiveKind::Callback: {
|
|
1245
|
-
POP_ARRAY({
|
|
1246
|
-
void *ptr2 = *(void **)src;
|
|
1247
|
-
|
|
1248
|
-
Napi::Value p = ptr2 ? WrapCallback(env, ref->ref.type, ptr2) : env.Null();
|
|
1249
|
-
array.Set(i, p);
|
|
1250
1236
|
|
|
1251
1237
|
if (ref->dispose) {
|
|
1252
1238
|
ref->dispose(env, ref, ptr2);
|
|
@@ -1266,15 +1252,14 @@ void DecodeNormalArray(Napi::Array array, const uint8_t *origin, const TypeInfo
|
|
|
1266
1252
|
array.Set(i, value);
|
|
1267
1253
|
});
|
|
1268
1254
|
} break;
|
|
1269
|
-
case PrimitiveKind::Float32: {
|
|
1270
|
-
case PrimitiveKind::Float64: {
|
|
1255
|
+
case PrimitiveKind::Float32: { POP_NUMBER_ARRAY(float); } break;
|
|
1256
|
+
case PrimitiveKind::Float64: { POP_NUMBER_ARRAY(double); } break;
|
|
1271
1257
|
|
|
1272
1258
|
case PrimitiveKind::Prototype: { K_UNREACHABLE(); } break;
|
|
1273
1259
|
}
|
|
1274
1260
|
|
|
1275
|
-
#undef
|
|
1276
|
-
#undef
|
|
1277
|
-
|
|
1261
|
+
#undef POP_NUMBER_ARRAY_SWAP
|
|
1262
|
+
#undef POP_NUMBER_ARRAY
|
|
1278
1263
|
#undef POP_ARRAY
|
|
1279
1264
|
}
|
|
1280
1265
|
|
|
@@ -1309,9 +1294,14 @@ Napi::Value Decode(Napi::Value value, Size offset, const TypeInfo *type, const S
|
|
|
1309
1294
|
Napi::Env env = value.Env();
|
|
1310
1295
|
InstanceData *instance = env.GetInstanceData<InstanceData>();
|
|
1311
1296
|
|
|
1312
|
-
const uint8_t *
|
|
1297
|
+
const uint8_t *ptr = nullptr;
|
|
1298
|
+
|
|
1299
|
+
if (value.IsExternal()) {
|
|
1300
|
+
Napi::External<void> external = value.As<Napi::External<void>>();
|
|
1301
|
+
ptr = (const uint8_t *)external.Data();
|
|
1302
|
+
} else if (IsRawBuffer(value)) {
|
|
1303
|
+
Span<uint8_t> buffer = GetRawBuffer(value);
|
|
1313
1304
|
|
|
1314
|
-
if (Span<uint8_t> buffer = {}; TryBuffer(value, &buffer)) {
|
|
1315
1305
|
if (offset < 0) [[unlikely]] {
|
|
1316
1306
|
ThrowError<Napi::Error>(env, "Offset must be >= 0");
|
|
1317
1307
|
return env.Null();
|
|
@@ -1322,19 +1312,17 @@ Napi::Value Decode(Napi::Value value, Size offset, const TypeInfo *type, const S
|
|
|
1322
1312
|
return env.Null();
|
|
1323
1313
|
}
|
|
1324
1314
|
|
|
1325
|
-
|
|
1326
|
-
} else if (void *ptr = nullptr; TryPointer(value, &ptr)) {
|
|
1327
|
-
src = (const uint8_t *)ptr;
|
|
1315
|
+
ptr = (const uint8_t *)buffer.ptr;
|
|
1328
1316
|
} else {
|
|
1329
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value for variable, expected
|
|
1317
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value for variable, expected external or TypedArray", GetValueType(instance, value));
|
|
1330
1318
|
return env.Null();
|
|
1331
1319
|
}
|
|
1332
1320
|
|
|
1333
|
-
if (!
|
|
1321
|
+
if (!ptr)
|
|
1334
1322
|
return env.Null();
|
|
1335
|
-
|
|
1323
|
+
ptr += offset;
|
|
1336
1324
|
|
|
1337
|
-
Napi::Value ret = Decode(env,
|
|
1325
|
+
Napi::Value ret = Decode(env, ptr, type, len);
|
|
1338
1326
|
return ret;
|
|
1339
1327
|
}
|
|
1340
1328
|
|
|
@@ -1441,13 +1429,10 @@ Napi::Value Decode(Napi::Env env, const uint8_t *ptr, const TypeInfo *type, cons
|
|
|
1441
1429
|
return str32 ? MakeStringFromUTF32(env, str32) : env.Null();
|
|
1442
1430
|
}
|
|
1443
1431
|
} break;
|
|
1444
|
-
case PrimitiveKind::Pointer:
|
|
1445
|
-
void *ptr2 = *(void **)ptr;
|
|
1446
|
-
return ptr2 ? WrapPointer(env, type->ref.type, ptr2) : env.Null();
|
|
1447
|
-
} break;
|
|
1432
|
+
case PrimitiveKind::Pointer:
|
|
1448
1433
|
case PrimitiveKind::Callback: {
|
|
1449
1434
|
void *ptr2 = *(void **)ptr;
|
|
1450
|
-
return ptr2 ?
|
|
1435
|
+
return ptr2 ? Napi::External<void>::New(env, ptr2, [](Napi::Env, void *) {}) : env.Null();
|
|
1451
1436
|
} break;
|
|
1452
1437
|
case PrimitiveKind::Record:
|
|
1453
1438
|
case PrimitiveKind::Union: {
|
|
@@ -1477,12 +1462,10 @@ Napi::Value Decode(Napi::Env env, const uint8_t *ptr, const TypeInfo *type, cons
|
|
|
1477
1462
|
|
|
1478
1463
|
memcpy((void *)func, proto, K_SIZE(*proto));
|
|
1479
1464
|
memset((void *)&func->parameters, 0, K_SIZE(func->parameters));
|
|
1480
|
-
|
|
1465
|
+
func->parameters = proto->parameters;
|
|
1481
1466
|
|
|
1482
1467
|
func->name = "<anonymous>";
|
|
1483
1468
|
func->native = (void *)ptr;
|
|
1484
|
-
func->parameters = proto->parameters;
|
|
1485
|
-
func->primitives = proto->primitives;
|
|
1486
1469
|
|
|
1487
1470
|
// Fix back parameter offset
|
|
1488
1471
|
for (ParameterInfo ¶m: func->parameters) {
|
|
@@ -1506,9 +1489,14 @@ bool Encode(Napi::Value ref, Size offset, Napi::Value value, const TypeInfo *typ
|
|
|
1506
1489
|
Napi::Env env = ref.Env();
|
|
1507
1490
|
InstanceData *instance = env.GetInstanceData<InstanceData>();
|
|
1508
1491
|
|
|
1509
|
-
uint8_t *
|
|
1492
|
+
uint8_t *ptr = nullptr;
|
|
1493
|
+
|
|
1494
|
+
if (ref.IsExternal()) {
|
|
1495
|
+
Napi::External<void> external = ref.As<Napi::External<void>>();
|
|
1496
|
+
ptr = (uint8_t *)external.Data();
|
|
1497
|
+
} else if (IsRawBuffer(ref)) {
|
|
1498
|
+
Span<uint8_t> buffer = GetRawBuffer(ref);
|
|
1510
1499
|
|
|
1511
|
-
if (Span<uint8_t> buffer = {}; TryBuffer(ref, &buffer)) {
|
|
1512
1500
|
if (offset < 0) [[unlikely]] {
|
|
1513
1501
|
ThrowError<Napi::Error>(env, "Offset must be >= 0");
|
|
1514
1502
|
return env.Null();
|
|
@@ -1519,21 +1507,19 @@ bool Encode(Napi::Value ref, Size offset, Napi::Value value, const TypeInfo *typ
|
|
|
1519
1507
|
return env.Null();
|
|
1520
1508
|
}
|
|
1521
1509
|
|
|
1522
|
-
|
|
1523
|
-
} else if (void *ptr = nullptr; TryPointer(ref, &ptr)) {
|
|
1524
|
-
dest = (uint8_t *)ptr;
|
|
1510
|
+
ptr = (uint8_t *)buffer.ptr;
|
|
1525
1511
|
} else {
|
|
1526
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value for reference, expected
|
|
1512
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value for reference, expected external or TypedArray", GetValueType(instance, ref));
|
|
1527
1513
|
return env.Null();
|
|
1528
1514
|
}
|
|
1529
1515
|
|
|
1530
|
-
if (!
|
|
1516
|
+
if (!ptr) [[unlikely]] {
|
|
1531
1517
|
ThrowError<Napi::Error>(env, "Cannot encode data in NULL pointer");
|
|
1532
1518
|
return env.Null();
|
|
1533
1519
|
}
|
|
1534
|
-
|
|
1520
|
+
ptr += offset;
|
|
1535
1521
|
|
|
1536
|
-
return Encode(env,
|
|
1522
|
+
return Encode(env, ptr, value, type, len);
|
|
1537
1523
|
}
|
|
1538
1524
|
|
|
1539
1525
|
bool Encode(Napi::Env env, uint8_t *origin, Napi::Value value, const TypeInfo *type, const Size *len)
|
|
@@ -1557,24 +1543,22 @@ bool Encode(Napi::Env env, uint8_t *origin, Napi::Value value, const TypeInfo *t
|
|
|
1557
1543
|
|
|
1558
1544
|
#define PUSH_INTEGER(CType) \
|
|
1559
1545
|
do { \
|
|
1560
|
-
|
|
1561
|
-
\
|
|
1562
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
1546
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
1563
1547
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
1564
1548
|
return false; \
|
|
1565
1549
|
} \
|
|
1566
1550
|
\
|
|
1551
|
+
CType v = GetNumber<CType>(value); \
|
|
1567
1552
|
*(CType *)origin = v; \
|
|
1568
1553
|
} while (false)
|
|
1569
1554
|
#define PUSH_INTEGER_SWAP(CType) \
|
|
1570
1555
|
do { \
|
|
1571
|
-
|
|
1572
|
-
\
|
|
1573
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
1556
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
1574
1557
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
1575
1558
|
return false; \
|
|
1576
1559
|
} \
|
|
1577
1560
|
\
|
|
1561
|
+
CType v = GetNumber<CType>(value); \
|
|
1578
1562
|
*(CType *)origin = ReverseBytes(v); \
|
|
1579
1563
|
} while (false)
|
|
1580
1564
|
|
|
@@ -1582,14 +1566,12 @@ bool Encode(Napi::Env env, uint8_t *origin, Napi::Value value, const TypeInfo *t
|
|
|
1582
1566
|
case PrimitiveKind::Void: { K_UNREACHABLE(); } break;
|
|
1583
1567
|
|
|
1584
1568
|
case PrimitiveKind::Bool: {
|
|
1585
|
-
|
|
1586
|
-
napi_status status = napi_get_value_bool(env, value, &b);
|
|
1587
|
-
|
|
1588
|
-
if (status != napi_ok) [[unlikely]] {
|
|
1569
|
+
if (!value.IsBoolean()) [[unlikely]] {
|
|
1589
1570
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
1590
1571
|
return false;
|
|
1591
1572
|
}
|
|
1592
1573
|
|
|
1574
|
+
bool b = value.As<Napi::Boolean>();
|
|
1593
1575
|
*(bool *)origin = b;
|
|
1594
1576
|
} break;
|
|
1595
1577
|
case PrimitiveKind::Int8: { PUSH_INTEGER(int8_t); } break;
|
|
@@ -1647,7 +1629,8 @@ bool Encode(Napi::Env env, uint8_t *origin, Napi::Value value, const TypeInfo *t
|
|
|
1647
1629
|
Napi::Array array = value.As<Napi::Array>();
|
|
1648
1630
|
if (!call.PushNormalArray(array, type, type->size, origin))
|
|
1649
1631
|
return false;
|
|
1650
|
-
} else if (
|
|
1632
|
+
} else if (IsRawBuffer(value)) {
|
|
1633
|
+
Span<const uint8_t> buffer = GetRawBuffer(value);
|
|
1651
1634
|
call.PushBuffer(buffer, type, origin);
|
|
1652
1635
|
} else if (value.IsString()) {
|
|
1653
1636
|
if (!call.PushStringArray(value, type, origin))
|
|
@@ -1658,34 +1641,35 @@ bool Encode(Napi::Env env, uint8_t *origin, Napi::Value value, const TypeInfo *t
|
|
|
1658
1641
|
}
|
|
1659
1642
|
} break;
|
|
1660
1643
|
case PrimitiveKind::Float32: {
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
if (!TryNumber(value, &f)) [[unlikely]] {
|
|
1644
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
1664
1645
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
1665
1646
|
return false;
|
|
1666
1647
|
}
|
|
1667
1648
|
|
|
1649
|
+
float f = GetNumber<float>(value);
|
|
1668
1650
|
*(float *)origin = f;
|
|
1669
1651
|
} break;
|
|
1670
1652
|
case PrimitiveKind::Float64: {
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
if (!TryNumber(value, &d)) [[unlikely]] {
|
|
1653
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
1674
1654
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
1675
1655
|
return false;
|
|
1676
1656
|
}
|
|
1677
1657
|
|
|
1658
|
+
double d = GetNumber<double>(value);
|
|
1678
1659
|
*(double *)origin = d;
|
|
1679
1660
|
} break;
|
|
1680
1661
|
case PrimitiveKind::Callback: {
|
|
1681
1662
|
void *ptr;
|
|
1682
1663
|
|
|
1683
|
-
if (
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1664
|
+
if (value.IsFunction()) {
|
|
1665
|
+
ThrowError<Napi::Error>(env, "Cannot encode non-registered callback");
|
|
1666
|
+
return false;
|
|
1667
|
+
} else if (CheckValueTag(value, type->ref.marker)) {
|
|
1668
|
+
ptr = value.As<Napi::External<void>>().Data();
|
|
1669
|
+
} else if (IsNullOrUndefined(value)) {
|
|
1670
|
+
ptr = nullptr;
|
|
1671
|
+
} else {
|
|
1672
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
1689
1673
|
return false;
|
|
1690
1674
|
}
|
|
1691
1675
|
|
|
@@ -1699,19 +1683,15 @@ bool Encode(Napi::Env env, uint8_t *origin, Napi::Value value, const TypeInfo *t
|
|
|
1699
1683
|
#undef PUSH_INTEGER
|
|
1700
1684
|
|
|
1701
1685
|
// Keep memory around if any was allocated
|
|
1702
|
-
{
|
|
1703
|
-
BlockAllocator *
|
|
1704
|
-
|
|
1705
|
-
if (alloc->IsUsed()) {
|
|
1706
|
-
BlockAllocator *copy = instance->encode_map.FindValue(origin, nullptr);
|
|
1686
|
+
if (call.alloc.IsUsed()) {
|
|
1687
|
+
BlockAllocator *copy = instance->encode_map.FindValue(origin, nullptr);
|
|
1707
1688
|
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
}
|
|
1712
|
-
|
|
1713
|
-
std::swap(*alloc, *copy);
|
|
1689
|
+
if (!copy) {
|
|
1690
|
+
copy = instance->encode_allocators.AppendDefault();
|
|
1691
|
+
instance->encode_map.Set(origin, copy);
|
|
1714
1692
|
}
|
|
1693
|
+
|
|
1694
|
+
std::swap(call.alloc, *copy);
|
|
1715
1695
|
}
|
|
1716
1696
|
|
|
1717
1697
|
return true;
|
|
@@ -1757,32 +1737,6 @@ Napi::Function WrapFunction(Napi::Env env, const FunctionInfo *func)
|
|
|
1757
1737
|
return wrapper;
|
|
1758
1738
|
}
|
|
1759
1739
|
|
|
1760
|
-
Napi::Value WrapPointer(Napi::Env env, const TypeInfo *ref, void *ptr)
|
|
1761
|
-
{
|
|
1762
|
-
InstanceData *instance = env.GetInstanceData<InstanceData>();
|
|
1763
|
-
|
|
1764
|
-
if (instance->config.fast_pointers) {
|
|
1765
|
-
Napi::BigInt big = Napi::BigInt::New(env, (uint64_t)(uintptr_t)ptr);
|
|
1766
|
-
return big;
|
|
1767
|
-
} else {
|
|
1768
|
-
Napi::External<void> external = Napi::External<void>::New(env, ptr);
|
|
1769
|
-
return external;
|
|
1770
|
-
}
|
|
1771
|
-
}
|
|
1772
|
-
|
|
1773
|
-
Napi::Value WrapCallback(Napi::Env env, const TypeInfo *ref, void *ptr)
|
|
1774
|
-
{
|
|
1775
|
-
InstanceData *instance = env.GetInstanceData<InstanceData>();
|
|
1776
|
-
|
|
1777
|
-
if (instance->config.fast_callbacks) {
|
|
1778
|
-
Napi::BigInt big = Napi::BigInt::New(env, (uint64_t)(uintptr_t)ptr);
|
|
1779
|
-
return big;
|
|
1780
|
-
} else {
|
|
1781
|
-
Napi::External<void> external = Napi::External<void>::New(env, ptr);
|
|
1782
|
-
return external;
|
|
1783
|
-
}
|
|
1784
|
-
}
|
|
1785
|
-
|
|
1786
1740
|
bool DetectCallConvention(Span<const char> name, CallConvention *out_convention)
|
|
1787
1741
|
{
|
|
1788
1742
|
if (name == "__cdecl") {
|