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
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
#if defined(__arm__) || (defined(__M_ARM) && !defined(_M_ARM64))
|
|
5
5
|
|
|
6
6
|
#include "lib/native/base/base.hh"
|
|
7
|
-
#include "
|
|
8
|
-
#include "
|
|
9
|
-
#include "
|
|
7
|
+
#include "ffi.hh"
|
|
8
|
+
#include "call.hh"
|
|
9
|
+
#include "util.hh"
|
|
10
10
|
|
|
11
11
|
#include <napi.h>
|
|
12
12
|
#include <signal.h>
|
|
@@ -38,9 +38,10 @@ extern "C" uint64_t ForwardCallXGG(const void *func, uint8_t *sp, uint8_t **out_
|
|
|
38
38
|
extern "C" float ForwardCallXF(const void *func, uint8_t *sp, uint8_t **out_old_sp);
|
|
39
39
|
extern "C" HfaRet ForwardCallXDDDD(const void *func, uint8_t *sp, uint8_t **out_old_sp);
|
|
40
40
|
|
|
41
|
-
extern "C"
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
extern "C" uint8_t Trampoline0;
|
|
42
|
+
extern "C" uint8_t TrampolineEnd;
|
|
43
|
+
extern "C" void *FindTrampolineStart();
|
|
44
|
+
extern "C" void *FindTrampolineEnd();
|
|
44
45
|
|
|
45
46
|
static int IsHFA(const TypeInfo *type)
|
|
46
47
|
{
|
|
@@ -199,73 +200,54 @@ bool AnalyseFunction(Napi::Env, InstanceData *, FunctionInfo *func)
|
|
|
199
200
|
|
|
200
201
|
bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
|
|
201
202
|
{
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
uint32_t *vec_ptr =
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
203
|
+
uint32_t *args_ptr = nullptr;
|
|
204
|
+
uint32_t *gpr_ptr = nullptr;
|
|
205
|
+
uint32_t *vec_ptr = nullptr;
|
|
206
|
+
|
|
207
|
+
// Unlike other call conventions, here we put the general-purpose
|
|
208
|
+
// registers just before the stack (so behind the vector ones).
|
|
209
|
+
// In the armv7hf calling convention, some arguments can end up
|
|
210
|
+
// partially in GPR, partially in the stack.
|
|
211
|
+
if (!AllocStack(func->args_size, 16, &args_ptr)) [[unlikely]]
|
|
212
|
+
return false;
|
|
213
|
+
if (!AllocStack(4 * 4, 8, &gpr_ptr)) [[unlikely]]
|
|
214
|
+
return false;
|
|
215
|
+
if (!AllocStack(8 * 8, 8, &vec_ptr)) [[unlikely]]
|
|
209
216
|
return false;
|
|
210
217
|
if (func->ret.use_memory) {
|
|
211
218
|
return_ptr = AllocHeap(func->ret.type->size, 16);
|
|
212
219
|
*(uint8_t **)(gpr_ptr++) = return_ptr;
|
|
213
220
|
}
|
|
214
221
|
|
|
215
|
-
Size i = -1;
|
|
216
|
-
|
|
217
|
-
static const void *const DispatchTable[] = {
|
|
218
|
-
#define PRIMITIVE(Name) && Name,
|
|
219
|
-
#include "../primitives.inc"
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
#define LOOP
|
|
223
|
-
#define CASE(Primitive) \
|
|
224
|
-
do { \
|
|
225
|
-
PrimitiveKind next = func->primitives[++i]; \
|
|
226
|
-
goto *DispatchTable[(int)next]; \
|
|
227
|
-
} while (false); \
|
|
228
|
-
Primitive:
|
|
229
|
-
#define OR(Primitive) \
|
|
230
|
-
Primitive:
|
|
231
|
-
|
|
232
222
|
#define PUSH_INTEGER_32(CType) \
|
|
233
223
|
do { \
|
|
234
|
-
|
|
235
|
-
Napi::Value value = info[param.offset]; \
|
|
236
|
-
\
|
|
237
|
-
CType v; \
|
|
238
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
224
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
239
225
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
240
226
|
return false; \
|
|
241
227
|
} \
|
|
242
228
|
\
|
|
229
|
+
CType v = GetNumber<CType>(value); \
|
|
243
230
|
*((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint32_t)v; \
|
|
244
231
|
} while (false)
|
|
245
232
|
#define PUSH_INTEGER_32_SWAP(CType) \
|
|
246
233
|
do { \
|
|
247
|
-
|
|
248
|
-
Napi::Value value = info[param.offset]; \
|
|
249
|
-
\
|
|
250
|
-
CType v; \
|
|
251
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
234
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
252
235
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
253
236
|
return false; \
|
|
254
237
|
} \
|
|
255
238
|
\
|
|
239
|
+
CType v = GetNumber<CType>(value); \
|
|
256
240
|
*((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint32_t)ReverseBytes(v); \
|
|
257
241
|
} while (false)
|
|
258
242
|
#define PUSH_INTEGER_64(CType) \
|
|
259
243
|
do { \
|
|
260
|
-
|
|
261
|
-
Napi::Value value = info[param.offset]; \
|
|
262
|
-
\
|
|
263
|
-
CType v; \
|
|
264
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
244
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
265
245
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
266
246
|
return false; \
|
|
267
247
|
} \
|
|
268
248
|
\
|
|
249
|
+
CType v = GetNumber<CType>(value); \
|
|
250
|
+
\
|
|
269
251
|
if (param.gpr_count) [[likely]] { \
|
|
270
252
|
gpr_ptr = AlignUp(gpr_ptr, 8); \
|
|
271
253
|
*(uint64_t *)gpr_ptr = (uint64_t)v; \
|
|
@@ -278,15 +260,13 @@ bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
|
|
|
278
260
|
} while (false)
|
|
279
261
|
#define PUSH_INTEGER_64_SWAP(CType) \
|
|
280
262
|
do { \
|
|
281
|
-
|
|
282
|
-
Napi::Value value = info[param.offset]; \
|
|
283
|
-
\
|
|
284
|
-
CType v; \
|
|
285
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
263
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
286
264
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
287
265
|
return false; \
|
|
288
266
|
} \
|
|
289
267
|
\
|
|
268
|
+
CType v = GetNumber<CType>(value); \
|
|
269
|
+
\
|
|
290
270
|
if (param.gpr_count) [[likely]] { \
|
|
291
271
|
gpr_ptr = AlignUp(gpr_ptr, 8); \
|
|
292
272
|
*(uint64_t *)gpr_ptr = (uint64_t)ReverseBytes(v); \
|
|
@@ -298,170 +278,148 @@ bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
|
|
|
298
278
|
} \
|
|
299
279
|
} while (false)
|
|
300
280
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
306
|
-
Napi::Value value = info[param.offset];
|
|
307
|
-
|
|
308
|
-
bool b;
|
|
309
|
-
if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
|
|
310
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
311
|
-
return false;
|
|
312
|
-
}
|
|
281
|
+
// Push arguments
|
|
282
|
+
for (Size i = 0; i < func->parameters.len; i++) {
|
|
283
|
+
const ParameterInfo ¶m = func->parameters[i];
|
|
284
|
+
K_ASSERT(param.directions >= 1 && param.directions <= 3);
|
|
313
285
|
|
|
314
|
-
|
|
315
|
-
};
|
|
316
|
-
|
|
317
|
-
CASE(Int8) { PUSH_INTEGER_32(int8_t); };
|
|
318
|
-
CASE(UInt8) { PUSH_INTEGER_32(uint8_t); };
|
|
319
|
-
CASE(Int16) { PUSH_INTEGER_32(int16_t); };
|
|
320
|
-
CASE(Int16S) { PUSH_INTEGER_32_SWAP(int16_t); };
|
|
321
|
-
CASE(UInt16) { PUSH_INTEGER_32(uint16_t); };
|
|
322
|
-
CASE(UInt16S) { PUSH_INTEGER_32_SWAP(uint16_t); };
|
|
323
|
-
CASE(Int32) { PUSH_INTEGER_32(int32_t); };
|
|
324
|
-
CASE(Int32S) { PUSH_INTEGER_32_SWAP(int32_t); };
|
|
325
|
-
CASE(UInt32) { PUSH_INTEGER_32(uint32_t); };
|
|
326
|
-
CASE(UInt32S) { PUSH_INTEGER_32_SWAP(uint32_t); };
|
|
327
|
-
CASE(Int64) { PUSH_INTEGER_64(int64_t); };
|
|
328
|
-
CASE(Int64S) { PUSH_INTEGER_64_SWAP(int64_t); };
|
|
329
|
-
CASE(UInt64) { PUSH_INTEGER_64(uint64_t); };
|
|
330
|
-
CASE(UInt64S) { PUSH_INTEGER_64_SWAP(uint64_t); };
|
|
331
|
-
|
|
332
|
-
CASE(String) {
|
|
333
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
334
|
-
Napi::Value value = info[param.offset];
|
|
286
|
+
Napi::Value value = info[param.offset];
|
|
335
287
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
return false;
|
|
288
|
+
switch (param.type->primitive) {
|
|
289
|
+
case PrimitiveKind::Void: { K_UNREACHABLE(); } break;
|
|
339
290
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
291
|
+
case PrimitiveKind::Bool: {
|
|
292
|
+
if (!value.IsBoolean()) [[unlikely]] {
|
|
293
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
294
|
+
return false;
|
|
295
|
+
}
|
|
345
296
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
297
|
+
bool b = value.As<Napi::Boolean>();
|
|
298
|
+
*((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint32_t)b;
|
|
299
|
+
} break;
|
|
300
|
+
case PrimitiveKind::Int8: { PUSH_INTEGER_32(int8_t); } break;
|
|
301
|
+
case PrimitiveKind::UInt8: { PUSH_INTEGER_32(uint8_t); } break;
|
|
302
|
+
case PrimitiveKind::Int16: { PUSH_INTEGER_32(int16_t); } break;
|
|
303
|
+
case PrimitiveKind::Int16S: { PUSH_INTEGER_32_SWAP(int16_t); } break;
|
|
304
|
+
case PrimitiveKind::UInt16: { PUSH_INTEGER_32(uint16_t); } break;
|
|
305
|
+
case PrimitiveKind::UInt16S: { PUSH_INTEGER_32_SWAP(uint16_t); } break;
|
|
306
|
+
case PrimitiveKind::Int32: { PUSH_INTEGER_32(int32_t); } break;
|
|
307
|
+
case PrimitiveKind::Int32S: { PUSH_INTEGER_32_SWAP(int32_t); } break;
|
|
308
|
+
case PrimitiveKind::UInt32: { PUSH_INTEGER_32(uint32_t); } break;
|
|
309
|
+
case PrimitiveKind::UInt32S: { PUSH_INTEGER_32_SWAP(uint32_t); } break;
|
|
310
|
+
case PrimitiveKind::Int64: { PUSH_INTEGER_64(int64_t); } break;
|
|
311
|
+
case PrimitiveKind::Int64S: { PUSH_INTEGER_64_SWAP(int64_t); } break;
|
|
312
|
+
case PrimitiveKind::UInt64: { PUSH_INTEGER_64(uint64_t); } break;
|
|
313
|
+
case PrimitiveKind::UInt64S: { PUSH_INTEGER_64_SWAP(uint64_t); } break;
|
|
314
|
+
case PrimitiveKind::String: {
|
|
315
|
+
const char *str;
|
|
316
|
+
if (!PushString(value, param.directions, &str)) [[unlikely]]
|
|
317
|
+
return false;
|
|
349
318
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
319
|
+
*(const char **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str;
|
|
320
|
+
} break;
|
|
321
|
+
case PrimitiveKind::String16: {
|
|
322
|
+
const char16_t *str16;
|
|
323
|
+
if (!PushString16(value, param.directions, &str16)) [[unlikely]]
|
|
324
|
+
return false;
|
|
355
325
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
326
|
+
*(const char16_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str16;
|
|
327
|
+
} break;
|
|
328
|
+
case PrimitiveKind::String32: {
|
|
329
|
+
const char32_t *str32;
|
|
330
|
+
if (!PushString32(value, param.directions, &str32)) [[unlikely]]
|
|
331
|
+
return false;
|
|
359
332
|
|
|
360
|
-
|
|
361
|
-
|
|
333
|
+
*(const char32_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str32;
|
|
334
|
+
} break;
|
|
335
|
+
case PrimitiveKind::Pointer: {
|
|
336
|
+
void *ptr;
|
|
337
|
+
if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
|
|
338
|
+
return false;
|
|
362
339
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
340
|
+
*(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
|
|
341
|
+
} break;
|
|
342
|
+
case PrimitiveKind::Record:
|
|
343
|
+
case PrimitiveKind::Union: {
|
|
344
|
+
if (!IsObject(value)) [[unlikely]] {
|
|
345
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected object", GetValueType(instance, value));
|
|
346
|
+
return false;
|
|
347
|
+
}
|
|
366
348
|
|
|
367
|
-
|
|
368
|
-
if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
|
|
369
|
-
return false;
|
|
349
|
+
Napi::Object obj = value.As<Napi::Object>();
|
|
370
350
|
|
|
371
|
-
|
|
372
|
-
|
|
351
|
+
if (param.vec_count) {
|
|
352
|
+
if (!PushObject(obj, param.type, (uint8_t *)vec_ptr))
|
|
353
|
+
return false;
|
|
354
|
+
vec_ptr += param.vec_count;
|
|
355
|
+
} else if (param.gpr_count) {
|
|
356
|
+
K_ASSERT(param.type->align <= 8);
|
|
373
357
|
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
Napi::Value value = info[param.offset];
|
|
358
|
+
int16_t align = (param.type->align <= 4) ? 4 : 8;
|
|
359
|
+
gpr_ptr = AlignUp(gpr_ptr, align);
|
|
377
360
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
return false;
|
|
381
|
-
}
|
|
361
|
+
if (!PushObject(obj, param.type, (uint8_t *)gpr_ptr))
|
|
362
|
+
return false;
|
|
382
363
|
|
|
383
|
-
|
|
364
|
+
gpr_ptr += param.gpr_count;
|
|
365
|
+
args_ptr += (param.type->size - param.gpr_count * 4 + 3) / 4;
|
|
366
|
+
} else if (param.type->size) {
|
|
367
|
+
int16_t align = (param.type->align <= 4) ? 4 : 8;
|
|
368
|
+
args_ptr = AlignUp(args_ptr, align);
|
|
384
369
|
|
|
385
|
-
|
|
386
|
-
|
|
370
|
+
if (!PushObject(obj, param.type, (uint8_t *)args_ptr))
|
|
371
|
+
return false;
|
|
372
|
+
args_ptr += (param.type->size + 3) / 4;
|
|
373
|
+
}
|
|
374
|
+
} break;
|
|
375
|
+
case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
|
|
376
|
+
case PrimitiveKind::Float32: {
|
|
377
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
378
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
387
379
|
return false;
|
|
388
|
-
|
|
389
|
-
} else if (param.gpr_count) {
|
|
390
|
-
K_ASSERT(param.type->align <= 8);
|
|
380
|
+
}
|
|
391
381
|
|
|
392
|
-
|
|
393
|
-
gpr_ptr = AlignUp(gpr_ptr, align);
|
|
382
|
+
float f = GetNumber<float>(value);
|
|
394
383
|
|
|
395
|
-
if (
|
|
384
|
+
if (param.vec_count) [[likely]] {
|
|
385
|
+
*(float *)(vec_ptr++) = f;
|
|
386
|
+
} else if (param.gpr_count) {
|
|
387
|
+
*(float *)(gpr_ptr++) = f;
|
|
388
|
+
} else {
|
|
389
|
+
*(float *)(args_ptr++) = f;
|
|
390
|
+
}
|
|
391
|
+
} break;
|
|
392
|
+
case PrimitiveKind::Float64: {
|
|
393
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
394
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
396
395
|
return false;
|
|
396
|
+
}
|
|
397
397
|
|
|
398
|
-
|
|
399
|
-
args_ptr += (param.type->size - param.gpr_count * 4 + 3) / 4;
|
|
400
|
-
} else if (param.type->size) {
|
|
401
|
-
int16_t align = (param.type->align <= 4) ? 4 : 8;
|
|
402
|
-
args_ptr = AlignUp(args_ptr, align);
|
|
398
|
+
double d = GetNumber<double>(value);
|
|
403
399
|
|
|
404
|
-
if (
|
|
400
|
+
if (param.vec_count) [[likely]] {
|
|
401
|
+
*(double *)vec_ptr = d;
|
|
402
|
+
vec_ptr += 2;
|
|
403
|
+
} else if (param.gpr_count) {
|
|
404
|
+
gpr_ptr = AlignUp(gpr_ptr, 8);
|
|
405
|
+
*(double *)gpr_ptr = d;
|
|
406
|
+
gpr_ptr += 2;
|
|
407
|
+
} else {
|
|
408
|
+
args_ptr = AlignUp(args_ptr, 8);
|
|
409
|
+
*(double *)args_ptr = d;
|
|
410
|
+
args_ptr += 2;
|
|
411
|
+
}
|
|
412
|
+
} break;
|
|
413
|
+
case PrimitiveKind::Callback: {
|
|
414
|
+
void *ptr;
|
|
415
|
+
if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
|
|
405
416
|
return false;
|
|
406
|
-
args_ptr += (param.type->size + 3) / 4;
|
|
407
|
-
}
|
|
408
|
-
};
|
|
409
|
-
CASE(Array) { K_UNREACHABLE(); };
|
|
410
|
-
|
|
411
|
-
CASE(Float32) {
|
|
412
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
413
|
-
Napi::Value value = info[param.offset];
|
|
414
|
-
|
|
415
|
-
float f;
|
|
416
|
-
if (!TryNumber(value, &f)) [[unlikely]] {
|
|
417
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
418
|
-
return false;
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
if (param.vec_count) [[likely]] {
|
|
422
|
-
*(float *)(vec_ptr++) = f;
|
|
423
|
-
} else if (param.gpr_count) {
|
|
424
|
-
*(float *)(gpr_ptr++) = f;
|
|
425
|
-
} else {
|
|
426
|
-
*(float *)(args_ptr++) = f;
|
|
427
|
-
}
|
|
428
|
-
};
|
|
429
|
-
CASE(Float64) {
|
|
430
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
431
|
-
Napi::Value value = info[param.offset];
|
|
432
|
-
|
|
433
|
-
double d;
|
|
434
|
-
if (!TryNumber(value, &d)) [[unlikely]] {
|
|
435
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
436
|
-
return false;
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
if (param.vec_count) [[likely]] {
|
|
440
|
-
*(double *)vec_ptr = d;
|
|
441
|
-
vec_ptr += 2;
|
|
442
|
-
} else if (param.gpr_count) {
|
|
443
|
-
gpr_ptr = AlignUp(gpr_ptr, 8);
|
|
444
|
-
*(double *)gpr_ptr = d;
|
|
445
|
-
gpr_ptr += 2;
|
|
446
|
-
} else {
|
|
447
|
-
args_ptr = AlignUp(args_ptr, 8);
|
|
448
|
-
*(double *)args_ptr = d;
|
|
449
|
-
args_ptr += 2;
|
|
450
|
-
}
|
|
451
|
-
};
|
|
452
417
|
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
Napi::Value value = info[param.offset];
|
|
456
|
-
|
|
457
|
-
void *ptr;
|
|
458
|
-
if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
|
|
459
|
-
return false;
|
|
460
|
-
|
|
461
|
-
*(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
|
|
462
|
-
};
|
|
418
|
+
*(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
|
|
419
|
+
} break;
|
|
463
420
|
|
|
464
|
-
|
|
421
|
+
case PrimitiveKind::Prototype: { K_UNREACHABLE(); } break;
|
|
422
|
+
}
|
|
465
423
|
}
|
|
466
424
|
|
|
467
425
|
#undef PUSH_INTEGER_64_SWAP
|
|
@@ -469,10 +427,6 @@ bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
|
|
|
469
427
|
#undef PUSH_INTEGER_32_SWAP
|
|
470
428
|
#undef PUSH_INTEGER_32
|
|
471
429
|
|
|
472
|
-
#undef OR
|
|
473
|
-
#undef CASE
|
|
474
|
-
#undef LOOP
|
|
475
|
-
|
|
476
430
|
new_sp = mem->stack.end();
|
|
477
431
|
|
|
478
432
|
return true;
|
|
@@ -559,8 +513,17 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
|
|
|
559
513
|
case PrimitiveKind::String: return result.ptr ? Napi::String::New(env, (const char *)result.ptr) : env.Null();
|
|
560
514
|
case PrimitiveKind::String16: return result.ptr ? Napi::String::New(env, (const char16_t *)result.ptr) : env.Null();
|
|
561
515
|
case PrimitiveKind::String32: return result.ptr ? MakeStringFromUTF32(env, (const char32_t *)result.ptr) : env.Null();
|
|
562
|
-
case PrimitiveKind::Pointer:
|
|
563
|
-
case PrimitiveKind::Callback:
|
|
516
|
+
case PrimitiveKind::Pointer:
|
|
517
|
+
case PrimitiveKind::Callback: {
|
|
518
|
+
if (result.ptr) {
|
|
519
|
+
Napi::External<void> external = Napi::External<void>::New(env, result.ptr);
|
|
520
|
+
SetValueTag(external, func->ret.type->ref.marker);
|
|
521
|
+
|
|
522
|
+
return external;
|
|
523
|
+
} else {
|
|
524
|
+
return env.Null();
|
|
525
|
+
}
|
|
526
|
+
} break;
|
|
564
527
|
case PrimitiveKind::Record:
|
|
565
528
|
case PrimitiveKind::Union: {
|
|
566
529
|
const uint8_t *ptr = return_ptr ? (const uint8_t *)return_ptr
|
|
@@ -579,13 +542,14 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
|
|
|
579
542
|
K_UNREACHABLE();
|
|
580
543
|
}
|
|
581
544
|
|
|
582
|
-
void CallData::Relay(Size idx, uint8_t *
|
|
545
|
+
void CallData::Relay(Size idx, uint8_t *sp)
|
|
583
546
|
{
|
|
584
|
-
if (env.IsExceptionPending()) [[unlikely]]
|
|
585
|
-
return;
|
|
586
|
-
|
|
587
547
|
const TrampolineInfo &trampoline = shared.trampolines[idx];
|
|
588
548
|
|
|
549
|
+
uint8_t *own_sp = sp;
|
|
550
|
+
uint8_t *caller_sp = sp + 128;
|
|
551
|
+
BackRegisters *out_reg = (BackRegisters *)(sp + 80);
|
|
552
|
+
|
|
589
553
|
const FunctionInfo *proto = trampoline.proto;
|
|
590
554
|
Napi::Function func = trampoline.func.Value();
|
|
591
555
|
|
|
@@ -598,11 +562,6 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
598
562
|
|
|
599
563
|
K_DEFER_N(err_guard) { memset(out_reg, 0, K_SIZE(*out_reg)); };
|
|
600
564
|
|
|
601
|
-
if (trampoline.generation >= 0 && trampoline.generation != (int32_t)mem->generation) [[unlikely]] {
|
|
602
|
-
ThrowError<Napi::Error>(env, "Cannot use non-registered callback beyond FFI call");
|
|
603
|
-
return;
|
|
604
|
-
}
|
|
605
|
-
|
|
606
565
|
LocalArray<napi_value, MaxParameters + 1> arguments;
|
|
607
566
|
|
|
608
567
|
arguments.Append(!trampoline.recv.IsEmpty() ? trampoline.recv.Value() : env.Undefined());
|
|
@@ -747,21 +706,18 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
747
706
|
Napi::Value arg = str32 ? MakeStringFromUTF32(env, str32) : env.Null();
|
|
748
707
|
arguments.Append(arg);
|
|
749
708
|
} break;
|
|
750
|
-
case PrimitiveKind::Pointer:
|
|
709
|
+
case PrimitiveKind::Pointer:
|
|
710
|
+
case PrimitiveKind::Callback: {
|
|
751
711
|
void *ptr2 = *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++);
|
|
752
712
|
|
|
753
|
-
|
|
754
|
-
|
|
713
|
+
if (ptr2) {
|
|
714
|
+
Napi::External<void> external = Napi::External<void>::New(env, ptr2);
|
|
715
|
+
SetValueTag(external, param.type->ref.marker);
|
|
755
716
|
|
|
756
|
-
|
|
757
|
-
|
|
717
|
+
arguments.Append(external);
|
|
718
|
+
} else {
|
|
719
|
+
arguments.Append(env.Null());
|
|
758
720
|
}
|
|
759
|
-
} break;
|
|
760
|
-
case PrimitiveKind::Callback: {
|
|
761
|
-
void *ptr2 = *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++);
|
|
762
|
-
|
|
763
|
-
Napi::Value p = ptr2 ? WrapCallback(env, param.type->ref.type, ptr2) : env.Null();
|
|
764
|
-
arguments.Append(p);
|
|
765
721
|
|
|
766
722
|
if (param.type->dispose) {
|
|
767
723
|
param.type->dispose(env, param.type, ptr2);
|
|
@@ -849,58 +805,53 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
849
805
|
|
|
850
806
|
const TypeInfo *type = proto->ret.type;
|
|
851
807
|
|
|
852
|
-
// Make the call
|
|
853
|
-
|
|
854
|
-
if (switch_stack) {
|
|
855
|
-
ret = CallSwitchStack(&func, (size_t)arguments.len, arguments.data, old_sp, &mem->stack,
|
|
856
|
-
[](Napi::Function *func, size_t argc, napi_value *argv) { return (napi_value)func->Call(argv[0], argc - 1, argv + 1); });
|
|
857
|
-
} else {
|
|
858
|
-
ret = (napi_value)func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
|
|
859
|
-
}
|
|
860
|
-
Napi::Value value(env, ret);
|
|
808
|
+
// Make the call!
|
|
809
|
+
Napi::Value value = func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
|
|
861
810
|
|
|
862
811
|
if (env.IsExceptionPending()) [[unlikely]]
|
|
863
812
|
return;
|
|
864
813
|
|
|
865
814
|
#define RETURN_INTEGER_32(CType) \
|
|
866
815
|
do { \
|
|
867
|
-
|
|
868
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
816
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
869
817
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value for return value, expected number", GetValueType(instance, value)); \
|
|
870
818
|
return; \
|
|
871
819
|
} \
|
|
872
820
|
\
|
|
821
|
+
CType v = GetNumber<CType>(value); \
|
|
873
822
|
out_reg->r0 = (uint32_t)v; \
|
|
874
823
|
} while (false)
|
|
875
824
|
#define RETURN_INTEGER_32_SWAP(CType) \
|
|
876
825
|
do { \
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value for return value, expected number", GetValueType(instance, value)); \
|
|
826
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
827
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
880
828
|
return; \
|
|
881
829
|
} \
|
|
882
830
|
\
|
|
831
|
+
CType v = GetNumber<CType>(value); \
|
|
883
832
|
out_reg->r0 = (uint32_t)ReverseBytes(v); \
|
|
884
833
|
} while (false)
|
|
885
834
|
#define RETURN_INTEGER_64(CType) \
|
|
886
835
|
do { \
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value for return value, expected number", GetValueType(instance, value)); \
|
|
836
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
837
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
890
838
|
return; \
|
|
891
839
|
} \
|
|
892
840
|
\
|
|
841
|
+
CType v = GetNumber<CType>(value); \
|
|
842
|
+
\
|
|
893
843
|
out_reg->r0 = (uint32_t)((uint64_t)v >> 32); \
|
|
894
844
|
out_reg->r1 = (uint32_t)((uint64_t)v & 0xFFFFFFFFu); \
|
|
895
845
|
} while (false)
|
|
896
846
|
#define RETURN_INTEGER_64_SWAP(CType) \
|
|
897
847
|
do { \
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value for return value, expected number", GetValueType(instance, value)); \
|
|
848
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
849
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
901
850
|
return; \
|
|
902
851
|
} \
|
|
903
852
|
\
|
|
853
|
+
CType v = ReverseBytes(GetNumber<CType>(value)); \
|
|
854
|
+
\
|
|
904
855
|
out_reg->r0 = (uint32_t)((uint64_t)v >> 32); \
|
|
905
856
|
out_reg->r1 = (uint32_t)((uint64_t)v & 0xFFFFFFFFu); \
|
|
906
857
|
} while (false)
|
|
@@ -909,12 +860,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
909
860
|
switch (type->primitive) {
|
|
910
861
|
case PrimitiveKind::Void: {} break;
|
|
911
862
|
case PrimitiveKind::Bool: {
|
|
912
|
-
|
|
913
|
-
if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
|
|
863
|
+
if (!value.IsBoolean()) [[unlikely]] {
|
|
914
864
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
915
865
|
return;
|
|
916
866
|
}
|
|
917
867
|
|
|
868
|
+
bool b = value.As<Napi::Boolean>();
|
|
918
869
|
out_reg->r0 = (uint32_t)b;
|
|
919
870
|
} break;
|
|
920
871
|
case PrimitiveKind::Int8: { RETURN_INTEGER_32(int8_t); } break;
|
|
@@ -953,9 +904,24 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
953
904
|
out_reg->r0 = (uint32_t)str32;
|
|
954
905
|
} break;
|
|
955
906
|
case PrimitiveKind::Pointer: {
|
|
956
|
-
|
|
957
|
-
|
|
907
|
+
uint8_t *ptr;
|
|
908
|
+
|
|
909
|
+
if (CheckValueTag(value, type->ref.marker)) {
|
|
910
|
+
ptr = value.As<Napi::External<uint8_t>>().Data();
|
|
911
|
+
} else if (IsObject(value) && (type->ref.type->primitive == PrimitiveKind::Record ||
|
|
912
|
+
type->ref.type->primitive == PrimitiveKind::Union)) {
|
|
913
|
+
Napi::Object obj = value.As<Napi::Object>();
|
|
914
|
+
|
|
915
|
+
ptr = AllocHeap(type->ref.type->size, 16);
|
|
916
|
+
|
|
917
|
+
if (!PushObject(obj, type->ref.type, ptr))
|
|
918
|
+
return;
|
|
919
|
+
} else if (IsNullOrUndefined(value)) {
|
|
920
|
+
ptr = nullptr;
|
|
921
|
+
} else {
|
|
922
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
958
923
|
return;
|
|
924
|
+
}
|
|
959
925
|
|
|
960
926
|
out_reg->r0 = (uint32_t)ptr;
|
|
961
927
|
} break;
|
|
@@ -980,12 +946,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
980
946
|
} break;
|
|
981
947
|
case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
|
|
982
948
|
case PrimitiveKind::Float32: {
|
|
983
|
-
|
|
984
|
-
if (!TryNumber(value, &f)) [[unlikely]] {
|
|
949
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
985
950
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
986
951
|
return;
|
|
987
952
|
}
|
|
988
953
|
|
|
954
|
+
float f = GetNumber<float>(value);
|
|
989
955
|
#if defined(__ARM_PCS_VFP)
|
|
990
956
|
memcpy(&out_reg->d0, &f, 4);
|
|
991
957
|
#else
|
|
@@ -993,12 +959,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
993
959
|
#endif
|
|
994
960
|
} break;
|
|
995
961
|
case PrimitiveKind::Float64: {
|
|
996
|
-
|
|
997
|
-
if (!TryNumber(value, &d)) [[unlikely]] {
|
|
962
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
998
963
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
999
964
|
return;
|
|
1000
965
|
}
|
|
1001
966
|
|
|
967
|
+
double d = GetNumber<double>(value);
|
|
1002
968
|
#if defined(__ARM_PCS_VFP)
|
|
1003
969
|
out_reg->d0 = d;
|
|
1004
970
|
#else
|
|
@@ -1007,8 +973,21 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
1007
973
|
} break;
|
|
1008
974
|
case PrimitiveKind::Callback: {
|
|
1009
975
|
void *ptr;
|
|
1010
|
-
|
|
976
|
+
|
|
977
|
+
if (value.IsFunction()) {
|
|
978
|
+
Napi::Function func2 = value.As<Napi::Function>();
|
|
979
|
+
|
|
980
|
+
ptr = ReserveTrampoline(type->ref.proto, func2);
|
|
981
|
+
if (!ptr) [[unlikely]]
|
|
982
|
+
return;
|
|
983
|
+
} else if (CheckValueTag(value, type->ref.marker)) {
|
|
984
|
+
ptr = value.As<Napi::External<void>>().Data();
|
|
985
|
+
} else if (IsNullOrUndefined(value)) {
|
|
986
|
+
ptr = nullptr;
|
|
987
|
+
} else {
|
|
988
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
1011
989
|
return;
|
|
990
|
+
}
|
|
1012
991
|
|
|
1013
992
|
out_reg->r0 = (uint32_t)ptr;
|
|
1014
993
|
} break;
|
|
@@ -1024,6 +1003,16 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
1024
1003
|
err_guard.Disable();
|
|
1025
1004
|
}
|
|
1026
1005
|
|
|
1006
|
+
void *FindTrampolineStart()
|
|
1007
|
+
{
|
|
1008
|
+
return &Trampoline0;
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
void *FindTrampolineEnd()
|
|
1012
|
+
{
|
|
1013
|
+
return &TrampolineEnd;
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1027
1016
|
}
|
|
1028
1017
|
|
|
1029
1018
|
#endif
|