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
|
@@ -146,7 +146,9 @@ SYMBOL(ForwardCallXDD):
|
|
|
146
146
|
# ----------------------------
|
|
147
147
|
|
|
148
148
|
.global SYMBOL(RelayCallback)
|
|
149
|
-
.global SYMBOL(
|
|
149
|
+
.global SYMBOL(SwitchAndRelay)
|
|
150
|
+
.global SYMBOL(RelayDirect)
|
|
151
|
+
.global SYMBOL(TrampolineEnd)
|
|
150
152
|
|
|
151
153
|
# First, make a copy of argument registers.
|
|
152
154
|
# Then call the C function RelayCallback with the following arguments:
|
|
@@ -157,6 +159,14 @@ SYMBOL(ForwardCallXDD):
|
|
|
157
159
|
.cfi_startproc
|
|
158
160
|
.cfi_def_cfa rsp, 8
|
|
159
161
|
ENDBR64
|
|
162
|
+
movq $\id, %rax
|
|
163
|
+
jmp RelayTrampoline
|
|
164
|
+
.cfi_endproc
|
|
165
|
+
.endm
|
|
166
|
+
|
|
167
|
+
RelayTrampoline:
|
|
168
|
+
.cfi_startproc
|
|
169
|
+
.cfi_def_cfa rsp, 8
|
|
160
170
|
subq $152, %rsp
|
|
161
171
|
.cfi_def_cfa rsp, 160
|
|
162
172
|
movq %rdi, 0(%rsp)
|
|
@@ -173,10 +183,8 @@ SYMBOL(ForwardCallXDD):
|
|
|
173
183
|
movsd %xmm5, 88(%rsp)
|
|
174
184
|
movsd %xmm6, 96(%rsp)
|
|
175
185
|
movsd %xmm7, 104(%rsp)
|
|
176
|
-
movq
|
|
186
|
+
movq %rax, %rdi
|
|
177
187
|
movq %rsp, %rsi
|
|
178
|
-
leaq 160(%rsp), %rdx
|
|
179
|
-
leaq 112(%rsp), %rcx
|
|
180
188
|
#if defined(__linux__)
|
|
181
189
|
call *RelayCallback@GOTPCREL(%rip)
|
|
182
190
|
#else
|
|
@@ -190,14 +198,13 @@ SYMBOL(ForwardCallXDD):
|
|
|
190
198
|
.cfi_def_cfa rsp, 8
|
|
191
199
|
ret
|
|
192
200
|
.cfi_endproc
|
|
193
|
-
.endm
|
|
194
201
|
|
|
195
202
|
# When a callback is relayed, Koffi will call into Node.js and V8 to execute Javascript.
|
|
196
203
|
# The problem is that we're still running on the separate Koffi stack, and V8 will
|
|
197
204
|
# probably misdetect this as a "stack overflow". We have to restore the old
|
|
198
205
|
# stack pointer, call Node.js/V8 and go back to ours.
|
|
199
206
|
# The first three parameters (rdi, rsi, rdx) are passed through untouched.
|
|
200
|
-
SYMBOL(
|
|
207
|
+
SYMBOL(SwitchAndRelay):
|
|
201
208
|
.cfi_startproc
|
|
202
209
|
.cfi_def_cfa rsp, 8
|
|
203
210
|
ENDBR64
|
|
@@ -210,7 +217,7 @@ SYMBOL(CallSwitchStack):
|
|
|
210
217
|
movq %r10, 8(%r8)
|
|
211
218
|
movq %rcx, %rsp
|
|
212
219
|
.cfi_def_cfa rsp, 16
|
|
213
|
-
call
|
|
220
|
+
call SYMBOL(RelayDirect)
|
|
214
221
|
mov %rbp, %rsp
|
|
215
222
|
.cfi_def_cfa rsp, 16
|
|
216
223
|
pop %rbp
|
|
@@ -218,7 +225,7 @@ SYMBOL(CallSwitchStack):
|
|
|
218
225
|
ret
|
|
219
226
|
.cfi_endproc
|
|
220
227
|
|
|
221
|
-
#
|
|
222
|
-
# ----------------------------
|
|
228
|
+
#include "gnu.inc"
|
|
223
229
|
|
|
224
|
-
|
|
230
|
+
SYMBOL(TrampolineEnd):
|
|
231
|
+
ret
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
#if defined(_WIN32) && (defined(__x86_64__) || defined(_M_AMD64))
|
|
5
5
|
|
|
6
6
|
#include "lib/native/base/base.hh"
|
|
7
|
-
#include "
|
|
8
|
-
#include "
|
|
9
|
-
#include "
|
|
10
|
-
#include "
|
|
7
|
+
#include "ffi.hh"
|
|
8
|
+
#include "call.hh"
|
|
9
|
+
#include "util.hh"
|
|
10
|
+
#include "win32.hh"
|
|
11
11
|
|
|
12
12
|
#include <napi.h>
|
|
13
13
|
|
|
@@ -25,10 +25,6 @@ extern "C" uint64_t ForwardCallXG(const void *func, uint8_t *sp, uint8_t **out_o
|
|
|
25
25
|
extern "C" float ForwardCallXF(const void *func, uint8_t *sp, uint8_t **out_old_sp);
|
|
26
26
|
extern "C" double ForwardCallXD(const void *func, uint8_t *sp, uint8_t **out_old_sp);
|
|
27
27
|
|
|
28
|
-
extern "C" napi_value CallSwitchStack(Napi::Function *func, size_t argc, napi_value *argv,
|
|
29
|
-
uint8_t *old_sp, Span<uint8_t> *new_stack,
|
|
30
|
-
napi_value (*call)(Napi::Function *func, size_t argc, napi_value *argv));
|
|
31
|
-
|
|
32
28
|
bool AnalyseFunction(Napi::Env, InstanceData *, FunctionInfo *func)
|
|
33
29
|
{
|
|
34
30
|
func->ret.regular = IsRegularSize(func->ret.type->size, 8);
|
|
@@ -45,212 +41,154 @@ bool AnalyseFunction(Napi::Env, InstanceData *, FunctionInfo *func)
|
|
|
45
41
|
|
|
46
42
|
bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
|
|
47
43
|
{
|
|
48
|
-
uint64_t *args_ptr =
|
|
44
|
+
uint64_t *args_ptr = nullptr;
|
|
49
45
|
|
|
50
|
-
|
|
46
|
+
// Pass return value in register or through memory
|
|
47
|
+
if (!AllocStack(func->args_size, 16, &args_ptr)) [[unlikely]]
|
|
51
48
|
return false;
|
|
52
49
|
if (!func->ret.regular) {
|
|
53
50
|
return_ptr = AllocHeap(func->ret.type->size, 16);
|
|
54
51
|
*(uint8_t **)(args_ptr++) = return_ptr;
|
|
55
52
|
}
|
|
56
53
|
|
|
57
|
-
Size i = -1;
|
|
58
|
-
|
|
59
|
-
#if defined(__GNUC__) || defined(__clang__)
|
|
60
|
-
static const void *const DispatchTable[] = {
|
|
61
|
-
#define PRIMITIVE(Name) && Name,
|
|
62
|
-
#include "../primitives.inc"
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
#define LOOP
|
|
66
|
-
#define CASE(Primitive) \
|
|
67
|
-
do { \
|
|
68
|
-
PrimitiveKind next = func->primitives[++i]; \
|
|
69
|
-
goto *DispatchTable[(int)next]; \
|
|
70
|
-
} while (false); \
|
|
71
|
-
Primitive:
|
|
72
|
-
#define OR(Primitive) \
|
|
73
|
-
Primitive:
|
|
74
|
-
#else
|
|
75
|
-
#define LOOP \
|
|
76
|
-
while (++i < func->parameters.len) \
|
|
77
|
-
switch (func->primitives[i])
|
|
78
|
-
#define CASE(Primitive) \
|
|
79
|
-
break; \
|
|
80
|
-
case PrimitiveKind::Primitive:
|
|
81
|
-
#define OR(Primitive) \
|
|
82
|
-
case PrimitiveKind::Primitive:
|
|
83
|
-
#endif
|
|
84
|
-
|
|
85
54
|
#define PUSH_INTEGER(CType) \
|
|
86
55
|
do { \
|
|
87
|
-
|
|
88
|
-
Napi::Value value = info[param.offset]; \
|
|
89
|
-
\
|
|
90
|
-
CType v; \
|
|
91
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
56
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
92
57
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
93
58
|
return false; \
|
|
94
59
|
} \
|
|
95
60
|
\
|
|
61
|
+
CType v = GetNumber<CType>(value); \
|
|
96
62
|
*(args_ptr++) = (uint64_t)v; \
|
|
97
63
|
} while (false)
|
|
98
64
|
#define PUSH_INTEGER_SWAP(CType) \
|
|
99
65
|
do { \
|
|
100
|
-
|
|
101
|
-
Napi::Value value = info[param.offset]; \
|
|
102
|
-
\
|
|
103
|
-
CType v; \
|
|
104
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
66
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
105
67
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
106
68
|
return false; \
|
|
107
69
|
} \
|
|
108
70
|
\
|
|
71
|
+
CType v = GetNumber<CType>(value); \
|
|
109
72
|
*(args_ptr++) = (uint64_t)ReverseBytes(v); \
|
|
110
73
|
} while (false)
|
|
111
74
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
117
|
-
Napi::Value value = info[param.offset];
|
|
118
|
-
|
|
119
|
-
bool b;
|
|
120
|
-
if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
|
|
121
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
122
|
-
return false;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
*(bool *)(args_ptr++) = b;
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
CASE(Int8) { PUSH_INTEGER(int8_t); };
|
|
129
|
-
CASE(UInt8) { PUSH_INTEGER(uint8_t); };
|
|
130
|
-
CASE(Int16) { PUSH_INTEGER(int16_t); };
|
|
131
|
-
CASE(Int16S) { PUSH_INTEGER_SWAP(int16_t); };
|
|
132
|
-
CASE(UInt16) { PUSH_INTEGER(uint16_t); };
|
|
133
|
-
CASE(UInt16S) { PUSH_INTEGER_SWAP(uint16_t); };
|
|
134
|
-
CASE(Int32) { PUSH_INTEGER(int32_t); };
|
|
135
|
-
CASE(Int32S) { PUSH_INTEGER_SWAP(int32_t); };
|
|
136
|
-
CASE(UInt32) { PUSH_INTEGER(uint32_t); };
|
|
137
|
-
CASE(UInt32S) { PUSH_INTEGER_SWAP(uint32_t); };
|
|
138
|
-
CASE(Int64) { PUSH_INTEGER(int64_t); };
|
|
139
|
-
CASE(Int64S) { PUSH_INTEGER_SWAP(int64_t); };
|
|
140
|
-
CASE(UInt64) { PUSH_INTEGER(uint64_t); };
|
|
141
|
-
CASE(UInt64S) { PUSH_INTEGER_SWAP(uint64_t); };
|
|
142
|
-
|
|
143
|
-
CASE(String) {
|
|
144
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
145
|
-
Napi::Value value = info[param.offset];
|
|
146
|
-
|
|
147
|
-
const char *str;
|
|
148
|
-
if (!PushString(value, param.directions, &str)) [[unlikely]]
|
|
149
|
-
return false;
|
|
150
|
-
|
|
151
|
-
*(const char **)(args_ptr++) = str;
|
|
152
|
-
};
|
|
153
|
-
CASE(String16) {
|
|
154
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
155
|
-
Napi::Value value = info[param.offset];
|
|
156
|
-
|
|
157
|
-
const char16_t *str16;
|
|
158
|
-
if (!PushString16(value, param.directions, &str16)) [[unlikely]]
|
|
159
|
-
return false;
|
|
160
|
-
|
|
161
|
-
*(const char16_t **)(args_ptr++) = str16;
|
|
162
|
-
};
|
|
163
|
-
CASE(String32) {
|
|
164
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
165
|
-
Napi::Value value = info[param.offset];
|
|
166
|
-
|
|
167
|
-
const char32_t *str32;
|
|
168
|
-
if (!PushString32(value, param.directions, &str32)) [[unlikely]]
|
|
169
|
-
return false;
|
|
75
|
+
// Push arguments
|
|
76
|
+
for (Size i = 0; i < func->parameters.len; i++) {
|
|
77
|
+
const ParameterInfo ¶m = func->parameters[i];
|
|
78
|
+
K_ASSERT(param.directions >= 1 && param.directions <= 3);
|
|
170
79
|
|
|
171
|
-
|
|
172
|
-
};
|
|
80
|
+
Napi::Value value = info[param.offset];
|
|
173
81
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
Napi::Value value = info[param.offset];
|
|
82
|
+
switch (param.type->primitive) {
|
|
83
|
+
case PrimitiveKind::Void: { K_UNREACHABLE(); } break;
|
|
177
84
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
85
|
+
case PrimitiveKind::Bool: {
|
|
86
|
+
if (!value.IsBoolean()) [[unlikely]] {
|
|
87
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
181
90
|
|
|
182
|
-
|
|
183
|
-
};
|
|
91
|
+
bool b = value.As<Napi::Boolean>();
|
|
184
92
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
93
|
+
*(bool *)(args_ptr++) = b;
|
|
94
|
+
} break;
|
|
95
|
+
case PrimitiveKind::Int8: { PUSH_INTEGER(int8_t); } break;
|
|
96
|
+
case PrimitiveKind::UInt8: { PUSH_INTEGER(uint8_t); } break;
|
|
97
|
+
case PrimitiveKind::Int16: { PUSH_INTEGER(int16_t); } break;
|
|
98
|
+
case PrimitiveKind::Int16S: { PUSH_INTEGER_SWAP(int16_t); } break;
|
|
99
|
+
case PrimitiveKind::UInt16: { PUSH_INTEGER(uint16_t); } break;
|
|
100
|
+
case PrimitiveKind::UInt16S: { PUSH_INTEGER_SWAP(uint16_t); } break;
|
|
101
|
+
case PrimitiveKind::Int32: { PUSH_INTEGER(int32_t); } break;
|
|
102
|
+
case PrimitiveKind::Int32S: { PUSH_INTEGER_SWAP(int32_t); } break;
|
|
103
|
+
case PrimitiveKind::UInt32: { PUSH_INTEGER(uint32_t); } break;
|
|
104
|
+
case PrimitiveKind::UInt32S: { PUSH_INTEGER_SWAP(uint32_t); } break;
|
|
105
|
+
case PrimitiveKind::Int64: { PUSH_INTEGER(int64_t); } break;
|
|
106
|
+
case PrimitiveKind::Int64S: { PUSH_INTEGER_SWAP(int64_t); } break;
|
|
107
|
+
case PrimitiveKind::UInt64: { PUSH_INTEGER(uint64_t); } break;
|
|
108
|
+
case PrimitiveKind::UInt64S: { PUSH_INTEGER_SWAP(uint64_t); } break;
|
|
109
|
+
case PrimitiveKind::String: {
|
|
110
|
+
const char *str;
|
|
111
|
+
if (!PushString(value, param.directions, &str)) [[unlikely]]
|
|
112
|
+
return false;
|
|
188
113
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
114
|
+
*(const char **)(args_ptr++) = str;
|
|
115
|
+
} break;
|
|
116
|
+
case PrimitiveKind::String16: {
|
|
117
|
+
const char16_t *str16;
|
|
118
|
+
if (!PushString16(value, param.directions, &str16)) [[unlikely]]
|
|
119
|
+
return false;
|
|
193
120
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
}
|
|
121
|
+
*(const char16_t **)(args_ptr++) = str16;
|
|
122
|
+
} break;
|
|
123
|
+
case PrimitiveKind::String32: {
|
|
124
|
+
const char32_t *str32;
|
|
125
|
+
if (!PushString32(value, param.directions, &str32)) [[unlikely]]
|
|
126
|
+
return false;
|
|
201
127
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
128
|
+
*(const char32_t **)(args_ptr++) = str32;
|
|
129
|
+
} break;
|
|
130
|
+
case PrimitiveKind::Pointer: {
|
|
131
|
+
void *ptr;
|
|
132
|
+
if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
|
|
133
|
+
return false;
|
|
207
134
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
135
|
+
*(void **)(args_ptr++) = ptr;
|
|
136
|
+
} break;
|
|
137
|
+
case PrimitiveKind::Record:
|
|
138
|
+
case PrimitiveKind::Union: {
|
|
139
|
+
if (!IsObject(value)) [[unlikely]] {
|
|
140
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected object", GetValueType(instance, value));
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
211
143
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
144
|
+
uint8_t *ptr;
|
|
145
|
+
if (param.regular) {
|
|
146
|
+
ptr = (uint8_t *)(args_ptr++);
|
|
147
|
+
} else {
|
|
148
|
+
ptr = AllocHeap(param.type->size, 16);
|
|
149
|
+
*(uint8_t **)(args_ptr++) = ptr;
|
|
150
|
+
}
|
|
217
151
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
152
|
+
Napi::Object obj = value.As<Napi::Object>();
|
|
153
|
+
if (!PushObject(obj, param.type, ptr))
|
|
154
|
+
return false;
|
|
155
|
+
} break;
|
|
156
|
+
case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
|
|
157
|
+
case PrimitiveKind::Float32: {
|
|
158
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
159
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
224
162
|
|
|
225
|
-
|
|
226
|
-
if (!TryNumber(value, &d)) [[unlikely]] {
|
|
227
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
228
|
-
return false;
|
|
229
|
-
}
|
|
163
|
+
float f = GetNumber<float>(value);
|
|
230
164
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
165
|
+
memset((uint8_t *)args_ptr + 4, 0, 4);
|
|
166
|
+
*(float *)(args_ptr++) = f;
|
|
167
|
+
} break;
|
|
168
|
+
case PrimitiveKind::Float64: {
|
|
169
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
170
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
236
173
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
174
|
+
double d = GetNumber<double>(value);
|
|
175
|
+
*(double *)(args_ptr++) = d;
|
|
176
|
+
} break;
|
|
177
|
+
case PrimitiveKind::Callback: {
|
|
178
|
+
void *ptr;
|
|
179
|
+
if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
|
|
180
|
+
return false;
|
|
240
181
|
|
|
241
|
-
|
|
242
|
-
|
|
182
|
+
*(void **)(args_ptr++) = ptr;
|
|
183
|
+
} break;
|
|
243
184
|
|
|
244
|
-
|
|
185
|
+
case PrimitiveKind::Prototype: { K_UNREACHABLE(); } break;
|
|
186
|
+
}
|
|
245
187
|
}
|
|
246
188
|
|
|
247
189
|
#undef PUSH_INTEGER_SWAP
|
|
248
190
|
#undef PUSH_INTEGER
|
|
249
191
|
|
|
250
|
-
#undef OR
|
|
251
|
-
#undef CASE
|
|
252
|
-
#undef LOOP
|
|
253
|
-
|
|
254
192
|
new_sp = mem->stack.end();
|
|
255
193
|
|
|
256
194
|
return true;
|
|
@@ -358,8 +296,17 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
|
|
|
358
296
|
case PrimitiveKind::String: return result.ptr ? Napi::String::New(env, (const char *)result.ptr) : env.Null();
|
|
359
297
|
case PrimitiveKind::String16: return result.ptr ? Napi::String::New(env, (const char16_t *)result.ptr) : env.Null();
|
|
360
298
|
case PrimitiveKind::String32: return result.ptr ? MakeStringFromUTF32(env, (const char32_t *)result.ptr) : env.Null();
|
|
361
|
-
case PrimitiveKind::Pointer:
|
|
362
|
-
case PrimitiveKind::Callback:
|
|
299
|
+
case PrimitiveKind::Pointer:
|
|
300
|
+
case PrimitiveKind::Callback: {
|
|
301
|
+
if (result.ptr) {
|
|
302
|
+
Napi::External<void> external = Napi::External<void>::New(env, result.ptr);
|
|
303
|
+
SetValueTag(external, func->ret.type->ref.marker);
|
|
304
|
+
|
|
305
|
+
return external;
|
|
306
|
+
} else {
|
|
307
|
+
return env.Null();
|
|
308
|
+
}
|
|
309
|
+
} break;
|
|
363
310
|
case PrimitiveKind::Record:
|
|
364
311
|
case PrimitiveKind::Union: {
|
|
365
312
|
const uint8_t *ptr = return_ptr ? (const uint8_t *)return_ptr
|
|
@@ -378,29 +325,14 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
|
|
|
378
325
|
K_UNREACHABLE();
|
|
379
326
|
}
|
|
380
327
|
|
|
381
|
-
void CallData::Relay(Size idx, uint8_t *
|
|
328
|
+
void CallData::Relay(Size idx, uint8_t *sp)
|
|
382
329
|
{
|
|
383
|
-
if (env.IsExceptionPending()) [[unlikely]]
|
|
384
|
-
return;
|
|
385
|
-
|
|
386
|
-
TEB *teb = GetTEB();
|
|
387
|
-
|
|
388
|
-
// Restore previous stack limits at the end
|
|
389
|
-
K_DEFER_C(base = teb->StackBase,
|
|
390
|
-
limit = teb->StackLimit,
|
|
391
|
-
dealloc = teb->DeallocationStack) {
|
|
392
|
-
teb->StackBase = base;
|
|
393
|
-
teb->StackLimit = limit;
|
|
394
|
-
teb->DeallocationStack = dealloc;
|
|
395
|
-
};
|
|
396
|
-
|
|
397
|
-
// Adjust stack limits so SEH works correctly
|
|
398
|
-
teb->StackBase = instance->main_stack_max;
|
|
399
|
-
teb->StackLimit = instance->main_stack_min;
|
|
400
|
-
teb->DeallocationStack = instance->main_stack_min;
|
|
401
|
-
|
|
402
330
|
const TrampolineInfo &trampoline = shared.trampolines[idx];
|
|
403
331
|
|
|
332
|
+
uint8_t *own_sp = sp;
|
|
333
|
+
uint8_t *caller_sp = sp + 128;
|
|
334
|
+
BackRegisters *out_reg = (BackRegisters *)(sp + 64);
|
|
335
|
+
|
|
404
336
|
const FunctionInfo *proto = trampoline.proto;
|
|
405
337
|
Napi::Function func = trampoline.func.Value();
|
|
406
338
|
|
|
@@ -412,11 +344,6 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
412
344
|
|
|
413
345
|
K_DEFER_N(err_guard) { memset(out_reg, 0, K_SIZE(*out_reg)); };
|
|
414
346
|
|
|
415
|
-
if (trampoline.generation >= 0 && trampoline.generation != (int32_t)mem->generation) [[unlikely]] {
|
|
416
|
-
ThrowError<Napi::Error>(env, "Cannot use non-registered callback beyond FFI call");
|
|
417
|
-
return;
|
|
418
|
-
}
|
|
419
|
-
|
|
420
347
|
LocalArray<napi_value, MaxParameters + 1> arguments;
|
|
421
348
|
|
|
422
349
|
arguments.Append(!trampoline.recv.IsEmpty() ? trampoline.recv.Value() : env.Undefined());
|
|
@@ -567,23 +494,19 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
567
494
|
Napi::Value arg = str32 ? MakeStringFromUTF32(env, str32) : env.Null();
|
|
568
495
|
arguments.Append(arg);
|
|
569
496
|
} break;
|
|
570
|
-
case PrimitiveKind::Pointer:
|
|
497
|
+
case PrimitiveKind::Pointer:
|
|
498
|
+
case PrimitiveKind::Callback: {
|
|
571
499
|
void *ptr2 = *(void **)(j < 4 ? gpr_ptr + j : args_ptr);
|
|
572
500
|
args_ptr += (j >= 4);
|
|
573
501
|
|
|
574
|
-
|
|
575
|
-
|
|
502
|
+
if (ptr2) {
|
|
503
|
+
Napi::External<void> external = Napi::External<void>::New(env, ptr2);
|
|
504
|
+
SetValueTag(external, param.type->ref.marker);
|
|
576
505
|
|
|
577
|
-
|
|
578
|
-
|
|
506
|
+
arguments.Append(external);
|
|
507
|
+
} else {
|
|
508
|
+
arguments.Append(env.Null());
|
|
579
509
|
}
|
|
580
|
-
} break;
|
|
581
|
-
case PrimitiveKind::Callback: {
|
|
582
|
-
void *ptr2 = *(void **)(j < 4 ? gpr_ptr + j : args_ptr);
|
|
583
|
-
args_ptr += (j >= 4);
|
|
584
|
-
|
|
585
|
-
Napi::Value p = ptr2 ? WrapCallback(env, param.type->ref.type, ptr2) : env.Null();
|
|
586
|
-
arguments.Append(p);
|
|
587
510
|
|
|
588
511
|
if (param.type->dispose) {
|
|
589
512
|
param.type->dispose(env, param.type, ptr2);
|
|
@@ -624,49 +547,42 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
624
547
|
|
|
625
548
|
const TypeInfo *type = proto->ret.type;
|
|
626
549
|
|
|
627
|
-
// Make the call
|
|
628
|
-
|
|
629
|
-
if (switch_stack) {
|
|
630
|
-
ret = CallSwitchStack(&func, (size_t)arguments.len, arguments.data, old_sp, &mem->stack,
|
|
631
|
-
[](Napi::Function *func, size_t argc, napi_value *argv) { return (napi_value)func->Call(argv[0], argc - 1, argv + 1); });
|
|
632
|
-
} else {
|
|
633
|
-
ret = (napi_value)func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
|
|
634
|
-
}
|
|
635
|
-
Napi::Value value(env, ret);
|
|
550
|
+
// Make the call!
|
|
551
|
+
Napi::Value value = func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
|
|
636
552
|
|
|
637
553
|
if (env.IsExceptionPending()) [[unlikely]]
|
|
638
554
|
return;
|
|
639
555
|
|
|
640
556
|
#define RETURN_INTEGER(CType) \
|
|
641
557
|
do { \
|
|
642
|
-
|
|
643
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
558
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
644
559
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
645
560
|
return; \
|
|
646
561
|
} \
|
|
647
562
|
\
|
|
563
|
+
CType v = GetNumber<CType>(value); \
|
|
648
564
|
out_reg->rax = (uint64_t)v; \
|
|
649
565
|
} while (false)
|
|
650
566
|
#define RETURN_INTEGER_SWAP(CType) \
|
|
651
567
|
do { \
|
|
652
|
-
|
|
653
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
568
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
654
569
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
655
570
|
return; \
|
|
656
571
|
} \
|
|
657
572
|
\
|
|
573
|
+
CType v = GetNumber<CType>(value); \
|
|
658
574
|
out_reg->rax = (uint64_t)ReverseBytes(v); \
|
|
659
575
|
} while (false)
|
|
660
576
|
|
|
661
577
|
switch (type->primitive) {
|
|
662
578
|
case PrimitiveKind::Void: {} break;
|
|
663
579
|
case PrimitiveKind::Bool: {
|
|
664
|
-
|
|
665
|
-
if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
|
|
580
|
+
if (!value.IsBoolean()) [[unlikely]] {
|
|
666
581
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
667
582
|
return;
|
|
668
583
|
}
|
|
669
584
|
|
|
585
|
+
bool b = value.As<Napi::Boolean>();
|
|
670
586
|
out_reg->rax = (uint64_t)b;
|
|
671
587
|
} break;
|
|
672
588
|
case PrimitiveKind::Int8: { RETURN_INTEGER(int8_t); } break;
|
|
@@ -705,9 +621,24 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
705
621
|
out_reg->rax = (uint64_t)str32;
|
|
706
622
|
} break;
|
|
707
623
|
case PrimitiveKind::Pointer: {
|
|
708
|
-
|
|
709
|
-
|
|
624
|
+
uint8_t *ptr;
|
|
625
|
+
|
|
626
|
+
if (CheckValueTag(value, type->ref.marker)) {
|
|
627
|
+
ptr = value.As<Napi::External<uint8_t>>().Data();
|
|
628
|
+
} else if (IsObject(value) && (type->ref.type->primitive == PrimitiveKind::Record ||
|
|
629
|
+
type->ref.type->primitive == PrimitiveKind::Union)) {
|
|
630
|
+
Napi::Object obj = value.As<Napi::Object>();
|
|
631
|
+
|
|
632
|
+
ptr = AllocHeap(type->ref.type->size, 16);
|
|
633
|
+
|
|
634
|
+
if (!PushObject(obj, type->ref.type, ptr))
|
|
635
|
+
return;
|
|
636
|
+
} else if (IsNullOrUndefined(value)) {
|
|
637
|
+
ptr = nullptr;
|
|
638
|
+
} else {
|
|
639
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
710
640
|
return;
|
|
641
|
+
}
|
|
711
642
|
|
|
712
643
|
out_reg->rax = (uint64_t)ptr;
|
|
713
644
|
} break;
|
|
@@ -730,28 +661,42 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
730
661
|
} break;
|
|
731
662
|
case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
|
|
732
663
|
case PrimitiveKind::Float32: {
|
|
733
|
-
|
|
734
|
-
if (!TryNumber(value, &f)) [[unlikely]] {
|
|
664
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
735
665
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
736
666
|
return;
|
|
737
667
|
}
|
|
738
668
|
|
|
669
|
+
float f = GetNumber<float>(value);
|
|
670
|
+
|
|
739
671
|
memset((uint8_t *)&out_reg->xmm0 + 4, 0, 4);
|
|
740
672
|
memcpy(&out_reg->xmm0, &f, 4);
|
|
741
673
|
} break;
|
|
742
674
|
case PrimitiveKind::Float64: {
|
|
743
|
-
|
|
744
|
-
if (!TryNumber(value, &d)) [[unlikely]] {
|
|
675
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
745
676
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
746
677
|
return;
|
|
747
678
|
}
|
|
748
679
|
|
|
680
|
+
double d = GetNumber<double>(value);
|
|
749
681
|
out_reg->xmm0 = d;
|
|
750
682
|
} break;
|
|
751
683
|
case PrimitiveKind::Callback: {
|
|
752
684
|
void *ptr;
|
|
753
|
-
|
|
685
|
+
|
|
686
|
+
if (value.IsFunction()) {
|
|
687
|
+
Napi::Function func2 = value.As<Napi::Function>();
|
|
688
|
+
|
|
689
|
+
ptr = ReserveTrampoline(type->ref.proto, func2);
|
|
690
|
+
if (!ptr) [[unlikely]]
|
|
691
|
+
return;
|
|
692
|
+
} else if (CheckValueTag(value, type->ref.marker)) {
|
|
693
|
+
ptr = value.As<Napi::External<void>>().Data();
|
|
694
|
+
} else if (IsNullOrUndefined(value)) {
|
|
695
|
+
ptr = nullptr;
|
|
696
|
+
} else {
|
|
697
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
754
698
|
return;
|
|
699
|
+
}
|
|
755
700
|
|
|
756
701
|
out_reg->rax = (uint64_t)ptr;
|
|
757
702
|
} break;
|