koffi 2.16.0-beta.2 → 2.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +66 -0
- package/build/koffi/darwin_arm64/koffi.node +0 -0
- package/build/koffi/darwin_x64/koffi.node +0 -0
- package/build/koffi/freebsd_arm64/koffi.node +0 -0
- package/build/koffi/freebsd_ia32/koffi.node +0 -0
- package/build/koffi/freebsd_x64/koffi.node +0 -0
- package/build/koffi/linux_arm64/koffi.node +0 -0
- package/build/koffi/linux_armhf/koffi.node +0 -0
- package/build/koffi/linux_ia32/koffi.node +0 -0
- package/build/koffi/linux_loong64/koffi.node +0 -0
- package/build/koffi/linux_riscv64d/koffi.node +0 -0
- package/build/koffi/linux_x64/koffi.node +0 -0
- package/build/koffi/musl_arm64/koffi.node +0 -0
- package/build/koffi/musl_x64/koffi.node +0 -0
- package/build/koffi/openbsd_ia32/koffi.node +0 -0
- package/build/koffi/openbsd_x64/koffi.node +0 -0
- package/build/koffi/win32_arm64/koffi.exp +0 -0
- package/build/koffi/win32_arm64/koffi.lib +0 -0
- package/build/koffi/win32_arm64/koffi.node +0 -0
- package/build/koffi/win32_ia32/koffi.exp +0 -0
- package/build/koffi/win32_ia32/koffi.lib +0 -0
- package/build/koffi/win32_ia32/koffi.node +0 -0
- package/build/koffi/win32_x64/koffi.exp +0 -0
- package/build/koffi/win32_x64/koffi.lib +0 -0
- package/build/koffi/win32_x64/koffi.node +0 -0
- package/index.d.ts +9 -11
- package/index.js +6 -9
- package/indirect.js +6 -9
- package/lib/native/base/base.cc +1 -6
- package/package.json +3 -3
- package/src/cnoke/assets/FindCNoke.cmake +27 -16
- package/src/cnoke/assets/toolchains.json +126 -0
- package/src/cnoke/cnoke.js +27 -33
- package/src/cnoke/src/builder.js +124 -63
- package/src/cnoke/src/tools.js +1 -5
- package/src/koffi/CMakeLists.txt +32 -21
- package/src/koffi/src/{abi/arm32.cc → abi_arm32.cc} +235 -246
- package/src/koffi/src/{abi/arm32_asm.S → abi_arm32_asm.S} +19 -15
- package/src/koffi/src/{abi/arm64.cc → abi_arm64.cc} +253 -300
- package/src/koffi/src/{abi/arm64_asm.S → abi_arm64_asm.S} +16 -10
- package/src/koffi/src/{abi/arm64_asm.asm → abi_arm64_asm.asm} +17 -10
- package/src/koffi/src/{abi/loong64_asm.S → abi_loong64_asm.S} +16 -10
- package/src/koffi/src/{abi/riscv64.cc → abi_riscv64.cc} +233 -244
- package/src/koffi/src/{abi/riscv64_asm.S → abi_riscv64_asm.S} +16 -10
- package/src/koffi/src/{abi/x64_sysv.cc → abi_x64_sysv.cc} +208 -220
- package/src/koffi/src/{abi/x64_sysv_asm.S → abi_x64_sysv_asm.S} +17 -10
- package/src/koffi/src/{abi/x64_win.cc → abi_x64_win.cc} +175 -230
- package/src/koffi/src/{abi/x64_win_asm.S → abi_x64_win_asm.S} +49 -27
- package/src/koffi/src/{abi/x64_win_asm.asm → abi_x64_win_asm.asm} +54 -27
- package/src/koffi/src/{abi/x86.cc → abi_x86.cc} +187 -252
- package/src/koffi/src/{abi/x86_asm.S → abi_x86_asm.S} +38 -21
- package/src/koffi/src/{abi/x86_asm.asm → abi_x86_asm.asm} +33 -16
- package/src/koffi/src/call.cc +475 -290
- package/src/koffi/src/call.hh +15 -18
- package/src/koffi/src/ffi.cc +195 -184
- package/src/koffi/src/ffi.hh +60 -16
- package/src/koffi/src/init.js +1 -0
- package/src/koffi/src/util.cc +113 -159
- package/src/koffi/src/util.hh +23 -74
- package/src/koffi/src/win32.cc +13 -0
- package/src/koffi/src/win32.hh +7 -0
- package/src/koffi/tools/write_trampolines.js +77 -0
- package/doc/README.md +0 -27
- package/doc/assets.ini +0 -24
- package/doc/build.sh +0 -9
- package/doc/develop.sh +0 -15
- package/doc/pages/404.md +0 -17
- package/doc/pages.ini +0 -86
- package/doc/static/highlight.js +0 -8
- package/doc/static/koffi.css +0 -11
- package/doc/static/koffi.png +0 -0
- package/doc/static/logo.webp +0 -0
- package/doc/static/perf_linux.png +0 -0
- package/doc/static/perf_windows.png +0 -0
- package/doc/static/print.css +0 -10
- package/doc/templates/code.html +0 -48
- package/doc/templates/page.html +0 -47
- package/src/koffi/cmake/raylib.cmake +0 -85
- package/src/koffi/cmake/sqlite3.cmake +0 -9
- package/src/koffi/examples/electron-builder/README.md +0 -11
- package/src/koffi/examples/electron-builder/package.json +0 -21
- package/src/koffi/examples/electron-builder/src/app.js +0 -20
- package/src/koffi/examples/electron-builder/src/index.html +0 -143
- package/src/koffi/examples/electron-builder/src/preload.js +0 -5
- package/src/koffi/examples/electron-forge/README.md +0 -25
- package/src/koffi/examples/electron-forge/forge.config.js +0 -63
- package/src/koffi/examples/electron-forge/package.json +0 -39
- package/src/koffi/examples/electron-forge/src/index.css +0 -7
- package/src/koffi/examples/electron-forge/src/index.html +0 -143
- package/src/koffi/examples/electron-forge/src/main.js +0 -52
- package/src/koffi/examples/electron-forge/src/preload.js +0 -5
- package/src/koffi/examples/electron-forge/src/renderer.js +0 -31
- package/src/koffi/examples/electron-forge/webpack.main.config.js +0 -11
- package/src/koffi/examples/electron-forge/webpack.renderer.config.js +0 -13
- package/src/koffi/examples/electron-forge/webpack.rules.js +0 -35
- package/src/koffi/examples/node-esbuild/README.md +0 -19
- package/src/koffi/examples/node-esbuild/index.js +0 -2
- package/src/koffi/examples/node-esbuild/package.json +0 -16
- package/src/koffi/examples/nwjs/README.md +0 -20
- package/src/koffi/examples/nwjs/package.json +0 -11
- package/src/koffi/examples/nwjs/src/index.html +0 -145
- package/src/koffi/examples/nwjs/src/package.json +0 -10
- package/src/koffi/examples/yao-pkg/README.md +0 -17
- package/src/koffi/examples/yao-pkg/index.js +0 -2
- package/src/koffi/examples/yao-pkg/package.json +0 -22
- package/src/koffi/src/primitives.inc +0 -39
- package/src/koffi/src/trampolines/armasm.inc +0 -32771
- package/src/koffi/src/trampolines/gnu.inc +0 -24577
- package/src/koffi/src/trampolines/masm32.inc +0 -32769
- package/src/koffi/src/trampolines/masm64.inc +0 -32769
- package/src/koffi/src/trampolines/prototypes.inc +0 -16388
- package/vendor/node-addon-api/CHANGELOG.md +0 -1272
- package/vendor/node-addon-api/CODE_OF_CONDUCT.md +0 -4
- package/vendor/node-addon-api/CONTRIBUTING.md +0 -203
- package/vendor/node-addon-api/appveyor.yml +0 -37
- package/vendor/node-addon-api/benchmark/README.md +0 -47
- package/vendor/node-addon-api/benchmark/binding.gyp +0 -25
- package/vendor/node-addon-api/benchmark/function_args.cc +0 -250
- package/vendor/node-addon-api/benchmark/function_args.js +0 -60
- package/vendor/node-addon-api/benchmark/index.js +0 -34
- package/vendor/node-addon-api/benchmark/property_descriptor.cc +0 -84
- package/vendor/node-addon-api/benchmark/property_descriptor.js +0 -38
- package/vendor/node-addon-api/common.gypi +0 -21
- package/vendor/node-addon-api/doc/README.md +0 -145
- package/vendor/node-addon-api/doc/addon.md +0 -163
- package/vendor/node-addon-api/doc/array.md +0 -81
- package/vendor/node-addon-api/doc/array_buffer.md +0 -165
- package/vendor/node-addon-api/doc/async_context.md +0 -86
- package/vendor/node-addon-api/doc/async_operations.md +0 -31
- package/vendor/node-addon-api/doc/async_worker.md +0 -428
- package/vendor/node-addon-api/doc/async_worker_variants.md +0 -578
- package/vendor/node-addon-api/doc/basic_env.md +0 -200
- package/vendor/node-addon-api/doc/bigint.md +0 -97
- package/vendor/node-addon-api/doc/boolean.md +0 -68
- package/vendor/node-addon-api/doc/buffer.md +0 -245
- package/vendor/node-addon-api/doc/callback_scope.md +0 -54
- package/vendor/node-addon-api/doc/callbackinfo.md +0 -97
- package/vendor/node-addon-api/doc/checker-tool.md +0 -32
- package/vendor/node-addon-api/doc/class_property_descriptor.md +0 -123
- package/vendor/node-addon-api/doc/cmake-js.md +0 -87
- package/vendor/node-addon-api/doc/contributing/creating_a_release.md +0 -95
- package/vendor/node-addon-api/doc/conversion-tool.md +0 -28
- package/vendor/node-addon-api/doc/dataview.md +0 -248
- package/vendor/node-addon-api/doc/date.md +0 -68
- package/vendor/node-addon-api/doc/env.md +0 -87
- package/vendor/node-addon-api/doc/error.md +0 -120
- package/vendor/node-addon-api/doc/error_handling.md +0 -266
- package/vendor/node-addon-api/doc/escapable_handle_scope.md +0 -80
- package/vendor/node-addon-api/doc/external.md +0 -79
- package/vendor/node-addon-api/doc/external_buffer.md +0 -18
- package/vendor/node-addon-api/doc/finalization.md +0 -153
- package/vendor/node-addon-api/doc/function.md +0 -402
- package/vendor/node-addon-api/doc/function_reference.md +0 -238
- package/vendor/node-addon-api/doc/generator.md +0 -13
- package/vendor/node-addon-api/doc/handle_scope.md +0 -77
- package/vendor/node-addon-api/doc/hierarchy.md +0 -95
- package/vendor/node-addon-api/doc/instance_wrap.md +0 -408
- package/vendor/node-addon-api/doc/maybe.md +0 -76
- package/vendor/node-addon-api/doc/memory_management.md +0 -27
- package/vendor/node-addon-api/doc/name.md +0 -29
- package/vendor/node-addon-api/doc/node-gyp.md +0 -82
- package/vendor/node-addon-api/doc/number.md +0 -163
- package/vendor/node-addon-api/doc/object.md +0 -411
- package/vendor/node-addon-api/doc/object_lifetime_management.md +0 -83
- package/vendor/node-addon-api/doc/object_reference.md +0 -117
- package/vendor/node-addon-api/doc/object_wrap.md +0 -604
- package/vendor/node-addon-api/doc/prebuild_tools.md +0 -16
- package/vendor/node-addon-api/doc/promises.md +0 -130
- package/vendor/node-addon-api/doc/property_descriptor.md +0 -286
- package/vendor/node-addon-api/doc/propertylvalue.md +0 -50
- package/vendor/node-addon-api/doc/range_error.md +0 -59
- package/vendor/node-addon-api/doc/reference.md +0 -113
- package/vendor/node-addon-api/doc/setup.md +0 -115
- package/vendor/node-addon-api/doc/string.md +0 -93
- package/vendor/node-addon-api/doc/symbol.md +0 -61
- package/vendor/node-addon-api/doc/syntax_error.md +0 -66
- package/vendor/node-addon-api/doc/threadsafe.md +0 -121
- package/vendor/node-addon-api/doc/threadsafe_function.md +0 -290
- package/vendor/node-addon-api/doc/type_error.md +0 -59
- package/vendor/node-addon-api/doc/type_taggable.md +0 -40
- package/vendor/node-addon-api/doc/typed_array.md +0 -78
- package/vendor/node-addon-api/doc/typed_array_of.md +0 -137
- package/vendor/node-addon-api/doc/typed_threadsafe_function.md +0 -306
- package/vendor/node-addon-api/doc/value.md +0 -368
- package/vendor/node-addon-api/doc/version_management.md +0 -43
- package/vendor/node-addon-api/eslint.config.js +0 -5
- package/vendor/node-addon-api/except.gypi +0 -25
- package/vendor/node-addon-api/index.js +0 -14
- package/vendor/node-addon-api/node_addon_api.gyp +0 -42
- package/vendor/node-addon-api/node_api.gyp +0 -9
- package/vendor/node-addon-api/noexcept.gypi +0 -26
- package/vendor/node-addon-api/nothing.c +0 -0
- package/vendor/node-addon-api/package-support.json +0 -21
- package/vendor/node-addon-api/package.json +0 -480
- package/vendor/node-addon-api/release-please-config.json +0 -15
- package/vendor/node-addon-api/test/README.md +0 -91
- package/vendor/node-addon-api/test/addon.cc +0 -44
- package/vendor/node-addon-api/test/addon.js +0 -7
- package/vendor/node-addon-api/test/addon_build/index.js +0 -49
- package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +0 -18
- package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +0 -63
- package/vendor/node-addon-api/test/addon_build/tpl/index.js +0 -9
- package/vendor/node-addon-api/test/addon_build/tpl/package.json +0 -11
- package/vendor/node-addon-api/test/addon_data.cc +0 -98
- package/vendor/node-addon-api/test/addon_data.js +0 -24
- package/vendor/node-addon-api/test/array_buffer.cc +0 -243
- package/vendor/node-addon-api/test/array_buffer.js +0 -70
- package/vendor/node-addon-api/test/async_context.cc +0 -36
- package/vendor/node-addon-api/test/async_context.js +0 -122
- package/vendor/node-addon-api/test/async_progress_queue_worker.cc +0 -248
- package/vendor/node-addon-api/test/async_progress_queue_worker.js +0 -180
- package/vendor/node-addon-api/test/async_progress_worker.cc +0 -357
- package/vendor/node-addon-api/test/async_progress_worker.js +0 -200
- package/vendor/node-addon-api/test/async_worker.cc +0 -341
- package/vendor/node-addon-api/test/async_worker.js +0 -264
- package/vendor/node-addon-api/test/async_worker_nocallback.js +0 -19
- package/vendor/node-addon-api/test/async_worker_persistent.cc +0 -63
- package/vendor/node-addon-api/test/async_worker_persistent.js +0 -24
- package/vendor/node-addon-api/test/basic_types/array.cc +0 -40
- package/vendor/node-addon-api/test/basic_types/array.js +0 -34
- package/vendor/node-addon-api/test/basic_types/boolean.cc +0 -40
- package/vendor/node-addon-api/test/basic_types/boolean.js +0 -34
- package/vendor/node-addon-api/test/basic_types/number.cc +0 -105
- package/vendor/node-addon-api/test/basic_types/number.js +0 -115
- package/vendor/node-addon-api/test/basic_types/value.cc +0 -177
- package/vendor/node-addon-api/test/basic_types/value.js +0 -173
- package/vendor/node-addon-api/test/bigint.cc +0 -91
- package/vendor/node-addon-api/test/bigint.js +0 -53
- package/vendor/node-addon-api/test/binding-swallowexcept.cc +0 -12
- package/vendor/node-addon-api/test/binding.cc +0 -200
- package/vendor/node-addon-api/test/binding.gyp +0 -160
- package/vendor/node-addon-api/test/buffer.cc +0 -185
- package/vendor/node-addon-api/test/buffer.h +0 -26
- package/vendor/node-addon-api/test/buffer.js +0 -150
- package/vendor/node-addon-api/test/buffer_new_or_copy-inl.h +0 -68
- package/vendor/node-addon-api/test/buffer_no_external.cc +0 -24
- package/vendor/node-addon-api/test/callbackInfo.cc +0 -27
- package/vendor/node-addon-api/test/callbackInfo.js +0 -9
- package/vendor/node-addon-api/test/callbackscope.cc +0 -39
- package/vendor/node-addon-api/test/callbackscope.js +0 -49
- package/vendor/node-addon-api/test/child_processes/addon.js +0 -11
- package/vendor/node-addon-api/test/child_processes/addon_data.js +0 -24
- package/vendor/node-addon-api/test/child_processes/objectwrap_function.js +0 -22
- package/vendor/node-addon-api/test/child_processes/threadsafe_function_exception.js +0 -33
- package/vendor/node-addon-api/test/child_processes/typed_threadsafe_function_exception.js +0 -19
- package/vendor/node-addon-api/test/common/index.js +0 -246
- package/vendor/node-addon-api/test/common/test_helper.h +0 -71
- package/vendor/node-addon-api/test/dataview/dataview.cc +0 -48
- package/vendor/node-addon-api/test/dataview/dataview.js +0 -35
- package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +0 -115
- package/vendor/node-addon-api/test/dataview/dataview_read_write.js +0 -92
- package/vendor/node-addon-api/test/date.cc +0 -45
- package/vendor/node-addon-api/test/date.js +0 -18
- package/vendor/node-addon-api/test/env_cleanup.cc +0 -100
- package/vendor/node-addon-api/test/env_cleanup.js +0 -55
- package/vendor/node-addon-api/test/env_misc.cc +0 -25
- package/vendor/node-addon-api/test/env_misc.js +0 -12
- package/vendor/node-addon-api/test/error.cc +0 -436
- package/vendor/node-addon-api/test/error.js +0 -111
- package/vendor/node-addon-api/test/error_handling_for_primitives.cc +0 -13
- package/vendor/node-addon-api/test/error_handling_for_primitives.js +0 -29
- package/vendor/node-addon-api/test/error_terminating_environment.js +0 -99
- package/vendor/node-addon-api/test/except_all.cc +0 -22
- package/vendor/node-addon-api/test/except_all.js +0 -14
- package/vendor/node-addon-api/test/exports.js +0 -19
- package/vendor/node-addon-api/test/external.cc +0 -85
- package/vendor/node-addon-api/test/external.js +0 -85
- package/vendor/node-addon-api/test/finalizer_order.cc +0 -152
- package/vendor/node-addon-api/test/finalizer_order.js +0 -98
- package/vendor/node-addon-api/test/function.cc +0 -338
- package/vendor/node-addon-api/test/function.js +0 -137
- package/vendor/node-addon-api/test/function_reference.cc +0 -204
- package/vendor/node-addon-api/test/function_reference.js +0 -157
- package/vendor/node-addon-api/test/globalObject/global_object.cc +0 -61
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +0 -31
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +0 -58
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +0 -40
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +0 -56
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +0 -28
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +0 -46
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +0 -31
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +0 -56
- package/vendor/node-addon-api/test/handlescope.cc +0 -86
- package/vendor/node-addon-api/test/handlescope.js +0 -16
- package/vendor/node-addon-api/test/index.js +0 -160
- package/vendor/node-addon-api/test/maybe/check.cc +0 -69
- package/vendor/node-addon-api/test/maybe/index.js +0 -50
- package/vendor/node-addon-api/test/memory_management.cc +0 -18
- package/vendor/node-addon-api/test/memory_management.js +0 -9
- package/vendor/node-addon-api/test/movable_callbacks.cc +0 -23
- package/vendor/node-addon-api/test/movable_callbacks.js +0 -21
- package/vendor/node-addon-api/test/name.cc +0 -110
- package/vendor/node-addon-api/test/name.js +0 -59
- package/vendor/node-addon-api/test/napi_child.js +0 -14
- package/vendor/node-addon-api/test/object/delete_property.cc +0 -38
- package/vendor/node-addon-api/test/object/delete_property.js +0 -41
- package/vendor/node-addon-api/test/object/finalizer.cc +0 -30
- package/vendor/node-addon-api/test/object/finalizer.js +0 -28
- package/vendor/node-addon-api/test/object/get_property.cc +0 -34
- package/vendor/node-addon-api/test/object/get_property.js +0 -40
- package/vendor/node-addon-api/test/object/has_own_property.cc +0 -34
- package/vendor/node-addon-api/test/object/has_own_property.js +0 -34
- package/vendor/node-addon-api/test/object/has_property.cc +0 -38
- package/vendor/node-addon-api/test/object/has_property.js +0 -37
- package/vendor/node-addon-api/test/object/object.cc +0 -430
- package/vendor/node-addon-api/test/object/object.js +0 -218
- package/vendor/node-addon-api/test/object/object_deprecated.cc +0 -70
- package/vendor/node-addon-api/test/object/object_deprecated.js +0 -42
- package/vendor/node-addon-api/test/object/object_freeze_seal.cc +0 -25
- package/vendor/node-addon-api/test/object/object_freeze_seal.js +0 -61
- package/vendor/node-addon-api/test/object/set_property.cc +0 -45
- package/vendor/node-addon-api/test/object/set_property.js +0 -30
- package/vendor/node-addon-api/test/object/subscript_operator.cc +0 -58
- package/vendor/node-addon-api/test/object/subscript_operator.js +0 -17
- package/vendor/node-addon-api/test/object_reference.cc +0 -417
- package/vendor/node-addon-api/test/object_reference.js +0 -262
- package/vendor/node-addon-api/test/objectwrap.cc +0 -295
- package/vendor/node-addon-api/test/objectwrap.js +0 -309
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +0 -26
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +0 -18
- package/vendor/node-addon-api/test/objectwrap_function.cc +0 -43
- package/vendor/node-addon-api/test/objectwrap_function.js +0 -6
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +0 -30
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +0 -13
- package/vendor/node-addon-api/test/objectwrap_removewrap.cc +0 -45
- package/vendor/node-addon-api/test/objectwrap_removewrap.js +0 -32
- package/vendor/node-addon-api/test/objectwrap_worker_thread.js +0 -20
- package/vendor/node-addon-api/test/promise.cc +0 -111
- package/vendor/node-addon-api/test/promise.js +0 -43
- package/vendor/node-addon-api/test/reference.cc +0 -78
- package/vendor/node-addon-api/test/reference.js +0 -20
- package/vendor/node-addon-api/test/require_basic_finalizers/index.js +0 -38
- package/vendor/node-addon-api/test/require_basic_finalizers/tpl/addon.cc +0 -12
- package/vendor/node-addon-api/test/require_basic_finalizers/tpl/binding.gyp +0 -48
- package/vendor/node-addon-api/test/require_basic_finalizers/tpl/index.js +0 -3
- package/vendor/node-addon-api/test/require_basic_finalizers/tpl/package.json +0 -11
- package/vendor/node-addon-api/test/run_script.cc +0 -56
- package/vendor/node-addon-api/test/run_script.js +0 -45
- package/vendor/node-addon-api/test/symbol.cc +0 -79
- package/vendor/node-addon-api/test/symbol.js +0 -66
- package/vendor/node-addon-api/test/testUtil.js +0 -54
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +0 -230
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +0 -225
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +0 -155
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +0 -13
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_exception.cc +0 -50
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_exception.js +0 -20
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +0 -125
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +0 -14
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +0 -27
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +0 -7
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +0 -240
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +0 -59
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +0 -55
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +0 -98
- package/vendor/node-addon-api/test/thunking_manual.cc +0 -127
- package/vendor/node-addon-api/test/thunking_manual.js +0 -16
- package/vendor/node-addon-api/test/type_taggable.cc +0 -66
- package/vendor/node-addon-api/test/type_taggable.js +0 -59
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +0 -215
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +0 -188
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +0 -120
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +0 -14
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_exception.cc +0 -39
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_exception.js +0 -13
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +0 -127
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +0 -14
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +0 -32
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +0 -8
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +0 -237
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +0 -59
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +0 -67
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +0 -98
- package/vendor/node-addon-api/test/typedarray-bigint.js +0 -58
- package/vendor/node-addon-api/test/typedarray.cc +0 -413
- package/vendor/node-addon-api/test/typedarray.js +0 -103
- package/vendor/node-addon-api/test/value_type_cast.cc +0 -60
- package/vendor/node-addon-api/test/value_type_cast.js +0 -106
- package/vendor/node-addon-api/test/version_management.cc +0 -28
- package/vendor/node-addon-api/test/version_management.js +0 -29
- package/vendor/node-addon-api/tools/README.md +0 -73
- package/vendor/node-addon-api/tools/check-napi.js +0 -99
- package/vendor/node-addon-api/tools/clang-format.js +0 -71
- package/vendor/node-addon-api/tools/conversion.js +0 -301
- package/vendor/node-addon-api/unit-test/README.md +0 -28
- package/vendor/node-addon-api/unit-test/binding-file-template.js +0 -39
- package/vendor/node-addon-api/unit-test/binding.gyp +0 -72
- package/vendor/node-addon-api/unit-test/exceptions.js +0 -32
- package/vendor/node-addon-api/unit-test/generate-binding-cc.js +0 -61
- package/vendor/node-addon-api/unit-test/injectTestParams.js +0 -101
- package/vendor/node-addon-api/unit-test/listOfTestModules.js +0 -88
- package/vendor/node-addon-api/unit-test/matchModules.js +0 -65
- package/vendor/node-addon-api/unit-test/setup.js +0 -13
- package/vendor/node-addon-api/unit-test/spawnTask.js +0 -26
- package/vendor/node-addon-api/unit-test/test.js +0 -30
- package/vendor/node-api-headers/CHANGELOG.md +0 -130
- package/vendor/node-api-headers/CODE_OF_CONDUCT.md +0 -4
- package/vendor/node-api-headers/CONTRIBUTING.md +0 -32
- package/vendor/node-api-headers/CREATING_A_RELEASE.md +0 -68
- package/vendor/node-api-headers/index.js +0 -17
- package/vendor/node-api-headers/lib/clang-utils.js +0 -50
- package/vendor/node-api-headers/lib/parse-utils.js +0 -92
- package/vendor/node-api-headers/package.json +0 -59
- package/vendor/node-api-headers/release-please-config.json +0 -12
- package/vendor/node-api-headers/scripts/update-headers.js +0 -246
- package/vendor/node-api-headers/scripts/write-symbols.js +0 -154
- package/vendor/node-api-headers/scripts/write-win32-def.js +0 -52
- package/vendor/node-api-headers/symbols.js +0 -257
- package/vendor/node-api-headers/test/parse-utils.js +0 -21
- /package/doc/{pages/benchmarks.md → benchmarks.md} +0 -0
- /package/doc/{pages/callbacks.md → callbacks.md} +0 -0
- /package/doc/{pages/contribute.md → contribute.md} +0 -0
- /package/doc/{pages/functions.md → functions.md} +0 -0
- /package/doc/{pages/index.md → index.md} +0 -0
- /package/doc/{pages/input.md → input.md} +0 -0
- /package/doc/{pages/migration.md → migration.md} +0 -0
- /package/doc/{pages/misc.md → misc.md} +0 -0
- /package/doc/{pages/output.md → output.md} +0 -0
- /package/doc/{pages/packaging.md → packaging.md} +0 -0
- /package/doc/{pages/platforms.md → platforms.md} +0 -0
- /package/doc/{pages/pointers.md → pointers.md} +0 -0
- /package/doc/{pages/start.md → start.md} +0 -0
- /package/doc/{pages/unions.md → unions.md} +0 -0
- /package/doc/{pages/variables.md → variables.md} +0 -0
- /package/src/koffi/src/{abi/loong64.cc → abi_loong64.cc} +0 -0
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
#if defined(__i386__) || defined(_M_IX86)
|
|
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
|
#if defined(_WIN32)
|
|
11
|
-
#include "
|
|
11
|
+
#include "win32.hh"
|
|
12
12
|
#endif
|
|
13
13
|
|
|
14
14
|
#include <napi.h>
|
|
@@ -33,10 +33,6 @@ extern "C" uint64_t ForwardCallRG(const void *func, uint8_t *sp, uint8_t **out_o
|
|
|
33
33
|
extern "C" float ForwardCallRF(const void *func, uint8_t *sp, uint8_t **out_old_sp);
|
|
34
34
|
extern "C" double ForwardCallRD(const void *func, uint8_t *sp, uint8_t **out_old_sp);
|
|
35
35
|
|
|
36
|
-
extern "C" napi_value CallSwitchStack(Napi::Function *func, size_t argc, napi_value *argv,
|
|
37
|
-
uint8_t *old_sp, Span<uint8_t> *new_stack,
|
|
38
|
-
napi_value (*call)(Napi::Function *func, size_t argc, napi_value *argv));
|
|
39
|
-
|
|
40
36
|
bool AnalyseFunction(Napi::Env env, InstanceData *instance, FunctionInfo *func)
|
|
41
37
|
{
|
|
42
38
|
if (!func->lib && func->convention != CallConvention::Cdecl &&
|
|
@@ -111,10 +107,11 @@ bool AnalyseFunction(Napi::Env env, InstanceData *instance, FunctionInfo *func)
|
|
|
111
107
|
|
|
112
108
|
bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
|
|
113
109
|
{
|
|
114
|
-
uint32_t *args_ptr =
|
|
110
|
+
uint32_t *args_ptr = nullptr;
|
|
115
111
|
uint32_t *fast_ptr = nullptr;
|
|
116
112
|
|
|
117
|
-
|
|
113
|
+
// Pass return value in register or through memory
|
|
114
|
+
if (!AllocStack(func->args_size, 16, &args_ptr)) [[unlikely]]
|
|
118
115
|
return false;
|
|
119
116
|
if (func->fast) {
|
|
120
117
|
fast_ptr = args_ptr;
|
|
@@ -125,224 +122,162 @@ bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
|
|
|
125
122
|
*((func->ret.fast ? fast_ptr : args_ptr)++) = (uint32_t)return_ptr;
|
|
126
123
|
}
|
|
127
124
|
|
|
128
|
-
Size i = -1;
|
|
129
|
-
|
|
130
|
-
#if defined(__GNUC__) || defined(__clang__)
|
|
131
|
-
static const void *const DispatchTable[] = {
|
|
132
|
-
#define PRIMITIVE(Name) && Name,
|
|
133
|
-
#include "../primitives.inc"
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
#define LOOP
|
|
137
|
-
#define CASE(Primitive) \
|
|
138
|
-
do { \
|
|
139
|
-
PrimitiveKind next = func->primitives[++i]; \
|
|
140
|
-
goto *DispatchTable[(int)next]; \
|
|
141
|
-
} while (false); \
|
|
142
|
-
Primitive:
|
|
143
|
-
#define OR(Primitive) \
|
|
144
|
-
Primitive:
|
|
145
|
-
#else
|
|
146
|
-
#define LOOP \
|
|
147
|
-
while (++i < func->parameters.len) \
|
|
148
|
-
switch (func->primitives[i])
|
|
149
|
-
#define CASE(Primitive) \
|
|
150
|
-
break; \
|
|
151
|
-
case PrimitiveKind::Primitive:
|
|
152
|
-
#define OR(Primitive) \
|
|
153
|
-
case PrimitiveKind::Primitive:
|
|
154
|
-
#endif
|
|
155
|
-
|
|
156
125
|
#define PUSH_INTEGER_32(CType) \
|
|
157
126
|
do { \
|
|
158
|
-
|
|
159
|
-
Napi::Value value = info[param.offset]; \
|
|
160
|
-
\
|
|
161
|
-
CType v; \
|
|
162
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
127
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
163
128
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
164
129
|
return false; \
|
|
165
130
|
} \
|
|
166
131
|
\
|
|
132
|
+
CType v = GetNumber<CType>(value); \
|
|
167
133
|
*((param.fast ? fast_ptr : args_ptr)++) = (uint32_t)v; \
|
|
168
134
|
} while (false)
|
|
169
135
|
#define PUSH_INTEGER_32_SWAP(CType) \
|
|
170
136
|
do { \
|
|
171
|
-
|
|
172
|
-
Napi::Value value = info[param.offset]; \
|
|
173
|
-
\
|
|
174
|
-
CType v; \
|
|
175
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
137
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
176
138
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
177
139
|
return false; \
|
|
178
140
|
} \
|
|
179
141
|
\
|
|
142
|
+
CType v = GetNumber<CType>(value); \
|
|
180
143
|
*((param.fast ? fast_ptr : args_ptr)++) = (uint32_t)ReverseBytes(v); \
|
|
181
144
|
} while (false)
|
|
182
145
|
#define PUSH_INTEGER_64(CType) \
|
|
183
146
|
do { \
|
|
184
|
-
|
|
185
|
-
Napi::Value value = info[param.offset]; \
|
|
186
|
-
\
|
|
187
|
-
CType v; \
|
|
188
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
147
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
189
148
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
190
149
|
return false; \
|
|
191
150
|
} \
|
|
192
151
|
\
|
|
152
|
+
CType v = GetNumber<CType>(value); \
|
|
153
|
+
\
|
|
193
154
|
*(uint64_t *)args_ptr = (uint64_t)v; \
|
|
194
155
|
args_ptr += 2; \
|
|
195
156
|
} while (false)
|
|
196
157
|
#define PUSH_INTEGER_64_SWAP(CType) \
|
|
197
158
|
do { \
|
|
198
|
-
|
|
199
|
-
Napi::Value value = info[param.offset]; \
|
|
200
|
-
\
|
|
201
|
-
CType v; \
|
|
202
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
159
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
203
160
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
204
161
|
return false; \
|
|
205
162
|
} \
|
|
206
163
|
\
|
|
164
|
+
CType v = GetNumber<CType>(value); \
|
|
165
|
+
\
|
|
207
166
|
*(uint64_t *)args_ptr = (uint64_t)ReverseBytes(v); \
|
|
208
167
|
args_ptr += 2; \
|
|
209
168
|
} while (false)
|
|
210
169
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
216
|
-
Napi::Value value = info[param.offset];
|
|
217
|
-
|
|
218
|
-
bool b;
|
|
219
|
-
if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
|
|
220
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
221
|
-
return false;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
*(bool *)((param.fast ? fast_ptr : args_ptr)++) = b;
|
|
225
|
-
};
|
|
226
|
-
|
|
227
|
-
CASE(Int8) { PUSH_INTEGER_32(int8_t); };
|
|
228
|
-
CASE(UInt8) { PUSH_INTEGER_32(uint8_t); };
|
|
229
|
-
CASE(Int16) { PUSH_INTEGER_32(int16_t); };
|
|
230
|
-
CASE(Int16S) { PUSH_INTEGER_32_SWAP(int16_t); };
|
|
231
|
-
CASE(UInt16) { PUSH_INTEGER_32(uint16_t); };
|
|
232
|
-
CASE(UInt16S) { PUSH_INTEGER_32_SWAP(uint16_t); };
|
|
233
|
-
CASE(Int32) { PUSH_INTEGER_32(int32_t); };
|
|
234
|
-
CASE(Int32S) { PUSH_INTEGER_32_SWAP(int32_t); };
|
|
235
|
-
CASE(UInt32) { PUSH_INTEGER_32(uint32_t); };
|
|
236
|
-
CASE(UInt32S) { PUSH_INTEGER_32_SWAP(uint32_t); };
|
|
237
|
-
CASE(Int64) { PUSH_INTEGER_64(int64_t); };
|
|
238
|
-
CASE(Int64S) { PUSH_INTEGER_64_SWAP(int64_t); };
|
|
239
|
-
CASE(UInt64) { PUSH_INTEGER_64(uint64_t); };
|
|
240
|
-
CASE(UInt64S) { PUSH_INTEGER_64_SWAP(uint64_t); };
|
|
241
|
-
|
|
242
|
-
CASE(String) {
|
|
243
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
244
|
-
Napi::Value value = info[param.offset];
|
|
245
|
-
|
|
246
|
-
const char *str;
|
|
247
|
-
if (!PushString(value, param.directions, &str)) [[unlikely]]
|
|
248
|
-
return false;
|
|
249
|
-
|
|
250
|
-
*(const char **)((param.fast ? fast_ptr : args_ptr)++) = str;
|
|
251
|
-
};
|
|
252
|
-
CASE(String16) {
|
|
253
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
254
|
-
Napi::Value value = info[param.offset];
|
|
255
|
-
|
|
256
|
-
const char16_t *str16;
|
|
257
|
-
if (!PushString16(value, param.directions, &str16)) [[unlikely]]
|
|
258
|
-
return false;
|
|
259
|
-
|
|
260
|
-
*(const char16_t **)((param.fast ? fast_ptr : args_ptr)++) = str16;
|
|
261
|
-
};
|
|
262
|
-
CASE(String32) {
|
|
263
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
264
|
-
Napi::Value value = info[param.offset];
|
|
265
|
-
|
|
266
|
-
const char32_t *str32;
|
|
267
|
-
if (!PushString32(value, param.directions, &str32)) [[unlikely]]
|
|
268
|
-
return false;
|
|
269
|
-
|
|
270
|
-
*(const char32_t **)((param.fast ? fast_ptr : args_ptr)++) = str32;
|
|
271
|
-
};
|
|
272
|
-
|
|
273
|
-
CASE(Pointer) {
|
|
274
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
275
|
-
Napi::Value value = info[param.offset];
|
|
276
|
-
|
|
277
|
-
void *ptr;
|
|
278
|
-
if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
|
|
279
|
-
return false;
|
|
280
|
-
|
|
281
|
-
*(void **)((param.fast ? fast_ptr : args_ptr)++) = ptr;
|
|
282
|
-
};
|
|
283
|
-
|
|
284
|
-
CASE(Record) OR(Union) {
|
|
285
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
286
|
-
Napi::Value value = info[param.offset];
|
|
170
|
+
// Push arguments
|
|
171
|
+
for (Size i = 0; i < func->parameters.len; i++) {
|
|
172
|
+
const ParameterInfo ¶m = func->parameters[i];
|
|
173
|
+
K_ASSERT(param.directions >= 1 && param.directions <= 3);
|
|
287
174
|
|
|
288
|
-
|
|
289
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected object", GetValueType(instance, value));
|
|
290
|
-
return false;
|
|
291
|
-
}
|
|
175
|
+
Napi::Value value = info[param.offset];
|
|
292
176
|
|
|
293
|
-
|
|
177
|
+
switch (param.type->primitive) {
|
|
178
|
+
case PrimitiveKind::Void: { K_UNREACHABLE(); } break;
|
|
294
179
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
180
|
+
case PrimitiveKind::Bool: {
|
|
181
|
+
if (!value.IsBoolean()) [[unlikely]] {
|
|
182
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
298
183
|
return false;
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
bool b = value.As<Napi::Boolean>();
|
|
187
|
+
*(bool *)((param.fast ? fast_ptr : args_ptr)++) = b;
|
|
188
|
+
} break;
|
|
189
|
+
case PrimitiveKind::Int8: { PUSH_INTEGER_32(int8_t); } break;
|
|
190
|
+
case PrimitiveKind::UInt8: { PUSH_INTEGER_32(uint8_t); } break;
|
|
191
|
+
case PrimitiveKind::Int16: { PUSH_INTEGER_32(int16_t); } break;
|
|
192
|
+
case PrimitiveKind::Int16S: { PUSH_INTEGER_32_SWAP(int16_t); } break;
|
|
193
|
+
case PrimitiveKind::UInt16: { PUSH_INTEGER_32(uint16_t); } break;
|
|
194
|
+
case PrimitiveKind::UInt16S: { PUSH_INTEGER_32_SWAP(uint16_t); } break;
|
|
195
|
+
case PrimitiveKind::Int32: { PUSH_INTEGER_32(int32_t); } break;
|
|
196
|
+
case PrimitiveKind::Int32S: { PUSH_INTEGER_32_SWAP(int32_t); } break;
|
|
197
|
+
case PrimitiveKind::UInt32: { PUSH_INTEGER_32(uint32_t); } break;
|
|
198
|
+
case PrimitiveKind::UInt32S: { PUSH_INTEGER_32_SWAP(uint32_t); } break;
|
|
199
|
+
case PrimitiveKind::Int64: { PUSH_INTEGER_64(int64_t); } break;
|
|
200
|
+
case PrimitiveKind::Int64S: { PUSH_INTEGER_64_SWAP(int64_t); } break;
|
|
201
|
+
case PrimitiveKind::UInt64: { PUSH_INTEGER_64(uint64_t); } break;
|
|
202
|
+
case PrimitiveKind::UInt64S: { PUSH_INTEGER_64_SWAP(uint64_t); } break;
|
|
203
|
+
case PrimitiveKind::String: {
|
|
204
|
+
const char *str;
|
|
205
|
+
if (!PushString(value, param.directions, &str)) [[unlikely]]
|
|
302
206
|
return false;
|
|
303
|
-
args_ptr = (uint32_t *)AlignUp(ptr + param.type->size, 4);
|
|
304
|
-
}
|
|
305
|
-
};
|
|
306
|
-
CASE(Array) { K_UNREACHABLE(); };
|
|
307
207
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
208
|
+
*(const char **)((param.fast ? fast_ptr : args_ptr)++) = str;
|
|
209
|
+
} break;
|
|
210
|
+
case PrimitiveKind::String16: {
|
|
211
|
+
const char16_t *str16;
|
|
212
|
+
if (!PushString16(value, param.directions, &str16)) [[unlikely]]
|
|
213
|
+
return false;
|
|
311
214
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
215
|
+
*(const char16_t **)((param.fast ? fast_ptr : args_ptr)++) = str16;
|
|
216
|
+
} break;
|
|
217
|
+
case PrimitiveKind::String32: {
|
|
218
|
+
const char32_t *str32;
|
|
219
|
+
if (!PushString32(value, param.directions, &str32)) [[unlikely]]
|
|
220
|
+
return false;
|
|
317
221
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
222
|
+
*(const char32_t **)((param.fast ? fast_ptr : args_ptr)++) = str32;
|
|
223
|
+
} break;
|
|
224
|
+
case PrimitiveKind::Pointer: {
|
|
225
|
+
void *ptr;
|
|
226
|
+
if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
|
|
227
|
+
return false;
|
|
323
228
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
229
|
+
*(void **)((param.fast ? fast_ptr : args_ptr)++) = ptr;
|
|
230
|
+
} break;
|
|
231
|
+
case PrimitiveKind::Record:
|
|
232
|
+
case PrimitiveKind::Union: {
|
|
233
|
+
if (!IsObject(value)) [[unlikely]] {
|
|
234
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected object", GetValueType(instance, value));
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
329
237
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
238
|
+
Napi::Object obj = value.As<Napi::Object>();
|
|
239
|
+
|
|
240
|
+
if (param.fast) {
|
|
241
|
+
uint8_t *ptr = (uint8_t *)(fast_ptr++);
|
|
242
|
+
if (!PushObject(obj, param.type, ptr))
|
|
243
|
+
return false;
|
|
244
|
+
} else {
|
|
245
|
+
uint8_t *ptr = (uint8_t *)args_ptr;
|
|
246
|
+
if (!PushObject(obj, param.type, ptr))
|
|
247
|
+
return false;
|
|
248
|
+
args_ptr = (uint32_t *)AlignUp(ptr + param.type->size, 4);
|
|
249
|
+
}
|
|
250
|
+
} break;
|
|
251
|
+
case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
|
|
252
|
+
case PrimitiveKind::Float32: {
|
|
253
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
254
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
333
257
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
258
|
+
float f = GetNumber<float>(value);
|
|
259
|
+
*(float *)((param.fast ? fast_ptr : args_ptr)++) = f;
|
|
260
|
+
} break;
|
|
261
|
+
case PrimitiveKind::Float64: {
|
|
262
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
263
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
264
|
+
return false;
|
|
265
|
+
}
|
|
337
266
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
267
|
+
double d = GetNumber<double>(value);
|
|
268
|
+
*(double *)args_ptr = d;
|
|
269
|
+
args_ptr += 2;
|
|
270
|
+
} break;
|
|
271
|
+
case PrimitiveKind::Callback: {
|
|
272
|
+
void *ptr;
|
|
273
|
+
if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
|
|
274
|
+
return false;
|
|
341
275
|
|
|
342
|
-
|
|
343
|
-
|
|
276
|
+
*(void **)((param.fast ? fast_ptr : args_ptr)++) = ptr;
|
|
277
|
+
} break;
|
|
344
278
|
|
|
345
|
-
|
|
279
|
+
case PrimitiveKind::Prototype: { K_UNREACHABLE(); } break;
|
|
280
|
+
}
|
|
346
281
|
}
|
|
347
282
|
|
|
348
283
|
#undef PUSH_INTEGER_64_SWAP
|
|
@@ -350,10 +285,6 @@ bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
|
|
|
350
285
|
#undef PUSH_INTEGER_32_SWAP
|
|
351
286
|
#undef PUSH_INTEGER_32
|
|
352
287
|
|
|
353
|
-
#undef OR
|
|
354
|
-
#undef CASE
|
|
355
|
-
#undef LOOP
|
|
356
|
-
|
|
357
288
|
new_sp = mem->stack.end();
|
|
358
289
|
|
|
359
290
|
return true;
|
|
@@ -382,7 +313,7 @@ void CallData::Execute(const FunctionInfo *func, void *native)
|
|
|
382
313
|
};
|
|
383
314
|
|
|
384
315
|
// Adjust stack limits so SEH works correctly
|
|
385
|
-
teb->ExceptionList = (
|
|
316
|
+
teb->ExceptionList = mem->stack0.end() - K_SIZE(SehFrame);
|
|
386
317
|
teb->StackBase = mem->stack0.end();
|
|
387
318
|
teb->StackLimit = mem->stack0.ptr;
|
|
388
319
|
teb->DeallocationStack = mem->stack0.ptr;
|
|
@@ -479,8 +410,17 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
|
|
|
479
410
|
case PrimitiveKind::String: return result.ptr ? Napi::String::New(env, (const char *)result.ptr) : env.Null();
|
|
480
411
|
case PrimitiveKind::String16: return result.ptr ? Napi::String::New(env, (const char16_t *)result.ptr) : env.Null();
|
|
481
412
|
case PrimitiveKind::String32: return result.ptr ? MakeStringFromUTF32(env, (const char32_t *)result.ptr) : env.Null();
|
|
482
|
-
case PrimitiveKind::Pointer:
|
|
483
|
-
case PrimitiveKind::Callback:
|
|
413
|
+
case PrimitiveKind::Pointer:
|
|
414
|
+
case PrimitiveKind::Callback: {
|
|
415
|
+
if (result.ptr) {
|
|
416
|
+
Napi::External<void> external = Napi::External<void>::New(env, result.ptr);
|
|
417
|
+
SetValueTag(external, func->ret.type->ref.marker);
|
|
418
|
+
|
|
419
|
+
return external;
|
|
420
|
+
} else {
|
|
421
|
+
return env.Null();
|
|
422
|
+
}
|
|
423
|
+
} break;
|
|
484
424
|
case PrimitiveKind::Record:
|
|
485
425
|
case PrimitiveKind::Union: {
|
|
486
426
|
const uint8_t *ptr = return_ptr ? (const uint8_t *)return_ptr
|
|
@@ -499,31 +439,13 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
|
|
|
499
439
|
K_UNREACHABLE();
|
|
500
440
|
}
|
|
501
441
|
|
|
502
|
-
void CallData::Relay(Size idx, uint8_t
|
|
442
|
+
void CallData::Relay(Size idx, uint8_t *sp)
|
|
503
443
|
{
|
|
504
|
-
if (env.IsExceptionPending()) [[unlikely]]
|
|
505
|
-
return;
|
|
506
|
-
|
|
507
|
-
#if defined(_WIN32)
|
|
508
|
-
TEB *teb = GetTEB();
|
|
509
|
-
|
|
510
|
-
// Restore previous stack limits at the end
|
|
511
|
-
K_DEFER_C(base = teb->StackBase,
|
|
512
|
-
limit = teb->StackLimit,
|
|
513
|
-
dealloc = teb->DeallocationStack) {
|
|
514
|
-
teb->StackBase = base;
|
|
515
|
-
teb->StackLimit = limit;
|
|
516
|
-
teb->DeallocationStack = dealloc;
|
|
517
|
-
};
|
|
518
|
-
|
|
519
|
-
// Adjust stack limits so SEH works correctly
|
|
520
|
-
teb->StackBase = instance->main_stack_max;
|
|
521
|
-
teb->StackLimit = instance->main_stack_min;
|
|
522
|
-
teb->DeallocationStack = instance->main_stack_min;
|
|
523
|
-
#endif
|
|
524
|
-
|
|
525
444
|
const TrampolineInfo &trampoline = shared.trampolines[idx];
|
|
526
445
|
|
|
446
|
+
uint8_t *caller_sp = sp + 48;
|
|
447
|
+
BackRegisters *out_reg = (BackRegisters *)(sp + 16);
|
|
448
|
+
|
|
527
449
|
const FunctionInfo *proto = trampoline.proto;
|
|
528
450
|
Napi::Function func = trampoline.func.Value();
|
|
529
451
|
|
|
@@ -549,11 +471,6 @@ void CallData::Relay(Size idx, uint8_t *, uint8_t *caller_sp, bool switch_stack,
|
|
|
549
471
|
out_reg->ret_pop = pop;
|
|
550
472
|
};
|
|
551
473
|
|
|
552
|
-
if (trampoline.generation >= 0 && trampoline.generation != (int32_t)mem->generation) [[unlikely]] {
|
|
553
|
-
ThrowError<Napi::Error>(env, "Cannot use non-registered callback beyond FFI call");
|
|
554
|
-
return;
|
|
555
|
-
}
|
|
556
|
-
|
|
557
474
|
LocalArray<napi_value, MaxParameters + 1> arguments;
|
|
558
475
|
|
|
559
476
|
arguments.Append(!trampoline.recv.IsEmpty() ? trampoline.recv.Value() : env.Undefined());
|
|
@@ -690,21 +607,18 @@ void CallData::Relay(Size idx, uint8_t *, uint8_t *caller_sp, bool switch_stack,
|
|
|
690
607
|
Napi::Value arg = str32 ? MakeStringFromUTF32(env, str32) : env.Null();
|
|
691
608
|
arguments.Append(arg);
|
|
692
609
|
} break;
|
|
693
|
-
case PrimitiveKind::Pointer:
|
|
610
|
+
case PrimitiveKind::Pointer:
|
|
611
|
+
case PrimitiveKind::Callback: {
|
|
694
612
|
void *ptr2 = *(void **)(args_ptr++);
|
|
695
613
|
|
|
696
|
-
|
|
697
|
-
|
|
614
|
+
if (ptr2) {
|
|
615
|
+
Napi::External<void> external = Napi::External<void>::New(env, ptr2);
|
|
616
|
+
SetValueTag(external, param.type->ref.marker);
|
|
698
617
|
|
|
699
|
-
|
|
700
|
-
|
|
618
|
+
arguments.Append(external);
|
|
619
|
+
} else {
|
|
620
|
+
arguments.Append(env.Null());
|
|
701
621
|
}
|
|
702
|
-
} break;
|
|
703
|
-
case PrimitiveKind::Callback: {
|
|
704
|
-
void *ptr2 = *(void **)(args_ptr++);
|
|
705
|
-
|
|
706
|
-
Napi::Value p = ptr2 ? WrapCallback(env, param.type->ref.type, ptr2) : env.Null();
|
|
707
|
-
arguments.Append(p);
|
|
708
622
|
|
|
709
623
|
if (param.type->dispose) {
|
|
710
624
|
param.type->dispose(env, param.type, ptr2);
|
|
@@ -742,61 +656,56 @@ void CallData::Relay(Size idx, uint8_t *, uint8_t *caller_sp, bool switch_stack,
|
|
|
742
656
|
|
|
743
657
|
const TypeInfo *type = proto->ret.type;
|
|
744
658
|
|
|
745
|
-
// Make the call
|
|
746
|
-
|
|
747
|
-
if (switch_stack) {
|
|
748
|
-
ret = CallSwitchStack(&func, (size_t)arguments.len, arguments.data, old_sp, &mem->stack,
|
|
749
|
-
[](Napi::Function *func, size_t argc, napi_value *argv) { return (napi_value)func->Call(argv[0], argc - 1, argv + 1); });
|
|
750
|
-
} else {
|
|
751
|
-
ret = (napi_value)func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
|
|
752
|
-
}
|
|
753
|
-
Napi::Value value(env, ret);
|
|
659
|
+
// Make the call!
|
|
660
|
+
Napi::Value value = func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
|
|
754
661
|
|
|
755
662
|
if (env.IsExceptionPending()) [[unlikely]]
|
|
756
663
|
return;
|
|
757
664
|
|
|
758
665
|
#define RETURN_INTEGER_32(CType) \
|
|
759
666
|
do { \
|
|
760
|
-
|
|
761
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
667
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
762
668
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
763
669
|
return; \
|
|
764
670
|
} \
|
|
765
671
|
\
|
|
672
|
+
CType v = GetNumber<CType>(value); \
|
|
766
673
|
out_reg->eax = (uint32_t)v; \
|
|
767
674
|
out_reg->ret_type = 0; \
|
|
768
675
|
} while (false)
|
|
769
676
|
#define RETURN_INTEGER_32_SWAP(CType) \
|
|
770
677
|
do { \
|
|
771
|
-
|
|
772
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
678
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
773
679
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
774
680
|
return; \
|
|
775
681
|
} \
|
|
776
682
|
\
|
|
683
|
+
CType v = GetNumber<CType>(value); \
|
|
777
684
|
out_reg->eax = (uint32_t)ReverseBytes(v); \
|
|
778
685
|
out_reg->ret_type = 0; \
|
|
779
686
|
} while (false)
|
|
780
687
|
#define RETURN_INTEGER_64(CType) \
|
|
781
688
|
do { \
|
|
782
|
-
|
|
783
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
689
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
784
690
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
785
691
|
return; \
|
|
786
692
|
} \
|
|
787
693
|
\
|
|
694
|
+
CType v = GetNumber<CType>(value); \
|
|
695
|
+
\
|
|
788
696
|
out_reg->eax = (uint32_t)((uint64_t)v >> 32); \
|
|
789
697
|
out_reg->edx = (uint32_t)((uint64_t)v & 0xFFFFFFFFu); \
|
|
790
698
|
out_reg->ret_type = 0; \
|
|
791
699
|
} while (false)
|
|
792
700
|
#define RETURN_INTEGER_64_SWAP(CType) \
|
|
793
701
|
do { \
|
|
794
|
-
|
|
795
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
702
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
796
703
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
797
704
|
return; \
|
|
798
705
|
} \
|
|
799
706
|
\
|
|
707
|
+
CType v = ReverseBytes(GetNumber<CType>(value)); \
|
|
708
|
+
\
|
|
800
709
|
out_reg->eax = (uint32_t)((uint64_t)v >> 32); \
|
|
801
710
|
out_reg->edx = (uint32_t)((uint64_t)v & 0xFFFFFFFFu); \
|
|
802
711
|
out_reg->ret_type = 0; \
|
|
@@ -805,12 +714,12 @@ void CallData::Relay(Size idx, uint8_t *, uint8_t *caller_sp, bool switch_stack,
|
|
|
805
714
|
switch (type->primitive) {
|
|
806
715
|
case PrimitiveKind::Void: { out_reg->ret_type = 0; } break;
|
|
807
716
|
case PrimitiveKind::Bool: {
|
|
808
|
-
|
|
809
|
-
if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
|
|
717
|
+
if (!value.IsBoolean()) [[unlikely]] {
|
|
810
718
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
811
719
|
return;
|
|
812
720
|
}
|
|
813
721
|
|
|
722
|
+
bool b = value.As<Napi::Boolean>();
|
|
814
723
|
out_reg->eax = (uint32_t)b;
|
|
815
724
|
out_reg->ret_type = 0;
|
|
816
725
|
} break;
|
|
@@ -853,9 +762,24 @@ void CallData::Relay(Size idx, uint8_t *, uint8_t *caller_sp, bool switch_stack,
|
|
|
853
762
|
out_reg->ret_type = 0;
|
|
854
763
|
} break;
|
|
855
764
|
case PrimitiveKind::Pointer: {
|
|
856
|
-
|
|
857
|
-
|
|
765
|
+
uint8_t *ptr;
|
|
766
|
+
|
|
767
|
+
if (CheckValueTag(value, type->ref.marker)) {
|
|
768
|
+
ptr = value.As<Napi::External<uint8_t>>().Data();
|
|
769
|
+
} else if (IsObject(value) && (type->ref.type->primitive == PrimitiveKind::Record ||
|
|
770
|
+
type->ref.type->primitive == PrimitiveKind::Union)) {
|
|
771
|
+
Napi::Object obj = value.As<Napi::Object>();
|
|
772
|
+
|
|
773
|
+
ptr = AllocHeap(type->ref.type->size, 16);
|
|
774
|
+
|
|
775
|
+
if (!PushObject(obj, type->ref.type, ptr))
|
|
776
|
+
return;
|
|
777
|
+
} else if (IsNullOrUndefined(value)) {
|
|
778
|
+
ptr = nullptr;
|
|
779
|
+
} else {
|
|
780
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
858
781
|
return;
|
|
782
|
+
}
|
|
859
783
|
|
|
860
784
|
out_reg->eax = (uint32_t)ptr;
|
|
861
785
|
out_reg->ret_type = 0;
|
|
@@ -881,29 +805,40 @@ void CallData::Relay(Size idx, uint8_t *, uint8_t *caller_sp, bool switch_stack,
|
|
|
881
805
|
} break;
|
|
882
806
|
case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
|
|
883
807
|
case PrimitiveKind::Float32: {
|
|
884
|
-
|
|
885
|
-
if (!TryNumber(value, &f)) [[unlikely]] {
|
|
808
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
886
809
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
887
810
|
return;
|
|
888
811
|
}
|
|
889
812
|
|
|
890
|
-
out_reg->x87.f =
|
|
813
|
+
out_reg->x87.f = GetNumber<float>(value);
|
|
891
814
|
out_reg->ret_type = 1;
|
|
892
815
|
} break;
|
|
893
816
|
case PrimitiveKind::Float64: {
|
|
894
|
-
|
|
895
|
-
if (!TryNumber(value, &d)) [[unlikely]] {
|
|
817
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
896
818
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
897
819
|
return;
|
|
898
820
|
}
|
|
899
821
|
|
|
900
|
-
out_reg->x87.d =
|
|
822
|
+
out_reg->x87.d = GetNumber<double>(value);
|
|
901
823
|
out_reg->ret_type = 2;
|
|
902
824
|
} break;
|
|
903
825
|
case PrimitiveKind::Callback: {
|
|
904
826
|
void *ptr;
|
|
905
|
-
|
|
827
|
+
|
|
828
|
+
if (value.IsFunction()) {
|
|
829
|
+
Napi::Function func2 = value.As<Napi::Function>();
|
|
830
|
+
|
|
831
|
+
ptr = ReserveTrampoline(type->ref.proto, func2);
|
|
832
|
+
if (!ptr) [[unlikely]]
|
|
833
|
+
return;
|
|
834
|
+
} else if (CheckValueTag(value, type->ref.marker)) {
|
|
835
|
+
ptr = value.As<Napi::External<void>>().Data();
|
|
836
|
+
} else if (IsNullOrUndefined(value)) {
|
|
837
|
+
ptr = nullptr;
|
|
838
|
+
} else {
|
|
839
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
906
840
|
return;
|
|
841
|
+
}
|
|
907
842
|
|
|
908
843
|
out_reg->eax = (uint32_t)ptr;
|
|
909
844
|
out_reg->ret_type = 0;
|