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,9 +4,9 @@
|
|
|
4
4
|
#if defined(__arm__) || (defined(__M_ARM) && !defined(_M_ARM64))
|
|
5
5
|
|
|
6
6
|
#include "lib/native/base/base.hh"
|
|
7
|
-
#include "
|
|
8
|
-
#include "
|
|
9
|
-
#include "
|
|
7
|
+
#include "ffi.hh"
|
|
8
|
+
#include "call.hh"
|
|
9
|
+
#include "util.hh"
|
|
10
10
|
|
|
11
11
|
#include <napi.h>
|
|
12
12
|
#include <signal.h>
|
|
@@ -38,9 +38,10 @@ extern "C" uint64_t ForwardCallXGG(const void *func, uint8_t *sp, uint8_t **out_
|
|
|
38
38
|
extern "C" float ForwardCallXF(const void *func, uint8_t *sp, uint8_t **out_old_sp);
|
|
39
39
|
extern "C" HfaRet ForwardCallXDDDD(const void *func, uint8_t *sp, uint8_t **out_old_sp);
|
|
40
40
|
|
|
41
|
-
extern "C"
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
extern "C" uint8_t Trampoline0;
|
|
42
|
+
extern "C" uint8_t TrampolineEnd;
|
|
43
|
+
extern "C" void *FindTrampolineStart();
|
|
44
|
+
extern "C" void *FindTrampolineEnd();
|
|
44
45
|
|
|
45
46
|
static int IsHFA(const TypeInfo *type)
|
|
46
47
|
{
|
|
@@ -199,73 +200,54 @@ bool AnalyseFunction(Napi::Env, InstanceData *, FunctionInfo *func)
|
|
|
199
200
|
|
|
200
201
|
bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
|
|
201
202
|
{
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
uint32_t *vec_ptr =
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
203
|
+
uint32_t *args_ptr = nullptr;
|
|
204
|
+
uint32_t *gpr_ptr = nullptr;
|
|
205
|
+
uint32_t *vec_ptr = nullptr;
|
|
206
|
+
|
|
207
|
+
// Unlike other call conventions, here we put the general-purpose
|
|
208
|
+
// registers just before the stack (so behind the vector ones).
|
|
209
|
+
// In the armv7hf calling convention, some arguments can end up
|
|
210
|
+
// partially in GPR, partially in the stack.
|
|
211
|
+
if (!AllocStack(func->args_size, 16, &args_ptr)) [[unlikely]]
|
|
212
|
+
return false;
|
|
213
|
+
if (!AllocStack(4 * 4, 8, &gpr_ptr)) [[unlikely]]
|
|
214
|
+
return false;
|
|
215
|
+
if (!AllocStack(8 * 8, 8, &vec_ptr)) [[unlikely]]
|
|
209
216
|
return false;
|
|
210
217
|
if (func->ret.use_memory) {
|
|
211
218
|
return_ptr = AllocHeap(func->ret.type->size, 16);
|
|
212
219
|
*(uint8_t **)(gpr_ptr++) = return_ptr;
|
|
213
220
|
}
|
|
214
221
|
|
|
215
|
-
Size i = -1;
|
|
216
|
-
|
|
217
|
-
static const void *const DispatchTable[] = {
|
|
218
|
-
#define PRIMITIVE(Name) && Name,
|
|
219
|
-
#include "../primitives.inc"
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
#define LOOP
|
|
223
|
-
#define CASE(Primitive) \
|
|
224
|
-
do { \
|
|
225
|
-
PrimitiveKind next = func->primitives[++i]; \
|
|
226
|
-
goto *DispatchTable[(int)next]; \
|
|
227
|
-
} while (false); \
|
|
228
|
-
Primitive:
|
|
229
|
-
#define OR(Primitive) \
|
|
230
|
-
Primitive:
|
|
231
|
-
|
|
232
222
|
#define PUSH_INTEGER_32(CType) \
|
|
233
223
|
do { \
|
|
234
|
-
|
|
235
|
-
Napi::Value value = info[param.offset]; \
|
|
236
|
-
\
|
|
237
|
-
CType v; \
|
|
238
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
224
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
239
225
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
240
226
|
return false; \
|
|
241
227
|
} \
|
|
242
228
|
\
|
|
229
|
+
CType v = GetNumber<CType>(value); \
|
|
243
230
|
*((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint32_t)v; \
|
|
244
231
|
} while (false)
|
|
245
232
|
#define PUSH_INTEGER_32_SWAP(CType) \
|
|
246
233
|
do { \
|
|
247
|
-
|
|
248
|
-
Napi::Value value = info[param.offset]; \
|
|
249
|
-
\
|
|
250
|
-
CType v; \
|
|
251
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
234
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
252
235
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
253
236
|
return false; \
|
|
254
237
|
} \
|
|
255
238
|
\
|
|
239
|
+
CType v = GetNumber<CType>(value); \
|
|
256
240
|
*((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint32_t)ReverseBytes(v); \
|
|
257
241
|
} while (false)
|
|
258
242
|
#define PUSH_INTEGER_64(CType) \
|
|
259
243
|
do { \
|
|
260
|
-
|
|
261
|
-
Napi::Value value = info[param.offset]; \
|
|
262
|
-
\
|
|
263
|
-
CType v; \
|
|
264
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
244
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
265
245
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
266
246
|
return false; \
|
|
267
247
|
} \
|
|
268
248
|
\
|
|
249
|
+
CType v = GetNumber<CType>(value); \
|
|
250
|
+
\
|
|
269
251
|
if (param.gpr_count) [[likely]] { \
|
|
270
252
|
gpr_ptr = AlignUp(gpr_ptr, 8); \
|
|
271
253
|
*(uint64_t *)gpr_ptr = (uint64_t)v; \
|
|
@@ -278,15 +260,13 @@ bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
|
|
|
278
260
|
} while (false)
|
|
279
261
|
#define PUSH_INTEGER_64_SWAP(CType) \
|
|
280
262
|
do { \
|
|
281
|
-
|
|
282
|
-
Napi::Value value = info[param.offset]; \
|
|
283
|
-
\
|
|
284
|
-
CType v; \
|
|
285
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
263
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
286
264
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
287
265
|
return false; \
|
|
288
266
|
} \
|
|
289
267
|
\
|
|
268
|
+
CType v = GetNumber<CType>(value); \
|
|
269
|
+
\
|
|
290
270
|
if (param.gpr_count) [[likely]] { \
|
|
291
271
|
gpr_ptr = AlignUp(gpr_ptr, 8); \
|
|
292
272
|
*(uint64_t *)gpr_ptr = (uint64_t)ReverseBytes(v); \
|
|
@@ -298,170 +278,148 @@ bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
|
|
|
298
278
|
} \
|
|
299
279
|
} while (false)
|
|
300
280
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
306
|
-
Napi::Value value = info[param.offset];
|
|
307
|
-
|
|
308
|
-
bool b;
|
|
309
|
-
if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
|
|
310
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
311
|
-
return false;
|
|
312
|
-
}
|
|
281
|
+
// Push arguments
|
|
282
|
+
for (Size i = 0; i < func->parameters.len; i++) {
|
|
283
|
+
const ParameterInfo ¶m = func->parameters[i];
|
|
284
|
+
K_ASSERT(param.directions >= 1 && param.directions <= 3);
|
|
313
285
|
|
|
314
|
-
|
|
315
|
-
};
|
|
316
|
-
|
|
317
|
-
CASE(Int8) { PUSH_INTEGER_32(int8_t); };
|
|
318
|
-
CASE(UInt8) { PUSH_INTEGER_32(uint8_t); };
|
|
319
|
-
CASE(Int16) { PUSH_INTEGER_32(int16_t); };
|
|
320
|
-
CASE(Int16S) { PUSH_INTEGER_32_SWAP(int16_t); };
|
|
321
|
-
CASE(UInt16) { PUSH_INTEGER_32(uint16_t); };
|
|
322
|
-
CASE(UInt16S) { PUSH_INTEGER_32_SWAP(uint16_t); };
|
|
323
|
-
CASE(Int32) { PUSH_INTEGER_32(int32_t); };
|
|
324
|
-
CASE(Int32S) { PUSH_INTEGER_32_SWAP(int32_t); };
|
|
325
|
-
CASE(UInt32) { PUSH_INTEGER_32(uint32_t); };
|
|
326
|
-
CASE(UInt32S) { PUSH_INTEGER_32_SWAP(uint32_t); };
|
|
327
|
-
CASE(Int64) { PUSH_INTEGER_64(int64_t); };
|
|
328
|
-
CASE(Int64S) { PUSH_INTEGER_64_SWAP(int64_t); };
|
|
329
|
-
CASE(UInt64) { PUSH_INTEGER_64(uint64_t); };
|
|
330
|
-
CASE(UInt64S) { PUSH_INTEGER_64_SWAP(uint64_t); };
|
|
331
|
-
|
|
332
|
-
CASE(String) {
|
|
333
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
334
|
-
Napi::Value value = info[param.offset];
|
|
286
|
+
Napi::Value value = info[param.offset];
|
|
335
287
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
return false;
|
|
288
|
+
switch (param.type->primitive) {
|
|
289
|
+
case PrimitiveKind::Void: { K_UNREACHABLE(); } break;
|
|
339
290
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
291
|
+
case PrimitiveKind::Bool: {
|
|
292
|
+
if (!value.IsBoolean()) [[unlikely]] {
|
|
293
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
294
|
+
return false;
|
|
295
|
+
}
|
|
345
296
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
297
|
+
bool b = value.As<Napi::Boolean>();
|
|
298
|
+
*((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint32_t)b;
|
|
299
|
+
} break;
|
|
300
|
+
case PrimitiveKind::Int8: { PUSH_INTEGER_32(int8_t); } break;
|
|
301
|
+
case PrimitiveKind::UInt8: { PUSH_INTEGER_32(uint8_t); } break;
|
|
302
|
+
case PrimitiveKind::Int16: { PUSH_INTEGER_32(int16_t); } break;
|
|
303
|
+
case PrimitiveKind::Int16S: { PUSH_INTEGER_32_SWAP(int16_t); } break;
|
|
304
|
+
case PrimitiveKind::UInt16: { PUSH_INTEGER_32(uint16_t); } break;
|
|
305
|
+
case PrimitiveKind::UInt16S: { PUSH_INTEGER_32_SWAP(uint16_t); } break;
|
|
306
|
+
case PrimitiveKind::Int32: { PUSH_INTEGER_32(int32_t); } break;
|
|
307
|
+
case PrimitiveKind::Int32S: { PUSH_INTEGER_32_SWAP(int32_t); } break;
|
|
308
|
+
case PrimitiveKind::UInt32: { PUSH_INTEGER_32(uint32_t); } break;
|
|
309
|
+
case PrimitiveKind::UInt32S: { PUSH_INTEGER_32_SWAP(uint32_t); } break;
|
|
310
|
+
case PrimitiveKind::Int64: { PUSH_INTEGER_64(int64_t); } break;
|
|
311
|
+
case PrimitiveKind::Int64S: { PUSH_INTEGER_64_SWAP(int64_t); } break;
|
|
312
|
+
case PrimitiveKind::UInt64: { PUSH_INTEGER_64(uint64_t); } break;
|
|
313
|
+
case PrimitiveKind::UInt64S: { PUSH_INTEGER_64_SWAP(uint64_t); } break;
|
|
314
|
+
case PrimitiveKind::String: {
|
|
315
|
+
const char *str;
|
|
316
|
+
if (!PushString(value, param.directions, &str)) [[unlikely]]
|
|
317
|
+
return false;
|
|
349
318
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
319
|
+
*(const char **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str;
|
|
320
|
+
} break;
|
|
321
|
+
case PrimitiveKind::String16: {
|
|
322
|
+
const char16_t *str16;
|
|
323
|
+
if (!PushString16(value, param.directions, &str16)) [[unlikely]]
|
|
324
|
+
return false;
|
|
355
325
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
326
|
+
*(const char16_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str16;
|
|
327
|
+
} break;
|
|
328
|
+
case PrimitiveKind::String32: {
|
|
329
|
+
const char32_t *str32;
|
|
330
|
+
if (!PushString32(value, param.directions, &str32)) [[unlikely]]
|
|
331
|
+
return false;
|
|
359
332
|
|
|
360
|
-
|
|
361
|
-
|
|
333
|
+
*(const char32_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str32;
|
|
334
|
+
} break;
|
|
335
|
+
case PrimitiveKind::Pointer: {
|
|
336
|
+
void *ptr;
|
|
337
|
+
if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
|
|
338
|
+
return false;
|
|
362
339
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
340
|
+
*(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
|
|
341
|
+
} break;
|
|
342
|
+
case PrimitiveKind::Record:
|
|
343
|
+
case PrimitiveKind::Union: {
|
|
344
|
+
if (!IsObject(value)) [[unlikely]] {
|
|
345
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected object", GetValueType(instance, value));
|
|
346
|
+
return false;
|
|
347
|
+
}
|
|
366
348
|
|
|
367
|
-
|
|
368
|
-
if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
|
|
369
|
-
return false;
|
|
349
|
+
Napi::Object obj = value.As<Napi::Object>();
|
|
370
350
|
|
|
371
|
-
|
|
372
|
-
|
|
351
|
+
if (param.vec_count) {
|
|
352
|
+
if (!PushObject(obj, param.type, (uint8_t *)vec_ptr))
|
|
353
|
+
return false;
|
|
354
|
+
vec_ptr += param.vec_count;
|
|
355
|
+
} else if (param.gpr_count) {
|
|
356
|
+
K_ASSERT(param.type->align <= 8);
|
|
373
357
|
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
Napi::Value value = info[param.offset];
|
|
358
|
+
int16_t align = (param.type->align <= 4) ? 4 : 8;
|
|
359
|
+
gpr_ptr = AlignUp(gpr_ptr, align);
|
|
377
360
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
return false;
|
|
381
|
-
}
|
|
361
|
+
if (!PushObject(obj, param.type, (uint8_t *)gpr_ptr))
|
|
362
|
+
return false;
|
|
382
363
|
|
|
383
|
-
|
|
364
|
+
gpr_ptr += param.gpr_count;
|
|
365
|
+
args_ptr += (param.type->size - param.gpr_count * 4 + 3) / 4;
|
|
366
|
+
} else if (param.type->size) {
|
|
367
|
+
int16_t align = (param.type->align <= 4) ? 4 : 8;
|
|
368
|
+
args_ptr = AlignUp(args_ptr, align);
|
|
384
369
|
|
|
385
|
-
|
|
386
|
-
|
|
370
|
+
if (!PushObject(obj, param.type, (uint8_t *)args_ptr))
|
|
371
|
+
return false;
|
|
372
|
+
args_ptr += (param.type->size + 3) / 4;
|
|
373
|
+
}
|
|
374
|
+
} break;
|
|
375
|
+
case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
|
|
376
|
+
case PrimitiveKind::Float32: {
|
|
377
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
378
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
387
379
|
return false;
|
|
388
|
-
|
|
389
|
-
} else if (param.gpr_count) {
|
|
390
|
-
K_ASSERT(param.type->align <= 8);
|
|
380
|
+
}
|
|
391
381
|
|
|
392
|
-
|
|
393
|
-
gpr_ptr = AlignUp(gpr_ptr, align);
|
|
382
|
+
float f = GetNumber<float>(value);
|
|
394
383
|
|
|
395
|
-
if (
|
|
384
|
+
if (param.vec_count) [[likely]] {
|
|
385
|
+
*(float *)(vec_ptr++) = f;
|
|
386
|
+
} else if (param.gpr_count) {
|
|
387
|
+
*(float *)(gpr_ptr++) = f;
|
|
388
|
+
} else {
|
|
389
|
+
*(float *)(args_ptr++) = f;
|
|
390
|
+
}
|
|
391
|
+
} break;
|
|
392
|
+
case PrimitiveKind::Float64: {
|
|
393
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
394
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
396
395
|
return false;
|
|
396
|
+
}
|
|
397
397
|
|
|
398
|
-
|
|
399
|
-
args_ptr += (param.type->size - param.gpr_count * 4 + 3) / 4;
|
|
400
|
-
} else if (param.type->size) {
|
|
401
|
-
int16_t align = (param.type->align <= 4) ? 4 : 8;
|
|
402
|
-
args_ptr = AlignUp(args_ptr, align);
|
|
398
|
+
double d = GetNumber<double>(value);
|
|
403
399
|
|
|
404
|
-
if (
|
|
400
|
+
if (param.vec_count) [[likely]] {
|
|
401
|
+
*(double *)vec_ptr = d;
|
|
402
|
+
vec_ptr += 2;
|
|
403
|
+
} else if (param.gpr_count) {
|
|
404
|
+
gpr_ptr = AlignUp(gpr_ptr, 8);
|
|
405
|
+
*(double *)gpr_ptr = d;
|
|
406
|
+
gpr_ptr += 2;
|
|
407
|
+
} else {
|
|
408
|
+
args_ptr = AlignUp(args_ptr, 8);
|
|
409
|
+
*(double *)args_ptr = d;
|
|
410
|
+
args_ptr += 2;
|
|
411
|
+
}
|
|
412
|
+
} break;
|
|
413
|
+
case PrimitiveKind::Callback: {
|
|
414
|
+
void *ptr;
|
|
415
|
+
if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
|
|
405
416
|
return false;
|
|
406
|
-
args_ptr += (param.type->size + 3) / 4;
|
|
407
|
-
}
|
|
408
|
-
};
|
|
409
|
-
CASE(Array) { K_UNREACHABLE(); };
|
|
410
|
-
|
|
411
|
-
CASE(Float32) {
|
|
412
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
413
|
-
Napi::Value value = info[param.offset];
|
|
414
|
-
|
|
415
|
-
float f;
|
|
416
|
-
if (!TryNumber(value, &f)) [[unlikely]] {
|
|
417
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
418
|
-
return false;
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
if (param.vec_count) [[likely]] {
|
|
422
|
-
*(float *)(vec_ptr++) = f;
|
|
423
|
-
} else if (param.gpr_count) {
|
|
424
|
-
*(float *)(gpr_ptr++) = f;
|
|
425
|
-
} else {
|
|
426
|
-
*(float *)(args_ptr++) = f;
|
|
427
|
-
}
|
|
428
|
-
};
|
|
429
|
-
CASE(Float64) {
|
|
430
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
431
|
-
Napi::Value value = info[param.offset];
|
|
432
|
-
|
|
433
|
-
double d;
|
|
434
|
-
if (!TryNumber(value, &d)) [[unlikely]] {
|
|
435
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
436
|
-
return false;
|
|
437
|
-
}
|
|
438
417
|
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
vec_ptr += 2;
|
|
442
|
-
} else if (param.gpr_count) {
|
|
443
|
-
gpr_ptr = AlignUp(gpr_ptr, 8);
|
|
444
|
-
*(double *)gpr_ptr = d;
|
|
445
|
-
gpr_ptr += 2;
|
|
446
|
-
} else {
|
|
447
|
-
args_ptr = AlignUp(args_ptr, 8);
|
|
448
|
-
*(double *)args_ptr = d;
|
|
449
|
-
args_ptr += 2;
|
|
450
|
-
}
|
|
451
|
-
};
|
|
452
|
-
|
|
453
|
-
CASE(Callback) {
|
|
454
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
455
|
-
Napi::Value value = info[param.offset];
|
|
456
|
-
|
|
457
|
-
void *ptr;
|
|
458
|
-
if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
|
|
459
|
-
return false;
|
|
460
|
-
|
|
461
|
-
*(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
|
|
462
|
-
};
|
|
418
|
+
*(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
|
|
419
|
+
} break;
|
|
463
420
|
|
|
464
|
-
|
|
421
|
+
case PrimitiveKind::Prototype: { K_UNREACHABLE(); } break;
|
|
422
|
+
}
|
|
465
423
|
}
|
|
466
424
|
|
|
467
425
|
#undef PUSH_INTEGER_64_SWAP
|
|
@@ -469,10 +427,6 @@ bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
|
|
|
469
427
|
#undef PUSH_INTEGER_32_SWAP
|
|
470
428
|
#undef PUSH_INTEGER_32
|
|
471
429
|
|
|
472
|
-
#undef OR
|
|
473
|
-
#undef CASE
|
|
474
|
-
#undef LOOP
|
|
475
|
-
|
|
476
430
|
new_sp = mem->stack.end();
|
|
477
431
|
|
|
478
432
|
return true;
|
|
@@ -559,8 +513,17 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
|
|
|
559
513
|
case PrimitiveKind::String: return result.ptr ? Napi::String::New(env, (const char *)result.ptr) : env.Null();
|
|
560
514
|
case PrimitiveKind::String16: return result.ptr ? Napi::String::New(env, (const char16_t *)result.ptr) : env.Null();
|
|
561
515
|
case PrimitiveKind::String32: return result.ptr ? MakeStringFromUTF32(env, (const char32_t *)result.ptr) : env.Null();
|
|
562
|
-
case PrimitiveKind::Pointer:
|
|
563
|
-
case PrimitiveKind::Callback:
|
|
516
|
+
case PrimitiveKind::Pointer:
|
|
517
|
+
case PrimitiveKind::Callback: {
|
|
518
|
+
if (result.ptr) {
|
|
519
|
+
Napi::External<void> external = Napi::External<void>::New(env, result.ptr);
|
|
520
|
+
SetValueTag(external, func->ret.type->ref.marker);
|
|
521
|
+
|
|
522
|
+
return external;
|
|
523
|
+
} else {
|
|
524
|
+
return env.Null();
|
|
525
|
+
}
|
|
526
|
+
} break;
|
|
564
527
|
case PrimitiveKind::Record:
|
|
565
528
|
case PrimitiveKind::Union: {
|
|
566
529
|
const uint8_t *ptr = return_ptr ? (const uint8_t *)return_ptr
|
|
@@ -579,8 +542,12 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
|
|
|
579
542
|
K_UNREACHABLE();
|
|
580
543
|
}
|
|
581
544
|
|
|
582
|
-
void CallData::Relay(Size idx, uint8_t *
|
|
545
|
+
void CallData::Relay(Size idx, uint8_t *sp)
|
|
583
546
|
{
|
|
547
|
+
uint8_t *own_sp = sp;
|
|
548
|
+
uint8_t *caller_sp = sp + 128;
|
|
549
|
+
BackRegisters *out_reg = (BackRegisters *)(sp + 80);
|
|
550
|
+
|
|
584
551
|
if (env.IsExceptionPending()) [[unlikely]]
|
|
585
552
|
return;
|
|
586
553
|
|
|
@@ -747,21 +714,18 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
747
714
|
Napi::Value arg = str32 ? MakeStringFromUTF32(env, str32) : env.Null();
|
|
748
715
|
arguments.Append(arg);
|
|
749
716
|
} break;
|
|
750
|
-
case PrimitiveKind::Pointer:
|
|
717
|
+
case PrimitiveKind::Pointer:
|
|
718
|
+
case PrimitiveKind::Callback: {
|
|
751
719
|
void *ptr2 = *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++);
|
|
752
720
|
|
|
753
|
-
|
|
754
|
-
|
|
721
|
+
if (ptr2) {
|
|
722
|
+
Napi::External<void> external = Napi::External<void>::New(env, ptr2);
|
|
723
|
+
SetValueTag(external, param.type->ref.marker);
|
|
755
724
|
|
|
756
|
-
|
|
757
|
-
|
|
725
|
+
arguments.Append(external);
|
|
726
|
+
} else {
|
|
727
|
+
arguments.Append(env.Null());
|
|
758
728
|
}
|
|
759
|
-
} break;
|
|
760
|
-
case PrimitiveKind::Callback: {
|
|
761
|
-
void *ptr2 = *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++);
|
|
762
|
-
|
|
763
|
-
Napi::Value p = ptr2 ? WrapCallback(env, param.type->ref.type, ptr2) : env.Null();
|
|
764
|
-
arguments.Append(p);
|
|
765
729
|
|
|
766
730
|
if (param.type->dispose) {
|
|
767
731
|
param.type->dispose(env, param.type, ptr2);
|
|
@@ -849,58 +813,53 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
849
813
|
|
|
850
814
|
const TypeInfo *type = proto->ret.type;
|
|
851
815
|
|
|
852
|
-
// Make the call
|
|
853
|
-
|
|
854
|
-
if (switch_stack) {
|
|
855
|
-
ret = CallSwitchStack(&func, (size_t)arguments.len, arguments.data, old_sp, &mem->stack,
|
|
856
|
-
[](Napi::Function *func, size_t argc, napi_value *argv) { return (napi_value)func->Call(argv[0], argc - 1, argv + 1); });
|
|
857
|
-
} else {
|
|
858
|
-
ret = (napi_value)func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
|
|
859
|
-
}
|
|
860
|
-
Napi::Value value(env, ret);
|
|
816
|
+
// Make the call!
|
|
817
|
+
Napi::Value value = func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
|
|
861
818
|
|
|
862
819
|
if (env.IsExceptionPending()) [[unlikely]]
|
|
863
820
|
return;
|
|
864
821
|
|
|
865
822
|
#define RETURN_INTEGER_32(CType) \
|
|
866
823
|
do { \
|
|
867
|
-
|
|
868
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
824
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
869
825
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value for return value, expected number", GetValueType(instance, value)); \
|
|
870
826
|
return; \
|
|
871
827
|
} \
|
|
872
828
|
\
|
|
829
|
+
CType v = GetNumber<CType>(value); \
|
|
873
830
|
out_reg->r0 = (uint32_t)v; \
|
|
874
831
|
} while (false)
|
|
875
832
|
#define RETURN_INTEGER_32_SWAP(CType) \
|
|
876
833
|
do { \
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value for return value, expected number", GetValueType(instance, value)); \
|
|
834
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
835
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
880
836
|
return; \
|
|
881
837
|
} \
|
|
882
838
|
\
|
|
839
|
+
CType v = GetNumber<CType>(value); \
|
|
883
840
|
out_reg->r0 = (uint32_t)ReverseBytes(v); \
|
|
884
841
|
} while (false)
|
|
885
842
|
#define RETURN_INTEGER_64(CType) \
|
|
886
843
|
do { \
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value for return value, expected number", GetValueType(instance, value)); \
|
|
844
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
845
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
890
846
|
return; \
|
|
891
847
|
} \
|
|
892
848
|
\
|
|
849
|
+
CType v = GetNumber<CType>(value); \
|
|
850
|
+
\
|
|
893
851
|
out_reg->r0 = (uint32_t)((uint64_t)v >> 32); \
|
|
894
852
|
out_reg->r1 = (uint32_t)((uint64_t)v & 0xFFFFFFFFu); \
|
|
895
853
|
} while (false)
|
|
896
854
|
#define RETURN_INTEGER_64_SWAP(CType) \
|
|
897
855
|
do { \
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value for return value, expected number", GetValueType(instance, value)); \
|
|
856
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
857
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
901
858
|
return; \
|
|
902
859
|
} \
|
|
903
860
|
\
|
|
861
|
+
CType v = ReverseBytes(GetNumber<CType>(value)); \
|
|
862
|
+
\
|
|
904
863
|
out_reg->r0 = (uint32_t)((uint64_t)v >> 32); \
|
|
905
864
|
out_reg->r1 = (uint32_t)((uint64_t)v & 0xFFFFFFFFu); \
|
|
906
865
|
} while (false)
|
|
@@ -909,12 +868,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
909
868
|
switch (type->primitive) {
|
|
910
869
|
case PrimitiveKind::Void: {} break;
|
|
911
870
|
case PrimitiveKind::Bool: {
|
|
912
|
-
|
|
913
|
-
if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
|
|
871
|
+
if (!value.IsBoolean()) [[unlikely]] {
|
|
914
872
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
915
873
|
return;
|
|
916
874
|
}
|
|
917
875
|
|
|
876
|
+
bool b = value.As<Napi::Boolean>();
|
|
918
877
|
out_reg->r0 = (uint32_t)b;
|
|
919
878
|
} break;
|
|
920
879
|
case PrimitiveKind::Int8: { RETURN_INTEGER_32(int8_t); } break;
|
|
@@ -953,9 +912,24 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
953
912
|
out_reg->r0 = (uint32_t)str32;
|
|
954
913
|
} break;
|
|
955
914
|
case PrimitiveKind::Pointer: {
|
|
956
|
-
|
|
957
|
-
|
|
915
|
+
uint8_t *ptr;
|
|
916
|
+
|
|
917
|
+
if (CheckValueTag(value, type->ref.marker)) {
|
|
918
|
+
ptr = value.As<Napi::External<uint8_t>>().Data();
|
|
919
|
+
} else if (IsObject(value) && (type->ref.type->primitive == PrimitiveKind::Record ||
|
|
920
|
+
type->ref.type->primitive == PrimitiveKind::Union)) {
|
|
921
|
+
Napi::Object obj = value.As<Napi::Object>();
|
|
922
|
+
|
|
923
|
+
ptr = AllocHeap(type->ref.type->size, 16);
|
|
924
|
+
|
|
925
|
+
if (!PushObject(obj, type->ref.type, ptr))
|
|
926
|
+
return;
|
|
927
|
+
} else if (IsNullOrUndefined(value)) {
|
|
928
|
+
ptr = nullptr;
|
|
929
|
+
} else {
|
|
930
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
958
931
|
return;
|
|
932
|
+
}
|
|
959
933
|
|
|
960
934
|
out_reg->r0 = (uint32_t)ptr;
|
|
961
935
|
} break;
|
|
@@ -980,12 +954,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
980
954
|
} break;
|
|
981
955
|
case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
|
|
982
956
|
case PrimitiveKind::Float32: {
|
|
983
|
-
|
|
984
|
-
if (!TryNumber(value, &f)) [[unlikely]] {
|
|
957
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
985
958
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
986
959
|
return;
|
|
987
960
|
}
|
|
988
961
|
|
|
962
|
+
float f = GetNumber<float>(value);
|
|
989
963
|
#if defined(__ARM_PCS_VFP)
|
|
990
964
|
memcpy(&out_reg->d0, &f, 4);
|
|
991
965
|
#else
|
|
@@ -993,12 +967,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
993
967
|
#endif
|
|
994
968
|
} break;
|
|
995
969
|
case PrimitiveKind::Float64: {
|
|
996
|
-
|
|
997
|
-
if (!TryNumber(value, &d)) [[unlikely]] {
|
|
970
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
998
971
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
999
972
|
return;
|
|
1000
973
|
}
|
|
1001
974
|
|
|
975
|
+
double d = GetNumber<double>(value);
|
|
1002
976
|
#if defined(__ARM_PCS_VFP)
|
|
1003
977
|
out_reg->d0 = d;
|
|
1004
978
|
#else
|
|
@@ -1007,8 +981,21 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
1007
981
|
} break;
|
|
1008
982
|
case PrimitiveKind::Callback: {
|
|
1009
983
|
void *ptr;
|
|
1010
|
-
|
|
984
|
+
|
|
985
|
+
if (value.IsFunction()) {
|
|
986
|
+
Napi::Function func2 = value.As<Napi::Function>();
|
|
987
|
+
|
|
988
|
+
ptr = ReserveTrampoline(type->ref.proto, func2);
|
|
989
|
+
if (!ptr) [[unlikely]]
|
|
990
|
+
return;
|
|
991
|
+
} else if (CheckValueTag(value, type->ref.marker)) {
|
|
992
|
+
ptr = value.As<Napi::External<void>>().Data();
|
|
993
|
+
} else if (IsNullOrUndefined(value)) {
|
|
994
|
+
ptr = nullptr;
|
|
995
|
+
} else {
|
|
996
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
1011
997
|
return;
|
|
998
|
+
}
|
|
1012
999
|
|
|
1013
1000
|
out_reg->r0 = (uint32_t)ptr;
|
|
1014
1001
|
} break;
|
|
@@ -1024,6 +1011,16 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
1024
1011
|
err_guard.Disable();
|
|
1025
1012
|
}
|
|
1026
1013
|
|
|
1014
|
+
void *FindTrampolineStart()
|
|
1015
|
+
{
|
|
1016
|
+
return &Trampoline0;
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
void *FindTrampolineEnd()
|
|
1020
|
+
{
|
|
1021
|
+
return &TrampolineEnd;
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1027
1024
|
}
|
|
1028
1025
|
|
|
1029
1026
|
#endif
|