koffi 2.16.0-beta.2 → 2.16.0
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 +59 -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 -238
- 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 -274
- 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 -236
- 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 -212
- 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 -206
- 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 -226
- package/src/koffi/src/{abi/x86_asm.S → abi_x86_asm.S} +36 -21
- package/src/koffi/src/{abi/x86_asm.asm → abi_x86_asm.asm} +31 -16
- package/src/koffi/src/call.cc +473 -287
- package/src/koffi/src/call.hh +15 -18
- package/src/koffi/src/ffi.cc +167 -183
- package/src/koffi/src/ffi.hh +59 -13
- 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
|
+
.align 4
|
|
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
|
+
.align 4
|
|
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,8 +519,12 @@ 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
|
{
|
|
524
|
+
uint8_t *own_sp = sp;
|
|
525
|
+
uint8_t *caller_sp = sp + 160;
|
|
526
|
+
BackRegisters *out_reg = (BackRegisters *)(sp + 112);
|
|
527
|
+
|
|
561
528
|
if (env.IsExceptionPending()) [[unlikely]]
|
|
562
529
|
return;
|
|
563
530
|
|
|
@@ -712,21 +679,18 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
712
679
|
Napi::Value arg = str32 ? MakeStringFromUTF32(env, str32) : env.Null();
|
|
713
680
|
arguments.Append(arg);
|
|
714
681
|
} break;
|
|
715
|
-
case PrimitiveKind::Pointer:
|
|
682
|
+
case PrimitiveKind::Pointer:
|
|
683
|
+
case PrimitiveKind::Callback: {
|
|
716
684
|
void *ptr2 = *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++);
|
|
717
685
|
|
|
718
|
-
|
|
719
|
-
|
|
686
|
+
if (ptr2) {
|
|
687
|
+
Napi::External<void> external = Napi::External<void>::New(env, ptr2);
|
|
688
|
+
SetValueTag(external, param.type->ref.marker);
|
|
720
689
|
|
|
721
|
-
|
|
722
|
-
|
|
690
|
+
arguments.Append(external);
|
|
691
|
+
} else {
|
|
692
|
+
arguments.Append(env.Null());
|
|
723
693
|
}
|
|
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
694
|
|
|
731
695
|
if (param.type->dispose) {
|
|
732
696
|
param.type->dispose(env, param.type, ptr2);
|
|
@@ -786,37 +750,30 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
786
750
|
|
|
787
751
|
const TypeInfo *type = proto->ret.type;
|
|
788
752
|
|
|
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);
|
|
753
|
+
// Make the call!
|
|
754
|
+
Napi::Value value = func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
|
|
798
755
|
|
|
799
756
|
if (env.IsExceptionPending()) [[unlikely]]
|
|
800
757
|
return;
|
|
801
758
|
|
|
802
759
|
#define RETURN_INTEGER(CType) \
|
|
803
760
|
do { \
|
|
804
|
-
|
|
805
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
761
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
806
762
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
807
763
|
return; \
|
|
808
764
|
} \
|
|
809
765
|
\
|
|
766
|
+
CType v = GetNumber<CType>(value); \
|
|
810
767
|
out_reg->rax = (uint64_t)v; \
|
|
811
768
|
} while (false)
|
|
812
769
|
#define RETURN_INTEGER_SWAP(CType) \
|
|
813
770
|
do { \
|
|
814
|
-
|
|
815
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
771
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
816
772
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
817
773
|
return; \
|
|
818
774
|
} \
|
|
819
775
|
\
|
|
776
|
+
CType v = GetNumber<CType>(value); \
|
|
820
777
|
out_reg->rax = (uint64_t)ReverseBytes(v); \
|
|
821
778
|
} while (false)
|
|
822
779
|
|
|
@@ -824,12 +781,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
824
781
|
switch (type->primitive) {
|
|
825
782
|
case PrimitiveKind::Void: {} break;
|
|
826
783
|
case PrimitiveKind::Bool: {
|
|
827
|
-
|
|
828
|
-
if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
|
|
784
|
+
if (!value.IsBoolean()) [[unlikely]] {
|
|
829
785
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
830
786
|
return;
|
|
831
787
|
}
|
|
832
788
|
|
|
789
|
+
bool b = value.As<Napi::Boolean>();
|
|
833
790
|
out_reg->rax = (uint64_t)b;
|
|
834
791
|
} break;
|
|
835
792
|
case PrimitiveKind::Int8: { RETURN_INTEGER(int8_t); } break;
|
|
@@ -868,9 +825,24 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
868
825
|
out_reg->rax = (uint64_t)str32;
|
|
869
826
|
} break;
|
|
870
827
|
case PrimitiveKind::Pointer: {
|
|
871
|
-
|
|
872
|
-
|
|
828
|
+
uint8_t *ptr;
|
|
829
|
+
|
|
830
|
+
if (CheckValueTag(value, type->ref.marker)) {
|
|
831
|
+
ptr = value.As<Napi::External<uint8_t>>().Data();
|
|
832
|
+
} else if (IsObject(value) && (type->ref.type->primitive == PrimitiveKind::Record ||
|
|
833
|
+
type->ref.type->primitive == PrimitiveKind::Union)) {
|
|
834
|
+
Napi::Object obj = value.As<Napi::Object>();
|
|
835
|
+
|
|
836
|
+
ptr = AllocHeap(type->ref.type->size, 16);
|
|
837
|
+
|
|
838
|
+
if (!PushObject(obj, type->ref.type, ptr))
|
|
839
|
+
return;
|
|
840
|
+
} else if (IsNullOrUndefined(value)) {
|
|
841
|
+
ptr = nullptr;
|
|
842
|
+
} else {
|
|
843
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
873
844
|
return;
|
|
845
|
+
}
|
|
874
846
|
|
|
875
847
|
out_reg->rax = (uint64_t)ptr;
|
|
876
848
|
} break;
|
|
@@ -911,28 +883,42 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
911
883
|
} break;
|
|
912
884
|
case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
|
|
913
885
|
case PrimitiveKind::Float32: {
|
|
914
|
-
|
|
915
|
-
if (!TryNumber(value, &f)) [[unlikely]] {
|
|
886
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
916
887
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
917
888
|
return;
|
|
918
889
|
}
|
|
919
890
|
|
|
891
|
+
float f = GetNumber<float>(value);
|
|
892
|
+
|
|
920
893
|
memset((uint8_t *)&out_reg->xmm0 + 4, 0, 4);
|
|
921
894
|
memcpy(&out_reg->xmm0, &f, 4);
|
|
922
895
|
} break;
|
|
923
896
|
case PrimitiveKind::Float64: {
|
|
924
|
-
|
|
925
|
-
if (!TryNumber(value, &d)) [[unlikely]] {
|
|
897
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
926
898
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
927
899
|
return;
|
|
928
900
|
}
|
|
929
901
|
|
|
902
|
+
double d = GetNumber<double>(value);
|
|
930
903
|
out_reg->xmm0 = d;
|
|
931
904
|
} break;
|
|
932
905
|
case PrimitiveKind::Callback: {
|
|
933
906
|
void *ptr;
|
|
934
|
-
|
|
907
|
+
|
|
908
|
+
if (value.IsFunction()) {
|
|
909
|
+
Napi::Function func2 = value.As<Napi::Function>();
|
|
910
|
+
|
|
911
|
+
ptr = ReserveTrampoline(type->ref.proto, func2);
|
|
912
|
+
if (!ptr) [[unlikely]]
|
|
913
|
+
return;
|
|
914
|
+
} else if (CheckValueTag(value, type->ref.marker)) {
|
|
915
|
+
ptr = value.As<Napi::External<void>>().Data();
|
|
916
|
+
} else if (IsNullOrUndefined(value)) {
|
|
917
|
+
ptr = nullptr;
|
|
918
|
+
} else {
|
|
919
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
935
920
|
return;
|
|
921
|
+
}
|
|
936
922
|
|
|
937
923
|
out_reg->rax = (uint64_t)ptr;
|
|
938
924
|
} break;
|
|
@@ -946,6 +932,16 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
946
932
|
err_guard.Disable();
|
|
947
933
|
}
|
|
948
934
|
|
|
935
|
+
void *FindTrampolineStart()
|
|
936
|
+
{
|
|
937
|
+
return &Trampoline0;
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
void *FindTrampolineEnd()
|
|
941
|
+
{
|
|
942
|
+
return &TrampolineEnd;
|
|
943
|
+
}
|
|
944
|
+
|
|
949
945
|
}
|
|
950
946
|
|
|
951
947
|
#endif
|