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
|
@@ -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,8 +325,12 @@ 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
|
{
|
|
330
|
+
uint8_t *own_sp = sp;
|
|
331
|
+
uint8_t *caller_sp = sp + 128;
|
|
332
|
+
BackRegisters *out_reg = (BackRegisters *)(sp + 64);
|
|
333
|
+
|
|
383
334
|
if (env.IsExceptionPending()) [[unlikely]]
|
|
384
335
|
return;
|
|
385
336
|
|
|
@@ -567,23 +518,19 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
567
518
|
Napi::Value arg = str32 ? MakeStringFromUTF32(env, str32) : env.Null();
|
|
568
519
|
arguments.Append(arg);
|
|
569
520
|
} break;
|
|
570
|
-
case PrimitiveKind::Pointer:
|
|
521
|
+
case PrimitiveKind::Pointer:
|
|
522
|
+
case PrimitiveKind::Callback: {
|
|
571
523
|
void *ptr2 = *(void **)(j < 4 ? gpr_ptr + j : args_ptr);
|
|
572
524
|
args_ptr += (j >= 4);
|
|
573
525
|
|
|
574
|
-
|
|
575
|
-
|
|
526
|
+
if (ptr2) {
|
|
527
|
+
Napi::External<void> external = Napi::External<void>::New(env, ptr2);
|
|
528
|
+
SetValueTag(external, param.type->ref.marker);
|
|
576
529
|
|
|
577
|
-
|
|
578
|
-
|
|
530
|
+
arguments.Append(external);
|
|
531
|
+
} else {
|
|
532
|
+
arguments.Append(env.Null());
|
|
579
533
|
}
|
|
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
534
|
|
|
588
535
|
if (param.type->dispose) {
|
|
589
536
|
param.type->dispose(env, param.type, ptr2);
|
|
@@ -624,49 +571,42 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
624
571
|
|
|
625
572
|
const TypeInfo *type = proto->ret.type;
|
|
626
573
|
|
|
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);
|
|
574
|
+
// Make the call!
|
|
575
|
+
Napi::Value value = func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
|
|
636
576
|
|
|
637
577
|
if (env.IsExceptionPending()) [[unlikely]]
|
|
638
578
|
return;
|
|
639
579
|
|
|
640
580
|
#define RETURN_INTEGER(CType) \
|
|
641
581
|
do { \
|
|
642
|
-
|
|
643
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
582
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
644
583
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
645
584
|
return; \
|
|
646
585
|
} \
|
|
647
586
|
\
|
|
587
|
+
CType v = GetNumber<CType>(value); \
|
|
648
588
|
out_reg->rax = (uint64_t)v; \
|
|
649
589
|
} while (false)
|
|
650
590
|
#define RETURN_INTEGER_SWAP(CType) \
|
|
651
591
|
do { \
|
|
652
|
-
|
|
653
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
592
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
654
593
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
655
594
|
return; \
|
|
656
595
|
} \
|
|
657
596
|
\
|
|
597
|
+
CType v = GetNumber<CType>(value); \
|
|
658
598
|
out_reg->rax = (uint64_t)ReverseBytes(v); \
|
|
659
599
|
} while (false)
|
|
660
600
|
|
|
661
601
|
switch (type->primitive) {
|
|
662
602
|
case PrimitiveKind::Void: {} break;
|
|
663
603
|
case PrimitiveKind::Bool: {
|
|
664
|
-
|
|
665
|
-
if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
|
|
604
|
+
if (!value.IsBoolean()) [[unlikely]] {
|
|
666
605
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
667
606
|
return;
|
|
668
607
|
}
|
|
669
608
|
|
|
609
|
+
bool b = value.As<Napi::Boolean>();
|
|
670
610
|
out_reg->rax = (uint64_t)b;
|
|
671
611
|
} break;
|
|
672
612
|
case PrimitiveKind::Int8: { RETURN_INTEGER(int8_t); } break;
|
|
@@ -705,9 +645,24 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
705
645
|
out_reg->rax = (uint64_t)str32;
|
|
706
646
|
} break;
|
|
707
647
|
case PrimitiveKind::Pointer: {
|
|
708
|
-
|
|
709
|
-
|
|
648
|
+
uint8_t *ptr;
|
|
649
|
+
|
|
650
|
+
if (CheckValueTag(value, type->ref.marker)) {
|
|
651
|
+
ptr = value.As<Napi::External<uint8_t>>().Data();
|
|
652
|
+
} else if (IsObject(value) && (type->ref.type->primitive == PrimitiveKind::Record ||
|
|
653
|
+
type->ref.type->primitive == PrimitiveKind::Union)) {
|
|
654
|
+
Napi::Object obj = value.As<Napi::Object>();
|
|
655
|
+
|
|
656
|
+
ptr = AllocHeap(type->ref.type->size, 16);
|
|
657
|
+
|
|
658
|
+
if (!PushObject(obj, type->ref.type, ptr))
|
|
659
|
+
return;
|
|
660
|
+
} else if (IsNullOrUndefined(value)) {
|
|
661
|
+
ptr = nullptr;
|
|
662
|
+
} else {
|
|
663
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
710
664
|
return;
|
|
665
|
+
}
|
|
711
666
|
|
|
712
667
|
out_reg->rax = (uint64_t)ptr;
|
|
713
668
|
} break;
|
|
@@ -730,28 +685,42 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
730
685
|
} break;
|
|
731
686
|
case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
|
|
732
687
|
case PrimitiveKind::Float32: {
|
|
733
|
-
|
|
734
|
-
if (!TryNumber(value, &f)) [[unlikely]] {
|
|
688
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
735
689
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
736
690
|
return;
|
|
737
691
|
}
|
|
738
692
|
|
|
693
|
+
float f = GetNumber<float>(value);
|
|
694
|
+
|
|
739
695
|
memset((uint8_t *)&out_reg->xmm0 + 4, 0, 4);
|
|
740
696
|
memcpy(&out_reg->xmm0, &f, 4);
|
|
741
697
|
} break;
|
|
742
698
|
case PrimitiveKind::Float64: {
|
|
743
|
-
|
|
744
|
-
if (!TryNumber(value, &d)) [[unlikely]] {
|
|
699
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
745
700
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
746
701
|
return;
|
|
747
702
|
}
|
|
748
703
|
|
|
704
|
+
double d = GetNumber<double>(value);
|
|
749
705
|
out_reg->xmm0 = d;
|
|
750
706
|
} break;
|
|
751
707
|
case PrimitiveKind::Callback: {
|
|
752
708
|
void *ptr;
|
|
753
|
-
|
|
709
|
+
|
|
710
|
+
if (value.IsFunction()) {
|
|
711
|
+
Napi::Function func2 = value.As<Napi::Function>();
|
|
712
|
+
|
|
713
|
+
ptr = ReserveTrampoline(type->ref.proto, func2);
|
|
714
|
+
if (!ptr) [[unlikely]]
|
|
715
|
+
return;
|
|
716
|
+
} else if (CheckValueTag(value, type->ref.marker)) {
|
|
717
|
+
ptr = value.As<Napi::External<void>>().Data();
|
|
718
|
+
} else if (IsNullOrUndefined(value)) {
|
|
719
|
+
ptr = nullptr;
|
|
720
|
+
} else {
|
|
721
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
754
722
|
return;
|
|
723
|
+
}
|
|
755
724
|
|
|
756
725
|
out_reg->rax = (uint64_t)ptr;
|
|
757
726
|
} break;
|