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
|
@@ -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,8 +439,11 @@ 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
|
{
|
|
444
|
+
uint8_t *caller_sp = sp + 48;
|
|
445
|
+
BackRegisters *out_reg = (BackRegisters *)(sp + 16);
|
|
446
|
+
|
|
504
447
|
if (env.IsExceptionPending()) [[unlikely]]
|
|
505
448
|
return;
|
|
506
449
|
|
|
@@ -690,21 +633,18 @@ void CallData::Relay(Size idx, uint8_t *, uint8_t *caller_sp, bool switch_stack,
|
|
|
690
633
|
Napi::Value arg = str32 ? MakeStringFromUTF32(env, str32) : env.Null();
|
|
691
634
|
arguments.Append(arg);
|
|
692
635
|
} break;
|
|
693
|
-
case PrimitiveKind::Pointer:
|
|
636
|
+
case PrimitiveKind::Pointer:
|
|
637
|
+
case PrimitiveKind::Callback: {
|
|
694
638
|
void *ptr2 = *(void **)(args_ptr++);
|
|
695
639
|
|
|
696
|
-
|
|
697
|
-
|
|
640
|
+
if (ptr2) {
|
|
641
|
+
Napi::External<void> external = Napi::External<void>::New(env, ptr2);
|
|
642
|
+
SetValueTag(external, param.type->ref.marker);
|
|
698
643
|
|
|
699
|
-
|
|
700
|
-
|
|
644
|
+
arguments.Append(external);
|
|
645
|
+
} else {
|
|
646
|
+
arguments.Append(env.Null());
|
|
701
647
|
}
|
|
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
648
|
|
|
709
649
|
if (param.type->dispose) {
|
|
710
650
|
param.type->dispose(env, param.type, ptr2);
|
|
@@ -742,61 +682,56 @@ void CallData::Relay(Size idx, uint8_t *, uint8_t *caller_sp, bool switch_stack,
|
|
|
742
682
|
|
|
743
683
|
const TypeInfo *type = proto->ret.type;
|
|
744
684
|
|
|
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);
|
|
685
|
+
// Make the call!
|
|
686
|
+
Napi::Value value = func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
|
|
754
687
|
|
|
755
688
|
if (env.IsExceptionPending()) [[unlikely]]
|
|
756
689
|
return;
|
|
757
690
|
|
|
758
691
|
#define RETURN_INTEGER_32(CType) \
|
|
759
692
|
do { \
|
|
760
|
-
|
|
761
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
693
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
762
694
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
763
695
|
return; \
|
|
764
696
|
} \
|
|
765
697
|
\
|
|
698
|
+
CType v = GetNumber<CType>(value); \
|
|
766
699
|
out_reg->eax = (uint32_t)v; \
|
|
767
700
|
out_reg->ret_type = 0; \
|
|
768
701
|
} while (false)
|
|
769
702
|
#define RETURN_INTEGER_32_SWAP(CType) \
|
|
770
703
|
do { \
|
|
771
|
-
|
|
772
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
704
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
773
705
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
774
706
|
return; \
|
|
775
707
|
} \
|
|
776
708
|
\
|
|
709
|
+
CType v = GetNumber<CType>(value); \
|
|
777
710
|
out_reg->eax = (uint32_t)ReverseBytes(v); \
|
|
778
711
|
out_reg->ret_type = 0; \
|
|
779
712
|
} while (false)
|
|
780
713
|
#define RETURN_INTEGER_64(CType) \
|
|
781
714
|
do { \
|
|
782
|
-
|
|
783
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
715
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
784
716
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
785
717
|
return; \
|
|
786
718
|
} \
|
|
787
719
|
\
|
|
720
|
+
CType v = GetNumber<CType>(value); \
|
|
721
|
+
\
|
|
788
722
|
out_reg->eax = (uint32_t)((uint64_t)v >> 32); \
|
|
789
723
|
out_reg->edx = (uint32_t)((uint64_t)v & 0xFFFFFFFFu); \
|
|
790
724
|
out_reg->ret_type = 0; \
|
|
791
725
|
} while (false)
|
|
792
726
|
#define RETURN_INTEGER_64_SWAP(CType) \
|
|
793
727
|
do { \
|
|
794
|
-
|
|
795
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
728
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
796
729
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
797
730
|
return; \
|
|
798
731
|
} \
|
|
799
732
|
\
|
|
733
|
+
CType v = ReverseBytes(GetNumber<CType>(value)); \
|
|
734
|
+
\
|
|
800
735
|
out_reg->eax = (uint32_t)((uint64_t)v >> 32); \
|
|
801
736
|
out_reg->edx = (uint32_t)((uint64_t)v & 0xFFFFFFFFu); \
|
|
802
737
|
out_reg->ret_type = 0; \
|
|
@@ -805,12 +740,12 @@ void CallData::Relay(Size idx, uint8_t *, uint8_t *caller_sp, bool switch_stack,
|
|
|
805
740
|
switch (type->primitive) {
|
|
806
741
|
case PrimitiveKind::Void: { out_reg->ret_type = 0; } break;
|
|
807
742
|
case PrimitiveKind::Bool: {
|
|
808
|
-
|
|
809
|
-
if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
|
|
743
|
+
if (!value.IsBoolean()) [[unlikely]] {
|
|
810
744
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
811
745
|
return;
|
|
812
746
|
}
|
|
813
747
|
|
|
748
|
+
bool b = value.As<Napi::Boolean>();
|
|
814
749
|
out_reg->eax = (uint32_t)b;
|
|
815
750
|
out_reg->ret_type = 0;
|
|
816
751
|
} break;
|
|
@@ -853,9 +788,24 @@ void CallData::Relay(Size idx, uint8_t *, uint8_t *caller_sp, bool switch_stack,
|
|
|
853
788
|
out_reg->ret_type = 0;
|
|
854
789
|
} break;
|
|
855
790
|
case PrimitiveKind::Pointer: {
|
|
856
|
-
|
|
857
|
-
|
|
791
|
+
uint8_t *ptr;
|
|
792
|
+
|
|
793
|
+
if (CheckValueTag(value, type->ref.marker)) {
|
|
794
|
+
ptr = value.As<Napi::External<uint8_t>>().Data();
|
|
795
|
+
} else if (IsObject(value) && (type->ref.type->primitive == PrimitiveKind::Record ||
|
|
796
|
+
type->ref.type->primitive == PrimitiveKind::Union)) {
|
|
797
|
+
Napi::Object obj = value.As<Napi::Object>();
|
|
798
|
+
|
|
799
|
+
ptr = AllocHeap(type->ref.type->size, 16);
|
|
800
|
+
|
|
801
|
+
if (!PushObject(obj, type->ref.type, ptr))
|
|
802
|
+
return;
|
|
803
|
+
} else if (IsNullOrUndefined(value)) {
|
|
804
|
+
ptr = nullptr;
|
|
805
|
+
} else {
|
|
806
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
858
807
|
return;
|
|
808
|
+
}
|
|
859
809
|
|
|
860
810
|
out_reg->eax = (uint32_t)ptr;
|
|
861
811
|
out_reg->ret_type = 0;
|
|
@@ -881,29 +831,40 @@ void CallData::Relay(Size idx, uint8_t *, uint8_t *caller_sp, bool switch_stack,
|
|
|
881
831
|
} break;
|
|
882
832
|
case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
|
|
883
833
|
case PrimitiveKind::Float32: {
|
|
884
|
-
|
|
885
|
-
if (!TryNumber(value, &f)) [[unlikely]] {
|
|
834
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
886
835
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
887
836
|
return;
|
|
888
837
|
}
|
|
889
838
|
|
|
890
|
-
out_reg->x87.f =
|
|
839
|
+
out_reg->x87.f = GetNumber<float>(value);
|
|
891
840
|
out_reg->ret_type = 1;
|
|
892
841
|
} break;
|
|
893
842
|
case PrimitiveKind::Float64: {
|
|
894
|
-
|
|
895
|
-
if (!TryNumber(value, &d)) [[unlikely]] {
|
|
843
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
896
844
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
897
845
|
return;
|
|
898
846
|
}
|
|
899
847
|
|
|
900
|
-
out_reg->x87.d =
|
|
848
|
+
out_reg->x87.d = GetNumber<double>(value);
|
|
901
849
|
out_reg->ret_type = 2;
|
|
902
850
|
} break;
|
|
903
851
|
case PrimitiveKind::Callback: {
|
|
904
852
|
void *ptr;
|
|
905
|
-
|
|
853
|
+
|
|
854
|
+
if (value.IsFunction()) {
|
|
855
|
+
Napi::Function func2 = value.As<Napi::Function>();
|
|
856
|
+
|
|
857
|
+
ptr = ReserveTrampoline(type->ref.proto, func2);
|
|
858
|
+
if (!ptr) [[unlikely]]
|
|
859
|
+
return;
|
|
860
|
+
} else if (CheckValueTag(value, type->ref.marker)) {
|
|
861
|
+
ptr = value.As<Napi::External<void>>().Data();
|
|
862
|
+
} else if (IsNullOrUndefined(value)) {
|
|
863
|
+
ptr = nullptr;
|
|
864
|
+
} else {
|
|
865
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
906
866
|
return;
|
|
867
|
+
}
|
|
907
868
|
|
|
908
869
|
out_reg->eax = (uint32_t)ptr;
|
|
909
870
|
out_reg->ret_type = 0;
|