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
|
@@ -129,7 +129,9 @@ ForwardCallXDD:
|
|
|
129
129
|
# ----------------------------
|
|
130
130
|
|
|
131
131
|
.global RelayCallback
|
|
132
|
-
.global
|
|
132
|
+
.global SwitchAndRelay
|
|
133
|
+
.global RelayDirect
|
|
134
|
+
.global TrampolineEnd
|
|
133
135
|
|
|
134
136
|
# First, make a copy of argument registers.
|
|
135
137
|
# Then call the C function RelayCallback with the following arguments:
|
|
@@ -137,6 +139,12 @@ ForwardCallXDD:
|
|
|
137
139
|
# arguments of this call, and a pointer to a struct that will contain the result registers.
|
|
138
140
|
# After the call, simply load these registers from the output struct.
|
|
139
141
|
.macro trampoline id
|
|
142
|
+
li t0, \id
|
|
143
|
+
j RelayTrampoline
|
|
144
|
+
.balign 16
|
|
145
|
+
.endm
|
|
146
|
+
|
|
147
|
+
RelayTrampoline:
|
|
140
148
|
addi sp, sp, -176
|
|
141
149
|
sd ra, 0(sp)
|
|
142
150
|
sd a0, 8(sp)
|
|
@@ -155,10 +163,8 @@ ForwardCallXDD:
|
|
|
155
163
|
fsd fa5, 112(sp)
|
|
156
164
|
fsd fa6, 120(sp)
|
|
157
165
|
fsd fa7, 128(sp)
|
|
158
|
-
|
|
166
|
+
mv a0, t0
|
|
159
167
|
addi a1, sp, 8
|
|
160
|
-
addi a2, sp, 176
|
|
161
|
-
addi a3, sp, 136
|
|
162
168
|
call RelayCallback
|
|
163
169
|
ld ra, 0(sp)
|
|
164
170
|
ld a0, 136(sp)
|
|
@@ -167,14 +173,13 @@ ForwardCallXDD:
|
|
|
167
173
|
fld fa1, 160(sp)
|
|
168
174
|
addi sp, sp, 176
|
|
169
175
|
ret
|
|
170
|
-
.endm
|
|
171
176
|
|
|
172
177
|
# When a callback is relayed, Koffi will call into Node.js and V8 to execute Javascript.
|
|
173
178
|
# The problem is that we're still running on the separate Koffi stack, and V8 will
|
|
174
179
|
# probably misdetect this as a "stack overflow". We have to restore the old
|
|
175
180
|
# stack pointer, call Node.js/V8 and go back to ours.
|
|
176
181
|
# The first three parameters (a0, a1, a2) are passed through untouched.
|
|
177
|
-
|
|
182
|
+
SwitchAndRelay:
|
|
178
183
|
addi sp, sp, -16
|
|
179
184
|
sd ra, 0(sp)
|
|
180
185
|
sd s1, 8(sp)
|
|
@@ -184,14 +189,15 @@ CallSwitchStack:
|
|
|
184
189
|
andi t0, t0, -16
|
|
185
190
|
sd t0, 8(a4)
|
|
186
191
|
mv sp, a3
|
|
187
|
-
|
|
192
|
+
call RelayDirect
|
|
188
193
|
mv sp, s1
|
|
189
194
|
ld ra, 0(sp)
|
|
190
195
|
ld s1, 8(sp)
|
|
191
196
|
addi sp, sp, 16
|
|
192
197
|
ret
|
|
193
198
|
|
|
194
|
-
|
|
195
|
-
#
|
|
199
|
+
.balign 16
|
|
200
|
+
#include "gnu.inc"
|
|
196
201
|
|
|
197
|
-
|
|
202
|
+
TrampolineEnd:
|
|
203
|
+
ret
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
#if defined(__x86_64__) && !defined(_WIN32)
|
|
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
|
|
|
@@ -55,9 +55,10 @@ extern "C" Xmm0RaxRet ForwardCallXDG(const void *func, uint8_t *sp, uint8_t **ou
|
|
|
55
55
|
extern "C" RaxXmm0Ret ForwardCallXGD(const void *func, uint8_t *sp, uint8_t **out_old_sp);
|
|
56
56
|
extern "C" Xmm0Xmm1Ret ForwardCallXDD(const void *func, uint8_t *sp, uint8_t **out_old_sp);
|
|
57
57
|
|
|
58
|
-
extern "C"
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
extern "C" uint8_t Trampoline0;
|
|
59
|
+
extern "C" uint8_t TrampolineEnd;
|
|
60
|
+
extern "C" void *FindTrampolineStart();
|
|
61
|
+
extern "C" void *FindTrampolineEnd();
|
|
61
62
|
|
|
62
63
|
static inline RegisterClass MergeClasses(RegisterClass cls1, RegisterClass cls2)
|
|
63
64
|
{
|
|
@@ -223,226 +224,179 @@ bool AnalyseFunction(Napi::Env, InstanceData *, FunctionInfo *func)
|
|
|
223
224
|
|
|
224
225
|
bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
|
|
225
226
|
{
|
|
226
|
-
uint64_t *
|
|
227
|
-
uint64_t *
|
|
228
|
-
uint64_t *
|
|
227
|
+
uint64_t *args_ptr = nullptr;
|
|
228
|
+
uint64_t *gpr_ptr = nullptr;
|
|
229
|
+
uint64_t *xmm_ptr = nullptr;
|
|
229
230
|
|
|
230
|
-
|
|
231
|
+
// Return through registers unless it's too big
|
|
232
|
+
if (!AllocStack(func->args_size, 16, &args_ptr)) [[unlikely]]
|
|
233
|
+
return false;
|
|
234
|
+
if (!AllocStack(8 * 8, 8, &xmm_ptr)) [[unlikely]]
|
|
235
|
+
return false;
|
|
236
|
+
if (!AllocStack(6 * 8, 8, &gpr_ptr)) [[unlikely]]
|
|
231
237
|
return false;
|
|
232
238
|
if (func->ret.use_memory) {
|
|
233
239
|
return_ptr = AllocHeap(func->ret.type->size, 16);
|
|
234
240
|
*(uint8_t **)(gpr_ptr++) = return_ptr;
|
|
235
241
|
}
|
|
236
242
|
|
|
237
|
-
Size i = -1;
|
|
238
|
-
|
|
239
|
-
static const void *const DispatchTable[] = {
|
|
240
|
-
#define PRIMITIVE(Name) && Name,
|
|
241
|
-
#include "../primitives.inc"
|
|
242
|
-
};
|
|
243
|
-
|
|
244
|
-
#define LOOP
|
|
245
|
-
#define CASE(Primitive) \
|
|
246
|
-
do { \
|
|
247
|
-
PrimitiveKind next = func->primitives[++i]; \
|
|
248
|
-
goto *DispatchTable[(int)next]; \
|
|
249
|
-
} while (false); \
|
|
250
|
-
Primitive:
|
|
251
|
-
#define OR(Primitive) \
|
|
252
|
-
Primitive:
|
|
253
|
-
|
|
254
243
|
#define PUSH_INTEGER(CType) \
|
|
255
244
|
do { \
|
|
256
|
-
|
|
257
|
-
Napi::Value value = info[param.offset]; \
|
|
258
|
-
\
|
|
259
|
-
CType v; \
|
|
260
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
245
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
261
246
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
262
247
|
return false; \
|
|
263
248
|
} \
|
|
264
249
|
\
|
|
250
|
+
CType v = GetNumber<CType>(value); \
|
|
265
251
|
*((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint64_t)v; \
|
|
266
252
|
} while (false)
|
|
267
253
|
#define PUSH_INTEGER_SWAP(CType) \
|
|
268
254
|
do { \
|
|
269
|
-
|
|
270
|
-
Napi::Value value = info[param.offset]; \
|
|
271
|
-
\
|
|
272
|
-
CType v; \
|
|
273
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
255
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
274
256
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
275
257
|
return false; \
|
|
276
258
|
} \
|
|
277
259
|
\
|
|
260
|
+
CType v = GetNumber<CType>(value); \
|
|
278
261
|
*((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint64_t)ReverseBytes(v); \
|
|
279
262
|
} while (false)
|
|
280
263
|
|
|
281
264
|
// Push arguments
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
CASE(Bool) {
|
|
286
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
287
|
-
Napi::Value value = info[param.offset];
|
|
288
|
-
|
|
289
|
-
bool b;
|
|
290
|
-
if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
|
|
291
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
292
|
-
return false;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
*((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint64_t)b;
|
|
296
|
-
};
|
|
297
|
-
|
|
298
|
-
CASE(Int8) { PUSH_INTEGER(int8_t); };
|
|
299
|
-
CASE(UInt8) { PUSH_INTEGER(uint8_t); };
|
|
300
|
-
CASE(Int16) { PUSH_INTEGER(int16_t); };
|
|
301
|
-
CASE(Int16S) { PUSH_INTEGER_SWAP(int16_t); };
|
|
302
|
-
CASE(UInt16) { PUSH_INTEGER(uint16_t); };
|
|
303
|
-
CASE(UInt16S) { PUSH_INTEGER_SWAP(uint16_t); };
|
|
304
|
-
CASE(Int32) { PUSH_INTEGER(int32_t); };
|
|
305
|
-
CASE(Int32S) { PUSH_INTEGER_SWAP(int32_t); };
|
|
306
|
-
CASE(UInt32) { PUSH_INTEGER(uint32_t); };
|
|
307
|
-
CASE(UInt32S) { PUSH_INTEGER_SWAP(uint32_t); };
|
|
308
|
-
CASE(Int64) { PUSH_INTEGER(int64_t); };
|
|
309
|
-
CASE(Int64S) { PUSH_INTEGER_SWAP(int64_t); };
|
|
310
|
-
CASE(UInt64) { PUSH_INTEGER(int64_t); };
|
|
311
|
-
CASE(UInt64S) { PUSH_INTEGER_SWAP(int64_t); };
|
|
312
|
-
|
|
313
|
-
CASE(String) {
|
|
314
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
315
|
-
Napi::Value value = info[param.offset];
|
|
316
|
-
|
|
317
|
-
const char *str;
|
|
318
|
-
if (!PushString(value, param.directions, &str)) [[unlikely]]
|
|
319
|
-
return false;
|
|
320
|
-
|
|
321
|
-
*(const char **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str;
|
|
322
|
-
};
|
|
323
|
-
CASE(String16) {
|
|
324
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
325
|
-
Napi::Value value = info[param.offset];
|
|
326
|
-
|
|
327
|
-
const char16_t *str16;
|
|
328
|
-
if (!PushString16(value, param.directions, &str16)) [[unlikely]]
|
|
329
|
-
return false;
|
|
265
|
+
for (Size i = 0; i < func->parameters.len; i++) {
|
|
266
|
+
const ParameterInfo ¶m = func->parameters[i];
|
|
267
|
+
K_ASSERT(param.directions >= 1 && param.directions <= 3);
|
|
330
268
|
|
|
331
|
-
|
|
332
|
-
};
|
|
333
|
-
CASE(String32) {
|
|
334
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
335
|
-
Napi::Value value = info[param.offset];
|
|
269
|
+
Napi::Value value = info[param.offset];
|
|
336
270
|
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
return false;
|
|
271
|
+
switch (param.type->primitive) {
|
|
272
|
+
case PrimitiveKind::Void: { K_UNREACHABLE(); } break;
|
|
340
273
|
|
|
341
|
-
|
|
342
|
-
|
|
274
|
+
case PrimitiveKind::Bool: {
|
|
275
|
+
if (!value.IsBoolean()) [[unlikely]] {
|
|
276
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value for argmument %2, expected boolean", GetValueType(instance, value));
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
343
279
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
280
|
+
bool b = value.As<Napi::Boolean>();
|
|
281
|
+
*((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint64_t)b;
|
|
282
|
+
} break;
|
|
283
|
+
case PrimitiveKind::Int8: { PUSH_INTEGER(int8_t); } break;
|
|
284
|
+
case PrimitiveKind::UInt8: { PUSH_INTEGER(uint8_t); } break;
|
|
285
|
+
case PrimitiveKind::Int16: { PUSH_INTEGER(int16_t); } break;
|
|
286
|
+
case PrimitiveKind::Int16S: { PUSH_INTEGER_SWAP(int16_t); } break;
|
|
287
|
+
case PrimitiveKind::UInt16: { PUSH_INTEGER(uint16_t); } break;
|
|
288
|
+
case PrimitiveKind::UInt16S: { PUSH_INTEGER_SWAP(uint16_t); } break;
|
|
289
|
+
case PrimitiveKind::Int32: { PUSH_INTEGER(int32_t); } break;
|
|
290
|
+
case PrimitiveKind::Int32S: { PUSH_INTEGER_SWAP(int32_t); } break;
|
|
291
|
+
case PrimitiveKind::UInt32: { PUSH_INTEGER(uint32_t); } break;
|
|
292
|
+
case PrimitiveKind::UInt32S: { PUSH_INTEGER_SWAP(uint32_t); } break;
|
|
293
|
+
case PrimitiveKind::Int64: { PUSH_INTEGER(int64_t); } break;
|
|
294
|
+
case PrimitiveKind::Int64S: { PUSH_INTEGER_SWAP(int64_t); } break;
|
|
295
|
+
case PrimitiveKind::UInt64: { PUSH_INTEGER(uint64_t); } break;
|
|
296
|
+
case PrimitiveKind::UInt64S: { PUSH_INTEGER_SWAP(uint64_t); } break;
|
|
297
|
+
case PrimitiveKind::String: {
|
|
298
|
+
const char *str;
|
|
299
|
+
if (!PushString(value, param.directions, &str)) [[unlikely]]
|
|
300
|
+
return false;
|
|
347
301
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
302
|
+
*(const char **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str;
|
|
303
|
+
} break;
|
|
304
|
+
case PrimitiveKind::String16: {
|
|
305
|
+
const char16_t *str16;
|
|
306
|
+
if (!PushString16(value, param.directions, &str16)) [[unlikely]]
|
|
307
|
+
return false;
|
|
351
308
|
|
|
352
|
-
|
|
353
|
-
|
|
309
|
+
*(const char16_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str16;
|
|
310
|
+
} break;
|
|
311
|
+
case PrimitiveKind::String32: {
|
|
312
|
+
const char32_t *str32;
|
|
313
|
+
if (!PushString32(value, param.directions, &str32)) [[unlikely]]
|
|
314
|
+
return false;
|
|
354
315
|
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
316
|
+
*(const char32_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str32;
|
|
317
|
+
} break;
|
|
318
|
+
case PrimitiveKind::Pointer: {
|
|
319
|
+
void *ptr;
|
|
320
|
+
if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
|
|
321
|
+
return false;
|
|
358
322
|
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
323
|
+
*(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
|
|
324
|
+
} break;
|
|
325
|
+
case PrimitiveKind::Record:
|
|
326
|
+
case PrimitiveKind::Union: {
|
|
327
|
+
if (!IsObject(value)) [[unlikely]] {
|
|
328
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected object", GetValueType(instance, value));
|
|
329
|
+
return false;
|
|
330
|
+
}
|
|
363
331
|
|
|
364
|
-
|
|
332
|
+
Napi::Object obj = value.As<Napi::Object>();
|
|
365
333
|
|
|
366
|
-
|
|
367
|
-
|
|
334
|
+
if (param.gpr_count || param.xmm_count) {
|
|
335
|
+
K_ASSERT(param.type->size <= 16);
|
|
368
336
|
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
337
|
+
uint64_t buf[2] = {};
|
|
338
|
+
if (!PushObject(obj, param.type, (uint8_t *)buf))
|
|
339
|
+
return false;
|
|
372
340
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
341
|
+
if (param.gpr_first) {
|
|
342
|
+
*(gpr_ptr++) = buf[0];
|
|
343
|
+
if (param.gpr_count == 2) {
|
|
344
|
+
*(gpr_ptr++) = buf[1];
|
|
345
|
+
} else if (param.xmm_count == 1) {
|
|
346
|
+
*(xmm_ptr++) = buf[1];
|
|
347
|
+
}
|
|
348
|
+
} else {
|
|
349
|
+
*(xmm_ptr++) = buf[0];
|
|
350
|
+
if (param.xmm_count == 2) {
|
|
351
|
+
*(xmm_ptr++) = buf[1];
|
|
352
|
+
} else if (param.gpr_count == 1) {
|
|
353
|
+
*(gpr_ptr++) = buf[1];
|
|
354
|
+
}
|
|
386
355
|
}
|
|
356
|
+
} else if (param.use_memory) {
|
|
357
|
+
args_ptr = AlignUp(args_ptr, param.type->align);
|
|
358
|
+
if (!PushObject(obj, param.type, (uint8_t *)args_ptr))
|
|
359
|
+
return false;
|
|
360
|
+
args_ptr += (param.type->size + 7) / 8;
|
|
387
361
|
}
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
|
|
362
|
+
} break;
|
|
363
|
+
case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
|
|
364
|
+
case PrimitiveKind::Float32: {
|
|
365
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
366
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
391
367
|
return false;
|
|
392
|
-
|
|
393
|
-
}
|
|
394
|
-
};
|
|
395
|
-
CASE(Array) { K_UNREACHABLE(); };
|
|
396
|
-
|
|
397
|
-
CASE(Float32) {
|
|
398
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
399
|
-
Napi::Value value = info[param.offset];
|
|
400
|
-
|
|
401
|
-
float f;
|
|
402
|
-
if (!TryNumber(value, &f)) [[unlikely]] {
|
|
403
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
404
|
-
return false;
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
uint64_t *ptr = (param.xmm_count ? xmm_ptr : args_ptr)++;
|
|
408
|
-
|
|
409
|
-
memset((uint8_t *)ptr + 4, 0, 4);
|
|
410
|
-
*(float *)ptr = f;
|
|
411
|
-
};
|
|
412
|
-
CASE(Float64) {
|
|
413
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
414
|
-
Napi::Value value = info[param.offset];
|
|
415
|
-
|
|
416
|
-
double d;
|
|
417
|
-
if (!TryNumber(value, &d)) [[unlikely]] {
|
|
418
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
419
|
-
return false;
|
|
420
|
-
}
|
|
368
|
+
}
|
|
421
369
|
|
|
422
|
-
|
|
423
|
-
|
|
370
|
+
float f = GetNumber<float>(value);
|
|
371
|
+
uint64_t *ptr = (param.xmm_count ? xmm_ptr : args_ptr)++;
|
|
424
372
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
373
|
+
memset((uint8_t *)ptr + 4, 0, 4);
|
|
374
|
+
*(float *)ptr = f;
|
|
375
|
+
} break;
|
|
376
|
+
case PrimitiveKind::Float64: {
|
|
377
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
378
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
379
|
+
return false;
|
|
380
|
+
}
|
|
428
381
|
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
382
|
+
double d = GetNumber<double>(value);
|
|
383
|
+
*(double *)((param.xmm_count ? xmm_ptr : args_ptr)++) = d;
|
|
384
|
+
} break;
|
|
385
|
+
case PrimitiveKind::Callback: {
|
|
386
|
+
void *ptr;
|
|
387
|
+
if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
|
|
388
|
+
return false;
|
|
432
389
|
|
|
433
|
-
|
|
434
|
-
|
|
390
|
+
*(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
|
|
391
|
+
} break;
|
|
435
392
|
|
|
436
|
-
|
|
393
|
+
case PrimitiveKind::Prototype: { K_UNREACHABLE(); } break;
|
|
394
|
+
}
|
|
437
395
|
}
|
|
438
396
|
|
|
439
397
|
#undef PUSH_INTEGER_SWAP
|
|
440
398
|
#undef PUSH_INTEGER
|
|
441
399
|
|
|
442
|
-
#undef OR
|
|
443
|
-
#undef CASE
|
|
444
|
-
#undef LOOP
|
|
445
|
-
|
|
446
400
|
new_sp = mem->stack.end();
|
|
447
401
|
|
|
448
402
|
return true;
|
|
@@ -536,8 +490,17 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
|
|
|
536
490
|
case PrimitiveKind::String: return result.ptr ? Napi::String::New(env, (const char *)result.ptr) : env.Null();
|
|
537
491
|
case PrimitiveKind::String16: return result.ptr ? Napi::String::New(env, (const char16_t *)result.ptr) : env.Null();
|
|
538
492
|
case PrimitiveKind::String32: return result.ptr ? MakeStringFromUTF32(env, (const char32_t *)result.ptr) : env.Null();
|
|
539
|
-
case PrimitiveKind::Pointer:
|
|
540
|
-
case PrimitiveKind::Callback:
|
|
493
|
+
case PrimitiveKind::Pointer:
|
|
494
|
+
case PrimitiveKind::Callback: {
|
|
495
|
+
if (result.ptr) {
|
|
496
|
+
Napi::External<void> external = Napi::External<void>::New(env, result.ptr);
|
|
497
|
+
SetValueTag(external, func->ret.type->ref.marker);
|
|
498
|
+
|
|
499
|
+
return external;
|
|
500
|
+
} else {
|
|
501
|
+
return env.Null();
|
|
502
|
+
}
|
|
503
|
+
} break;
|
|
541
504
|
case PrimitiveKind::Record:
|
|
542
505
|
case PrimitiveKind::Union: {
|
|
543
506
|
const uint8_t *ptr = return_ptr ? (const uint8_t *)return_ptr
|
|
@@ -556,13 +519,14 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
|
|
|
556
519
|
K_UNREACHABLE();
|
|
557
520
|
}
|
|
558
521
|
|
|
559
|
-
void CallData::Relay(Size idx, uint8_t *
|
|
522
|
+
void CallData::Relay(Size idx, uint8_t *sp)
|
|
560
523
|
{
|
|
561
|
-
if (env.IsExceptionPending()) [[unlikely]]
|
|
562
|
-
return;
|
|
563
|
-
|
|
564
524
|
const TrampolineInfo &trampoline = shared.trampolines[idx];
|
|
565
525
|
|
|
526
|
+
uint8_t *own_sp = sp;
|
|
527
|
+
uint8_t *caller_sp = sp + 160;
|
|
528
|
+
BackRegisters *out_reg = (BackRegisters *)(sp + 112);
|
|
529
|
+
|
|
566
530
|
const FunctionInfo *proto = trampoline.proto;
|
|
567
531
|
Napi::Function func = trampoline.func.Value();
|
|
568
532
|
|
|
@@ -575,11 +539,6 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
575
539
|
|
|
576
540
|
K_DEFER_N(err_guard) { memset(out_reg, 0, K_SIZE(*out_reg)); };
|
|
577
541
|
|
|
578
|
-
if (trampoline.generation >= 0 && trampoline.generation != (int32_t)mem->generation) [[unlikely]] {
|
|
579
|
-
ThrowError<Napi::Error>(env, "Cannot use non-registered callback beyond FFI call");
|
|
580
|
-
return;
|
|
581
|
-
}
|
|
582
|
-
|
|
583
542
|
LocalArray<napi_value, MaxParameters + 1> arguments;
|
|
584
543
|
|
|
585
544
|
arguments.Append(!trampoline.recv.IsEmpty() ? trampoline.recv.Value() : env.Undefined());
|
|
@@ -712,21 +671,18 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
712
671
|
Napi::Value arg = str32 ? MakeStringFromUTF32(env, str32) : env.Null();
|
|
713
672
|
arguments.Append(arg);
|
|
714
673
|
} break;
|
|
715
|
-
case PrimitiveKind::Pointer:
|
|
674
|
+
case PrimitiveKind::Pointer:
|
|
675
|
+
case PrimitiveKind::Callback: {
|
|
716
676
|
void *ptr2 = *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++);
|
|
717
677
|
|
|
718
|
-
|
|
719
|
-
|
|
678
|
+
if (ptr2) {
|
|
679
|
+
Napi::External<void> external = Napi::External<void>::New(env, ptr2);
|
|
680
|
+
SetValueTag(external, param.type->ref.marker);
|
|
720
681
|
|
|
721
|
-
|
|
722
|
-
|
|
682
|
+
arguments.Append(external);
|
|
683
|
+
} else {
|
|
684
|
+
arguments.Append(env.Null());
|
|
723
685
|
}
|
|
724
|
-
} break;
|
|
725
|
-
case PrimitiveKind::Callback: {
|
|
726
|
-
void *ptr2 = *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++);
|
|
727
|
-
|
|
728
|
-
Napi::Value p = ptr2 ? WrapCallback(env, param.type->ref.type, ptr2) : env.Null();
|
|
729
|
-
arguments.Append(p);
|
|
730
686
|
|
|
731
687
|
if (param.type->dispose) {
|
|
732
688
|
param.type->dispose(env, param.type, ptr2);
|
|
@@ -786,37 +742,30 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
786
742
|
|
|
787
743
|
const TypeInfo *type = proto->ret.type;
|
|
788
744
|
|
|
789
|
-
// Make the call
|
|
790
|
-
|
|
791
|
-
if (switch_stack) {
|
|
792
|
-
ret = CallSwitchStack(&func, (size_t)arguments.len, arguments.data, old_sp, &mem->stack,
|
|
793
|
-
[](Napi::Function *func, size_t argc, napi_value *argv) { return (napi_value)func->Call(argv[0], argc - 1, argv + 1); });
|
|
794
|
-
} else {
|
|
795
|
-
ret = (napi_value)func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
|
|
796
|
-
}
|
|
797
|
-
Napi::Value value(env, ret);
|
|
745
|
+
// Make the call!
|
|
746
|
+
Napi::Value value = func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
|
|
798
747
|
|
|
799
748
|
if (env.IsExceptionPending()) [[unlikely]]
|
|
800
749
|
return;
|
|
801
750
|
|
|
802
751
|
#define RETURN_INTEGER(CType) \
|
|
803
752
|
do { \
|
|
804
|
-
|
|
805
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
753
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
806
754
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
807
755
|
return; \
|
|
808
756
|
} \
|
|
809
757
|
\
|
|
758
|
+
CType v = GetNumber<CType>(value); \
|
|
810
759
|
out_reg->rax = (uint64_t)v; \
|
|
811
760
|
} while (false)
|
|
812
761
|
#define RETURN_INTEGER_SWAP(CType) \
|
|
813
762
|
do { \
|
|
814
|
-
|
|
815
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
763
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
816
764
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
817
765
|
return; \
|
|
818
766
|
} \
|
|
819
767
|
\
|
|
768
|
+
CType v = GetNumber<CType>(value); \
|
|
820
769
|
out_reg->rax = (uint64_t)ReverseBytes(v); \
|
|
821
770
|
} while (false)
|
|
822
771
|
|
|
@@ -824,12 +773,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
824
773
|
switch (type->primitive) {
|
|
825
774
|
case PrimitiveKind::Void: {} break;
|
|
826
775
|
case PrimitiveKind::Bool: {
|
|
827
|
-
|
|
828
|
-
if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
|
|
776
|
+
if (!value.IsBoolean()) [[unlikely]] {
|
|
829
777
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
830
778
|
return;
|
|
831
779
|
}
|
|
832
780
|
|
|
781
|
+
bool b = value.As<Napi::Boolean>();
|
|
833
782
|
out_reg->rax = (uint64_t)b;
|
|
834
783
|
} break;
|
|
835
784
|
case PrimitiveKind::Int8: { RETURN_INTEGER(int8_t); } break;
|
|
@@ -868,9 +817,24 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
868
817
|
out_reg->rax = (uint64_t)str32;
|
|
869
818
|
} break;
|
|
870
819
|
case PrimitiveKind::Pointer: {
|
|
871
|
-
|
|
872
|
-
|
|
820
|
+
uint8_t *ptr;
|
|
821
|
+
|
|
822
|
+
if (CheckValueTag(value, type->ref.marker)) {
|
|
823
|
+
ptr = value.As<Napi::External<uint8_t>>().Data();
|
|
824
|
+
} else if (IsObject(value) && (type->ref.type->primitive == PrimitiveKind::Record ||
|
|
825
|
+
type->ref.type->primitive == PrimitiveKind::Union)) {
|
|
826
|
+
Napi::Object obj = value.As<Napi::Object>();
|
|
827
|
+
|
|
828
|
+
ptr = AllocHeap(type->ref.type->size, 16);
|
|
829
|
+
|
|
830
|
+
if (!PushObject(obj, type->ref.type, ptr))
|
|
831
|
+
return;
|
|
832
|
+
} else if (IsNullOrUndefined(value)) {
|
|
833
|
+
ptr = nullptr;
|
|
834
|
+
} else {
|
|
835
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
873
836
|
return;
|
|
837
|
+
}
|
|
874
838
|
|
|
875
839
|
out_reg->rax = (uint64_t)ptr;
|
|
876
840
|
} break;
|
|
@@ -911,28 +875,42 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
911
875
|
} break;
|
|
912
876
|
case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
|
|
913
877
|
case PrimitiveKind::Float32: {
|
|
914
|
-
|
|
915
|
-
if (!TryNumber(value, &f)) [[unlikely]] {
|
|
878
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
916
879
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
917
880
|
return;
|
|
918
881
|
}
|
|
919
882
|
|
|
883
|
+
float f = GetNumber<float>(value);
|
|
884
|
+
|
|
920
885
|
memset((uint8_t *)&out_reg->xmm0 + 4, 0, 4);
|
|
921
886
|
memcpy(&out_reg->xmm0, &f, 4);
|
|
922
887
|
} break;
|
|
923
888
|
case PrimitiveKind::Float64: {
|
|
924
|
-
|
|
925
|
-
if (!TryNumber(value, &d)) [[unlikely]] {
|
|
889
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
926
890
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
927
891
|
return;
|
|
928
892
|
}
|
|
929
893
|
|
|
894
|
+
double d = GetNumber<double>(value);
|
|
930
895
|
out_reg->xmm0 = d;
|
|
931
896
|
} break;
|
|
932
897
|
case PrimitiveKind::Callback: {
|
|
933
898
|
void *ptr;
|
|
934
|
-
|
|
899
|
+
|
|
900
|
+
if (value.IsFunction()) {
|
|
901
|
+
Napi::Function func2 = value.As<Napi::Function>();
|
|
902
|
+
|
|
903
|
+
ptr = ReserveTrampoline(type->ref.proto, func2);
|
|
904
|
+
if (!ptr) [[unlikely]]
|
|
905
|
+
return;
|
|
906
|
+
} else if (CheckValueTag(value, type->ref.marker)) {
|
|
907
|
+
ptr = value.As<Napi::External<void>>().Data();
|
|
908
|
+
} else if (IsNullOrUndefined(value)) {
|
|
909
|
+
ptr = nullptr;
|
|
910
|
+
} else {
|
|
911
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
935
912
|
return;
|
|
913
|
+
}
|
|
936
914
|
|
|
937
915
|
out_reg->rax = (uint64_t)ptr;
|
|
938
916
|
} break;
|
|
@@ -946,6 +924,16 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
946
924
|
err_guard.Disable();
|
|
947
925
|
}
|
|
948
926
|
|
|
927
|
+
void *FindTrampolineStart()
|
|
928
|
+
{
|
|
929
|
+
return &Trampoline0;
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
void *FindTrampolineEnd()
|
|
933
|
+
{
|
|
934
|
+
return &TrampolineEnd;
|
|
935
|
+
}
|
|
936
|
+
|
|
949
937
|
}
|
|
950
938
|
|
|
951
939
|
#endif
|