koffi 2.16.0-beta.2 → 2.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +66 -0
- package/build/koffi/darwin_arm64/koffi.node +0 -0
- package/build/koffi/darwin_x64/koffi.node +0 -0
- package/build/koffi/freebsd_arm64/koffi.node +0 -0
- package/build/koffi/freebsd_ia32/koffi.node +0 -0
- package/build/koffi/freebsd_x64/koffi.node +0 -0
- package/build/koffi/linux_arm64/koffi.node +0 -0
- package/build/koffi/linux_armhf/koffi.node +0 -0
- package/build/koffi/linux_ia32/koffi.node +0 -0
- package/build/koffi/linux_loong64/koffi.node +0 -0
- package/build/koffi/linux_riscv64d/koffi.node +0 -0
- package/build/koffi/linux_x64/koffi.node +0 -0
- package/build/koffi/musl_arm64/koffi.node +0 -0
- package/build/koffi/musl_x64/koffi.node +0 -0
- package/build/koffi/openbsd_ia32/koffi.node +0 -0
- package/build/koffi/openbsd_x64/koffi.node +0 -0
- package/build/koffi/win32_arm64/koffi.exp +0 -0
- package/build/koffi/win32_arm64/koffi.lib +0 -0
- package/build/koffi/win32_arm64/koffi.node +0 -0
- package/build/koffi/win32_ia32/koffi.exp +0 -0
- package/build/koffi/win32_ia32/koffi.lib +0 -0
- package/build/koffi/win32_ia32/koffi.node +0 -0
- package/build/koffi/win32_x64/koffi.exp +0 -0
- package/build/koffi/win32_x64/koffi.lib +0 -0
- package/build/koffi/win32_x64/koffi.node +0 -0
- package/index.d.ts +9 -11
- package/index.js +6 -9
- package/indirect.js +6 -9
- package/lib/native/base/base.cc +1 -6
- package/package.json +3 -3
- package/src/cnoke/assets/FindCNoke.cmake +27 -16
- package/src/cnoke/assets/toolchains.json +126 -0
- package/src/cnoke/cnoke.js +27 -33
- package/src/cnoke/src/builder.js +124 -63
- package/src/cnoke/src/tools.js +1 -5
- package/src/koffi/CMakeLists.txt +32 -21
- package/src/koffi/src/{abi/arm32.cc → abi_arm32.cc} +235 -246
- package/src/koffi/src/{abi/arm32_asm.S → abi_arm32_asm.S} +19 -15
- package/src/koffi/src/{abi/arm64.cc → abi_arm64.cc} +253 -300
- package/src/koffi/src/{abi/arm64_asm.S → abi_arm64_asm.S} +16 -10
- package/src/koffi/src/{abi/arm64_asm.asm → abi_arm64_asm.asm} +17 -10
- package/src/koffi/src/{abi/loong64_asm.S → abi_loong64_asm.S} +16 -10
- package/src/koffi/src/{abi/riscv64.cc → abi_riscv64.cc} +233 -244
- package/src/koffi/src/{abi/riscv64_asm.S → abi_riscv64_asm.S} +16 -10
- package/src/koffi/src/{abi/x64_sysv.cc → abi_x64_sysv.cc} +208 -220
- package/src/koffi/src/{abi/x64_sysv_asm.S → abi_x64_sysv_asm.S} +17 -10
- package/src/koffi/src/{abi/x64_win.cc → abi_x64_win.cc} +175 -230
- package/src/koffi/src/{abi/x64_win_asm.S → abi_x64_win_asm.S} +49 -27
- package/src/koffi/src/{abi/x64_win_asm.asm → abi_x64_win_asm.asm} +54 -27
- package/src/koffi/src/{abi/x86.cc → abi_x86.cc} +187 -252
- package/src/koffi/src/{abi/x86_asm.S → abi_x86_asm.S} +38 -21
- package/src/koffi/src/{abi/x86_asm.asm → abi_x86_asm.asm} +33 -16
- package/src/koffi/src/call.cc +475 -290
- package/src/koffi/src/call.hh +15 -18
- package/src/koffi/src/ffi.cc +195 -184
- package/src/koffi/src/ffi.hh +60 -16
- package/src/koffi/src/init.js +1 -0
- package/src/koffi/src/util.cc +113 -159
- package/src/koffi/src/util.hh +23 -74
- package/src/koffi/src/win32.cc +13 -0
- package/src/koffi/src/win32.hh +7 -0
- package/src/koffi/tools/write_trampolines.js +77 -0
- package/doc/README.md +0 -27
- package/doc/assets.ini +0 -24
- package/doc/build.sh +0 -9
- package/doc/develop.sh +0 -15
- package/doc/pages/404.md +0 -17
- package/doc/pages.ini +0 -86
- package/doc/static/highlight.js +0 -8
- package/doc/static/koffi.css +0 -11
- package/doc/static/koffi.png +0 -0
- package/doc/static/logo.webp +0 -0
- package/doc/static/perf_linux.png +0 -0
- package/doc/static/perf_windows.png +0 -0
- package/doc/static/print.css +0 -10
- package/doc/templates/code.html +0 -48
- package/doc/templates/page.html +0 -47
- package/src/koffi/cmake/raylib.cmake +0 -85
- package/src/koffi/cmake/sqlite3.cmake +0 -9
- package/src/koffi/examples/electron-builder/README.md +0 -11
- package/src/koffi/examples/electron-builder/package.json +0 -21
- package/src/koffi/examples/electron-builder/src/app.js +0 -20
- package/src/koffi/examples/electron-builder/src/index.html +0 -143
- package/src/koffi/examples/electron-builder/src/preload.js +0 -5
- package/src/koffi/examples/electron-forge/README.md +0 -25
- package/src/koffi/examples/electron-forge/forge.config.js +0 -63
- package/src/koffi/examples/electron-forge/package.json +0 -39
- package/src/koffi/examples/electron-forge/src/index.css +0 -7
- package/src/koffi/examples/electron-forge/src/index.html +0 -143
- package/src/koffi/examples/electron-forge/src/main.js +0 -52
- package/src/koffi/examples/electron-forge/src/preload.js +0 -5
- package/src/koffi/examples/electron-forge/src/renderer.js +0 -31
- package/src/koffi/examples/electron-forge/webpack.main.config.js +0 -11
- package/src/koffi/examples/electron-forge/webpack.renderer.config.js +0 -13
- package/src/koffi/examples/electron-forge/webpack.rules.js +0 -35
- package/src/koffi/examples/node-esbuild/README.md +0 -19
- package/src/koffi/examples/node-esbuild/index.js +0 -2
- package/src/koffi/examples/node-esbuild/package.json +0 -16
- package/src/koffi/examples/nwjs/README.md +0 -20
- package/src/koffi/examples/nwjs/package.json +0 -11
- package/src/koffi/examples/nwjs/src/index.html +0 -145
- package/src/koffi/examples/nwjs/src/package.json +0 -10
- package/src/koffi/examples/yao-pkg/README.md +0 -17
- package/src/koffi/examples/yao-pkg/index.js +0 -2
- package/src/koffi/examples/yao-pkg/package.json +0 -22
- package/src/koffi/src/primitives.inc +0 -39
- package/src/koffi/src/trampolines/armasm.inc +0 -32771
- package/src/koffi/src/trampolines/gnu.inc +0 -24577
- package/src/koffi/src/trampolines/masm32.inc +0 -32769
- package/src/koffi/src/trampolines/masm64.inc +0 -32769
- package/src/koffi/src/trampolines/prototypes.inc +0 -16388
- package/vendor/node-addon-api/CHANGELOG.md +0 -1272
- package/vendor/node-addon-api/CODE_OF_CONDUCT.md +0 -4
- package/vendor/node-addon-api/CONTRIBUTING.md +0 -203
- package/vendor/node-addon-api/appveyor.yml +0 -37
- package/vendor/node-addon-api/benchmark/README.md +0 -47
- package/vendor/node-addon-api/benchmark/binding.gyp +0 -25
- package/vendor/node-addon-api/benchmark/function_args.cc +0 -250
- package/vendor/node-addon-api/benchmark/function_args.js +0 -60
- package/vendor/node-addon-api/benchmark/index.js +0 -34
- package/vendor/node-addon-api/benchmark/property_descriptor.cc +0 -84
- package/vendor/node-addon-api/benchmark/property_descriptor.js +0 -38
- package/vendor/node-addon-api/common.gypi +0 -21
- package/vendor/node-addon-api/doc/README.md +0 -145
- package/vendor/node-addon-api/doc/addon.md +0 -163
- package/vendor/node-addon-api/doc/array.md +0 -81
- package/vendor/node-addon-api/doc/array_buffer.md +0 -165
- package/vendor/node-addon-api/doc/async_context.md +0 -86
- package/vendor/node-addon-api/doc/async_operations.md +0 -31
- package/vendor/node-addon-api/doc/async_worker.md +0 -428
- package/vendor/node-addon-api/doc/async_worker_variants.md +0 -578
- package/vendor/node-addon-api/doc/basic_env.md +0 -200
- package/vendor/node-addon-api/doc/bigint.md +0 -97
- package/vendor/node-addon-api/doc/boolean.md +0 -68
- package/vendor/node-addon-api/doc/buffer.md +0 -245
- package/vendor/node-addon-api/doc/callback_scope.md +0 -54
- package/vendor/node-addon-api/doc/callbackinfo.md +0 -97
- package/vendor/node-addon-api/doc/checker-tool.md +0 -32
- package/vendor/node-addon-api/doc/class_property_descriptor.md +0 -123
- package/vendor/node-addon-api/doc/cmake-js.md +0 -87
- package/vendor/node-addon-api/doc/contributing/creating_a_release.md +0 -95
- package/vendor/node-addon-api/doc/conversion-tool.md +0 -28
- package/vendor/node-addon-api/doc/dataview.md +0 -248
- package/vendor/node-addon-api/doc/date.md +0 -68
- package/vendor/node-addon-api/doc/env.md +0 -87
- package/vendor/node-addon-api/doc/error.md +0 -120
- package/vendor/node-addon-api/doc/error_handling.md +0 -266
- package/vendor/node-addon-api/doc/escapable_handle_scope.md +0 -80
- package/vendor/node-addon-api/doc/external.md +0 -79
- package/vendor/node-addon-api/doc/external_buffer.md +0 -18
- package/vendor/node-addon-api/doc/finalization.md +0 -153
- package/vendor/node-addon-api/doc/function.md +0 -402
- package/vendor/node-addon-api/doc/function_reference.md +0 -238
- package/vendor/node-addon-api/doc/generator.md +0 -13
- package/vendor/node-addon-api/doc/handle_scope.md +0 -77
- package/vendor/node-addon-api/doc/hierarchy.md +0 -95
- package/vendor/node-addon-api/doc/instance_wrap.md +0 -408
- package/vendor/node-addon-api/doc/maybe.md +0 -76
- package/vendor/node-addon-api/doc/memory_management.md +0 -27
- package/vendor/node-addon-api/doc/name.md +0 -29
- package/vendor/node-addon-api/doc/node-gyp.md +0 -82
- package/vendor/node-addon-api/doc/number.md +0 -163
- package/vendor/node-addon-api/doc/object.md +0 -411
- package/vendor/node-addon-api/doc/object_lifetime_management.md +0 -83
- package/vendor/node-addon-api/doc/object_reference.md +0 -117
- package/vendor/node-addon-api/doc/object_wrap.md +0 -604
- package/vendor/node-addon-api/doc/prebuild_tools.md +0 -16
- package/vendor/node-addon-api/doc/promises.md +0 -130
- package/vendor/node-addon-api/doc/property_descriptor.md +0 -286
- package/vendor/node-addon-api/doc/propertylvalue.md +0 -50
- package/vendor/node-addon-api/doc/range_error.md +0 -59
- package/vendor/node-addon-api/doc/reference.md +0 -113
- package/vendor/node-addon-api/doc/setup.md +0 -115
- package/vendor/node-addon-api/doc/string.md +0 -93
- package/vendor/node-addon-api/doc/symbol.md +0 -61
- package/vendor/node-addon-api/doc/syntax_error.md +0 -66
- package/vendor/node-addon-api/doc/threadsafe.md +0 -121
- package/vendor/node-addon-api/doc/threadsafe_function.md +0 -290
- package/vendor/node-addon-api/doc/type_error.md +0 -59
- package/vendor/node-addon-api/doc/type_taggable.md +0 -40
- package/vendor/node-addon-api/doc/typed_array.md +0 -78
- package/vendor/node-addon-api/doc/typed_array_of.md +0 -137
- package/vendor/node-addon-api/doc/typed_threadsafe_function.md +0 -306
- package/vendor/node-addon-api/doc/value.md +0 -368
- package/vendor/node-addon-api/doc/version_management.md +0 -43
- package/vendor/node-addon-api/eslint.config.js +0 -5
- package/vendor/node-addon-api/except.gypi +0 -25
- package/vendor/node-addon-api/index.js +0 -14
- package/vendor/node-addon-api/node_addon_api.gyp +0 -42
- package/vendor/node-addon-api/node_api.gyp +0 -9
- package/vendor/node-addon-api/noexcept.gypi +0 -26
- package/vendor/node-addon-api/nothing.c +0 -0
- package/vendor/node-addon-api/package-support.json +0 -21
- package/vendor/node-addon-api/package.json +0 -480
- package/vendor/node-addon-api/release-please-config.json +0 -15
- package/vendor/node-addon-api/test/README.md +0 -91
- package/vendor/node-addon-api/test/addon.cc +0 -44
- package/vendor/node-addon-api/test/addon.js +0 -7
- package/vendor/node-addon-api/test/addon_build/index.js +0 -49
- package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +0 -18
- package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +0 -63
- package/vendor/node-addon-api/test/addon_build/tpl/index.js +0 -9
- package/vendor/node-addon-api/test/addon_build/tpl/package.json +0 -11
- package/vendor/node-addon-api/test/addon_data.cc +0 -98
- package/vendor/node-addon-api/test/addon_data.js +0 -24
- package/vendor/node-addon-api/test/array_buffer.cc +0 -243
- package/vendor/node-addon-api/test/array_buffer.js +0 -70
- package/vendor/node-addon-api/test/async_context.cc +0 -36
- package/vendor/node-addon-api/test/async_context.js +0 -122
- package/vendor/node-addon-api/test/async_progress_queue_worker.cc +0 -248
- package/vendor/node-addon-api/test/async_progress_queue_worker.js +0 -180
- package/vendor/node-addon-api/test/async_progress_worker.cc +0 -357
- package/vendor/node-addon-api/test/async_progress_worker.js +0 -200
- package/vendor/node-addon-api/test/async_worker.cc +0 -341
- package/vendor/node-addon-api/test/async_worker.js +0 -264
- package/vendor/node-addon-api/test/async_worker_nocallback.js +0 -19
- package/vendor/node-addon-api/test/async_worker_persistent.cc +0 -63
- package/vendor/node-addon-api/test/async_worker_persistent.js +0 -24
- package/vendor/node-addon-api/test/basic_types/array.cc +0 -40
- package/vendor/node-addon-api/test/basic_types/array.js +0 -34
- package/vendor/node-addon-api/test/basic_types/boolean.cc +0 -40
- package/vendor/node-addon-api/test/basic_types/boolean.js +0 -34
- package/vendor/node-addon-api/test/basic_types/number.cc +0 -105
- package/vendor/node-addon-api/test/basic_types/number.js +0 -115
- package/vendor/node-addon-api/test/basic_types/value.cc +0 -177
- package/vendor/node-addon-api/test/basic_types/value.js +0 -173
- package/vendor/node-addon-api/test/bigint.cc +0 -91
- package/vendor/node-addon-api/test/bigint.js +0 -53
- package/vendor/node-addon-api/test/binding-swallowexcept.cc +0 -12
- package/vendor/node-addon-api/test/binding.cc +0 -200
- package/vendor/node-addon-api/test/binding.gyp +0 -160
- package/vendor/node-addon-api/test/buffer.cc +0 -185
- package/vendor/node-addon-api/test/buffer.h +0 -26
- package/vendor/node-addon-api/test/buffer.js +0 -150
- package/vendor/node-addon-api/test/buffer_new_or_copy-inl.h +0 -68
- package/vendor/node-addon-api/test/buffer_no_external.cc +0 -24
- package/vendor/node-addon-api/test/callbackInfo.cc +0 -27
- package/vendor/node-addon-api/test/callbackInfo.js +0 -9
- package/vendor/node-addon-api/test/callbackscope.cc +0 -39
- package/vendor/node-addon-api/test/callbackscope.js +0 -49
- package/vendor/node-addon-api/test/child_processes/addon.js +0 -11
- package/vendor/node-addon-api/test/child_processes/addon_data.js +0 -24
- package/vendor/node-addon-api/test/child_processes/objectwrap_function.js +0 -22
- package/vendor/node-addon-api/test/child_processes/threadsafe_function_exception.js +0 -33
- package/vendor/node-addon-api/test/child_processes/typed_threadsafe_function_exception.js +0 -19
- package/vendor/node-addon-api/test/common/index.js +0 -246
- package/vendor/node-addon-api/test/common/test_helper.h +0 -71
- package/vendor/node-addon-api/test/dataview/dataview.cc +0 -48
- package/vendor/node-addon-api/test/dataview/dataview.js +0 -35
- package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +0 -115
- package/vendor/node-addon-api/test/dataview/dataview_read_write.js +0 -92
- package/vendor/node-addon-api/test/date.cc +0 -45
- package/vendor/node-addon-api/test/date.js +0 -18
- package/vendor/node-addon-api/test/env_cleanup.cc +0 -100
- package/vendor/node-addon-api/test/env_cleanup.js +0 -55
- package/vendor/node-addon-api/test/env_misc.cc +0 -25
- package/vendor/node-addon-api/test/env_misc.js +0 -12
- package/vendor/node-addon-api/test/error.cc +0 -436
- package/vendor/node-addon-api/test/error.js +0 -111
- package/vendor/node-addon-api/test/error_handling_for_primitives.cc +0 -13
- package/vendor/node-addon-api/test/error_handling_for_primitives.js +0 -29
- package/vendor/node-addon-api/test/error_terminating_environment.js +0 -99
- package/vendor/node-addon-api/test/except_all.cc +0 -22
- package/vendor/node-addon-api/test/except_all.js +0 -14
- package/vendor/node-addon-api/test/exports.js +0 -19
- package/vendor/node-addon-api/test/external.cc +0 -85
- package/vendor/node-addon-api/test/external.js +0 -85
- package/vendor/node-addon-api/test/finalizer_order.cc +0 -152
- package/vendor/node-addon-api/test/finalizer_order.js +0 -98
- package/vendor/node-addon-api/test/function.cc +0 -338
- package/vendor/node-addon-api/test/function.js +0 -137
- package/vendor/node-addon-api/test/function_reference.cc +0 -204
- package/vendor/node-addon-api/test/function_reference.js +0 -157
- package/vendor/node-addon-api/test/globalObject/global_object.cc +0 -61
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +0 -31
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +0 -58
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +0 -40
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +0 -56
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +0 -28
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +0 -46
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +0 -31
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +0 -56
- package/vendor/node-addon-api/test/handlescope.cc +0 -86
- package/vendor/node-addon-api/test/handlescope.js +0 -16
- package/vendor/node-addon-api/test/index.js +0 -160
- package/vendor/node-addon-api/test/maybe/check.cc +0 -69
- package/vendor/node-addon-api/test/maybe/index.js +0 -50
- package/vendor/node-addon-api/test/memory_management.cc +0 -18
- package/vendor/node-addon-api/test/memory_management.js +0 -9
- package/vendor/node-addon-api/test/movable_callbacks.cc +0 -23
- package/vendor/node-addon-api/test/movable_callbacks.js +0 -21
- package/vendor/node-addon-api/test/name.cc +0 -110
- package/vendor/node-addon-api/test/name.js +0 -59
- package/vendor/node-addon-api/test/napi_child.js +0 -14
- package/vendor/node-addon-api/test/object/delete_property.cc +0 -38
- package/vendor/node-addon-api/test/object/delete_property.js +0 -41
- package/vendor/node-addon-api/test/object/finalizer.cc +0 -30
- package/vendor/node-addon-api/test/object/finalizer.js +0 -28
- package/vendor/node-addon-api/test/object/get_property.cc +0 -34
- package/vendor/node-addon-api/test/object/get_property.js +0 -40
- package/vendor/node-addon-api/test/object/has_own_property.cc +0 -34
- package/vendor/node-addon-api/test/object/has_own_property.js +0 -34
- package/vendor/node-addon-api/test/object/has_property.cc +0 -38
- package/vendor/node-addon-api/test/object/has_property.js +0 -37
- package/vendor/node-addon-api/test/object/object.cc +0 -430
- package/vendor/node-addon-api/test/object/object.js +0 -218
- package/vendor/node-addon-api/test/object/object_deprecated.cc +0 -70
- package/vendor/node-addon-api/test/object/object_deprecated.js +0 -42
- package/vendor/node-addon-api/test/object/object_freeze_seal.cc +0 -25
- package/vendor/node-addon-api/test/object/object_freeze_seal.js +0 -61
- package/vendor/node-addon-api/test/object/set_property.cc +0 -45
- package/vendor/node-addon-api/test/object/set_property.js +0 -30
- package/vendor/node-addon-api/test/object/subscript_operator.cc +0 -58
- package/vendor/node-addon-api/test/object/subscript_operator.js +0 -17
- package/vendor/node-addon-api/test/object_reference.cc +0 -417
- package/vendor/node-addon-api/test/object_reference.js +0 -262
- package/vendor/node-addon-api/test/objectwrap.cc +0 -295
- package/vendor/node-addon-api/test/objectwrap.js +0 -309
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +0 -26
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +0 -18
- package/vendor/node-addon-api/test/objectwrap_function.cc +0 -43
- package/vendor/node-addon-api/test/objectwrap_function.js +0 -6
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +0 -30
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +0 -13
- package/vendor/node-addon-api/test/objectwrap_removewrap.cc +0 -45
- package/vendor/node-addon-api/test/objectwrap_removewrap.js +0 -32
- package/vendor/node-addon-api/test/objectwrap_worker_thread.js +0 -20
- package/vendor/node-addon-api/test/promise.cc +0 -111
- package/vendor/node-addon-api/test/promise.js +0 -43
- package/vendor/node-addon-api/test/reference.cc +0 -78
- package/vendor/node-addon-api/test/reference.js +0 -20
- package/vendor/node-addon-api/test/require_basic_finalizers/index.js +0 -38
- package/vendor/node-addon-api/test/require_basic_finalizers/tpl/addon.cc +0 -12
- package/vendor/node-addon-api/test/require_basic_finalizers/tpl/binding.gyp +0 -48
- package/vendor/node-addon-api/test/require_basic_finalizers/tpl/index.js +0 -3
- package/vendor/node-addon-api/test/require_basic_finalizers/tpl/package.json +0 -11
- package/vendor/node-addon-api/test/run_script.cc +0 -56
- package/vendor/node-addon-api/test/run_script.js +0 -45
- package/vendor/node-addon-api/test/symbol.cc +0 -79
- package/vendor/node-addon-api/test/symbol.js +0 -66
- package/vendor/node-addon-api/test/testUtil.js +0 -54
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +0 -230
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +0 -225
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +0 -155
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +0 -13
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_exception.cc +0 -50
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_exception.js +0 -20
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +0 -125
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +0 -14
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +0 -27
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +0 -7
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +0 -240
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +0 -59
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +0 -55
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +0 -98
- package/vendor/node-addon-api/test/thunking_manual.cc +0 -127
- package/vendor/node-addon-api/test/thunking_manual.js +0 -16
- package/vendor/node-addon-api/test/type_taggable.cc +0 -66
- package/vendor/node-addon-api/test/type_taggable.js +0 -59
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +0 -215
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +0 -188
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +0 -120
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +0 -14
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_exception.cc +0 -39
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_exception.js +0 -13
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +0 -127
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +0 -14
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +0 -32
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +0 -8
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +0 -237
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +0 -59
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +0 -67
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +0 -98
- package/vendor/node-addon-api/test/typedarray-bigint.js +0 -58
- package/vendor/node-addon-api/test/typedarray.cc +0 -413
- package/vendor/node-addon-api/test/typedarray.js +0 -103
- package/vendor/node-addon-api/test/value_type_cast.cc +0 -60
- package/vendor/node-addon-api/test/value_type_cast.js +0 -106
- package/vendor/node-addon-api/test/version_management.cc +0 -28
- package/vendor/node-addon-api/test/version_management.js +0 -29
- package/vendor/node-addon-api/tools/README.md +0 -73
- package/vendor/node-addon-api/tools/check-napi.js +0 -99
- package/vendor/node-addon-api/tools/clang-format.js +0 -71
- package/vendor/node-addon-api/tools/conversion.js +0 -301
- package/vendor/node-addon-api/unit-test/README.md +0 -28
- package/vendor/node-addon-api/unit-test/binding-file-template.js +0 -39
- package/vendor/node-addon-api/unit-test/binding.gyp +0 -72
- package/vendor/node-addon-api/unit-test/exceptions.js +0 -32
- package/vendor/node-addon-api/unit-test/generate-binding-cc.js +0 -61
- package/vendor/node-addon-api/unit-test/injectTestParams.js +0 -101
- package/vendor/node-addon-api/unit-test/listOfTestModules.js +0 -88
- package/vendor/node-addon-api/unit-test/matchModules.js +0 -65
- package/vendor/node-addon-api/unit-test/setup.js +0 -13
- package/vendor/node-addon-api/unit-test/spawnTask.js +0 -26
- package/vendor/node-addon-api/unit-test/test.js +0 -30
- package/vendor/node-api-headers/CHANGELOG.md +0 -130
- package/vendor/node-api-headers/CODE_OF_CONDUCT.md +0 -4
- package/vendor/node-api-headers/CONTRIBUTING.md +0 -32
- package/vendor/node-api-headers/CREATING_A_RELEASE.md +0 -68
- package/vendor/node-api-headers/index.js +0 -17
- package/vendor/node-api-headers/lib/clang-utils.js +0 -50
- package/vendor/node-api-headers/lib/parse-utils.js +0 -92
- package/vendor/node-api-headers/package.json +0 -59
- package/vendor/node-api-headers/release-please-config.json +0 -12
- package/vendor/node-api-headers/scripts/update-headers.js +0 -246
- package/vendor/node-api-headers/scripts/write-symbols.js +0 -154
- package/vendor/node-api-headers/scripts/write-win32-def.js +0 -52
- package/vendor/node-api-headers/symbols.js +0 -257
- package/vendor/node-api-headers/test/parse-utils.js +0 -21
- /package/doc/{pages/benchmarks.md → benchmarks.md} +0 -0
- /package/doc/{pages/callbacks.md → callbacks.md} +0 -0
- /package/doc/{pages/contribute.md → contribute.md} +0 -0
- /package/doc/{pages/functions.md → functions.md} +0 -0
- /package/doc/{pages/index.md → index.md} +0 -0
- /package/doc/{pages/input.md → input.md} +0 -0
- /package/doc/{pages/migration.md → migration.md} +0 -0
- /package/doc/{pages/misc.md → misc.md} +0 -0
- /package/doc/{pages/output.md → output.md} +0 -0
- /package/doc/{pages/packaging.md → packaging.md} +0 -0
- /package/doc/{pages/platforms.md → platforms.md} +0 -0
- /package/doc/{pages/pointers.md → pointers.md} +0 -0
- /package/doc/{pages/start.md → start.md} +0 -0
- /package/doc/{pages/unions.md → unions.md} +0 -0
- /package/doc/{pages/variables.md → variables.md} +0 -0
- /package/src/koffi/src/{abi/loong64.cc → abi_loong64.cc} +0 -0
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
#if defined(__aarch64__) || 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
|
#if defined(_WIN32)
|
|
11
|
-
#include "
|
|
11
|
+
#include "win32.hh"
|
|
12
12
|
#endif
|
|
13
13
|
|
|
14
14
|
#include <napi.h>
|
|
@@ -48,9 +48,10 @@ extern "C" X0X1Ret ForwardCallXGG(const void *func, uint8_t *sp, uint8_t **out_o
|
|
|
48
48
|
extern "C" float ForwardCallXF(const void *func, uint8_t *sp, uint8_t **out_old_sp);
|
|
49
49
|
extern "C" HfaRet ForwardCallXDDDD(const void *func, uint8_t *sp, uint8_t **out_old_sp);
|
|
50
50
|
|
|
51
|
-
extern "C"
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
extern "C" uint8_t Trampoline0;
|
|
52
|
+
extern "C" uint8_t TrampolineEnd;
|
|
53
|
+
extern "C" void *FindTrampolineStart();
|
|
54
|
+
extern "C" void *FindTrampolineEnd();
|
|
54
55
|
|
|
55
56
|
static HfaInfo IsHFA(const TypeInfo *type)
|
|
56
57
|
{
|
|
@@ -247,45 +248,22 @@ bool AnalyseFunction(Napi::Env, InstanceData *, FunctionInfo *func)
|
|
|
247
248
|
|
|
248
249
|
bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
|
|
249
250
|
{
|
|
250
|
-
uint64_t *
|
|
251
|
-
uint64_t *
|
|
252
|
-
uint64_t *
|
|
251
|
+
uint64_t *args_ptr = nullptr;
|
|
252
|
+
uint64_t *gpr_ptr = nullptr;
|
|
253
|
+
uint64_t *vec_ptr = nullptr;
|
|
253
254
|
|
|
254
|
-
|
|
255
|
+
// Return through registers unless it's too big
|
|
256
|
+
if (!AllocStack(func->args_size, 16, &args_ptr)) [[unlikely]]
|
|
257
|
+
return false;
|
|
258
|
+
if (!AllocStack(8 * 8, 8, &vec_ptr)) [[unlikely]]
|
|
259
|
+
return false;
|
|
260
|
+
if (!AllocStack(9 * 8, 8, &gpr_ptr)) [[unlikely]]
|
|
255
261
|
return false;
|
|
256
262
|
if (func->ret.use_memory) {
|
|
257
263
|
return_ptr = AllocHeap(func->ret.type->size, 16);
|
|
258
264
|
gpr_ptr[8] = (uint64_t)return_ptr;
|
|
259
265
|
}
|
|
260
266
|
|
|
261
|
-
Size i = -1;
|
|
262
|
-
|
|
263
|
-
#if defined(__GNUC__) || defined(__clang__)
|
|
264
|
-
static const void *const DispatchTable[] = {
|
|
265
|
-
#define PRIMITIVE(Name) && Name,
|
|
266
|
-
#include "../primitives.inc"
|
|
267
|
-
};
|
|
268
|
-
|
|
269
|
-
#define LOOP
|
|
270
|
-
#define CASE(Primitive) \
|
|
271
|
-
do { \
|
|
272
|
-
PrimitiveKind next = func->primitives[++i]; \
|
|
273
|
-
goto *DispatchTable[(int)next]; \
|
|
274
|
-
} while (false); \
|
|
275
|
-
Primitive:
|
|
276
|
-
#define OR(Primitive) \
|
|
277
|
-
Primitive:
|
|
278
|
-
#else
|
|
279
|
-
#define LOOP \
|
|
280
|
-
while (++i < func->parameters.len) \
|
|
281
|
-
switch (func->primitives[i])
|
|
282
|
-
#define CASE(Primitive) \
|
|
283
|
-
break; \
|
|
284
|
-
case PrimitiveKind::Primitive:
|
|
285
|
-
#define OR(Primitive) \
|
|
286
|
-
case PrimitiveKind::Primitive:
|
|
287
|
-
#endif
|
|
288
|
-
|
|
289
267
|
#if defined(_M_ARM64EC)
|
|
290
268
|
if (func->variadic) {
|
|
291
269
|
gpr_ptr[4] = (uint64_t)args_ptr;
|
|
@@ -301,15 +279,13 @@ bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
|
|
|
301
279
|
#if defined(__APPLE__)
|
|
302
280
|
#define PUSH_INTEGER(CType) \
|
|
303
281
|
do { \
|
|
304
|
-
|
|
305
|
-
Napi::Value value = info[param.offset]; \
|
|
306
|
-
\
|
|
307
|
-
CType v; \
|
|
308
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
282
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
309
283
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
310
284
|
return false; \
|
|
311
285
|
} \
|
|
312
286
|
\
|
|
287
|
+
CType v = GetNumber<CType>(value); \
|
|
288
|
+
\
|
|
313
289
|
if (param.gpr_count) [[likely]] { \
|
|
314
290
|
*(gpr_ptr++) = (uint64_t)v; \
|
|
315
291
|
} else { \
|
|
@@ -320,15 +296,13 @@ bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
|
|
|
320
296
|
} while (false)
|
|
321
297
|
#define PUSH_INTEGER_SWAP(CType) \
|
|
322
298
|
do { \
|
|
323
|
-
|
|
324
|
-
Napi::Value value = info[param.offset]; \
|
|
325
|
-
\
|
|
326
|
-
CType v; \
|
|
327
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
299
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
328
300
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
329
301
|
return false; \
|
|
330
302
|
} \
|
|
331
303
|
\
|
|
304
|
+
CType v = GetNumber<CType>(value); \
|
|
305
|
+
\
|
|
332
306
|
if (param.gpr_count) [[likely]] { \
|
|
333
307
|
*(gpr_ptr++) = (uint64_t)ReverseBytes(v); \
|
|
334
308
|
} else { \
|
|
@@ -340,259 +314,228 @@ bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
|
|
|
340
314
|
#else
|
|
341
315
|
#define PUSH_INTEGER(CType) \
|
|
342
316
|
do { \
|
|
343
|
-
|
|
344
|
-
Napi::Value value = info[param.offset]; \
|
|
345
|
-
\
|
|
346
|
-
CType v; \
|
|
347
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
317
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
348
318
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
349
319
|
return false; \
|
|
350
320
|
} \
|
|
351
321
|
\
|
|
322
|
+
CType v = GetNumber<CType>(value); \
|
|
352
323
|
*((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint64_t)v; \
|
|
353
324
|
} while (false)
|
|
354
325
|
#define PUSH_INTEGER_SWAP(CType) \
|
|
355
326
|
do { \
|
|
356
|
-
|
|
357
|
-
Napi::Value value = info[param.offset]; \
|
|
358
|
-
\
|
|
359
|
-
CType v; \
|
|
360
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
327
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
361
328
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
362
329
|
return false; \
|
|
363
330
|
} \
|
|
364
331
|
\
|
|
332
|
+
CType v = GetNumber<CType>(value); \
|
|
365
333
|
*((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint64_t)ReverseBytes(v); \
|
|
366
334
|
} while (false)
|
|
367
335
|
#endif
|
|
368
336
|
|
|
369
337
|
// Push arguments
|
|
370
|
-
|
|
371
|
-
|
|
338
|
+
for (Size i = 0; i < func->parameters.len; i++) {
|
|
339
|
+
const ParameterInfo ¶m = func->parameters[i];
|
|
340
|
+
K_ASSERT(param.directions >= 1 && param.directions <= 3);
|
|
372
341
|
|
|
373
|
-
|
|
374
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
375
|
-
Napi::Value value = info[param.offset];
|
|
342
|
+
Napi::Value value = info[param.offset];
|
|
376
343
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
344
|
+
switch (param.type->primitive) {
|
|
345
|
+
case PrimitiveKind::Void: { K_UNREACHABLE(); } break;
|
|
346
|
+
|
|
347
|
+
case PrimitiveKind::Bool: {
|
|
348
|
+
if (!value.IsBoolean()) [[unlikely]] {
|
|
349
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
350
|
+
return false;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
bool b = value.As<Napi::Boolean>();
|
|
382
354
|
|
|
383
355
|
#if defined(__APPLE__)
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
356
|
+
if (param.gpr_count) [[likely]] {
|
|
357
|
+
*(gpr_ptr++) = (uint64_t)b;
|
|
358
|
+
} else {
|
|
359
|
+
args_ptr = AlignUp(args_ptr, param.variadic ? 8 : 1);
|
|
360
|
+
*(uint8_t *)args_ptr = b;
|
|
361
|
+
args_ptr = (uint64_t *)((uint8_t *)args_ptr + 1);
|
|
362
|
+
}
|
|
390
363
|
#else
|
|
391
|
-
|
|
364
|
+
*((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint64_t)b;
|
|
392
365
|
#endif
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
Napi::Value value = info[param.offset];
|
|
413
|
-
|
|
414
|
-
const char *str;
|
|
415
|
-
if (!PushString(value, param.directions, &str)) [[unlikely]]
|
|
416
|
-
return false;
|
|
366
|
+
} break;
|
|
367
|
+
case PrimitiveKind::Int8: { PUSH_INTEGER(int8_t); } break;
|
|
368
|
+
case PrimitiveKind::UInt8: { PUSH_INTEGER(uint8_t); } break;
|
|
369
|
+
case PrimitiveKind::Int16: { PUSH_INTEGER(int16_t); } break;
|
|
370
|
+
case PrimitiveKind::Int16S: { PUSH_INTEGER_SWAP(int16_t); } break;
|
|
371
|
+
case PrimitiveKind::UInt16: { PUSH_INTEGER(uint16_t); } break;
|
|
372
|
+
case PrimitiveKind::UInt16S: { PUSH_INTEGER_SWAP(uint16_t); } break;
|
|
373
|
+
case PrimitiveKind::Int32: { PUSH_INTEGER(int32_t); } break;
|
|
374
|
+
case PrimitiveKind::Int32S: { PUSH_INTEGER_SWAP(int32_t); } break;
|
|
375
|
+
case PrimitiveKind::UInt32: { PUSH_INTEGER(uint32_t); } break;
|
|
376
|
+
case PrimitiveKind::UInt32S: { PUSH_INTEGER_SWAP(uint32_t); } break;
|
|
377
|
+
case PrimitiveKind::Int64: { PUSH_INTEGER(int64_t); } break;
|
|
378
|
+
case PrimitiveKind::Int64S: { PUSH_INTEGER_SWAP(int64_t); } break;
|
|
379
|
+
case PrimitiveKind::UInt64: { PUSH_INTEGER(uint64_t); } break;
|
|
380
|
+
case PrimitiveKind::UInt64S: { PUSH_INTEGER_SWAP(uint64_t); } break;
|
|
381
|
+
case PrimitiveKind::String: {
|
|
382
|
+
const char *str;
|
|
383
|
+
if (!PushString(value, param.directions, &str)) [[unlikely]]
|
|
384
|
+
return false;
|
|
417
385
|
|
|
418
386
|
#if defined(__APPLE__)
|
|
419
|
-
|
|
387
|
+
args_ptr = param.gpr_count ? args_ptr : AlignUp(args_ptr, 8);
|
|
420
388
|
#endif
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
const char16_t *str16;
|
|
428
|
-
if (!PushString16(value, param.directions, &str16)) [[unlikely]]
|
|
429
|
-
return false;
|
|
389
|
+
*(const char **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str;
|
|
390
|
+
} break;
|
|
391
|
+
case PrimitiveKind::String16: {
|
|
392
|
+
const char16_t *str16;
|
|
393
|
+
if (!PushString16(value, param.directions, &str16)) [[unlikely]]
|
|
394
|
+
return false;
|
|
430
395
|
|
|
431
396
|
#if defined(__APPLE__)
|
|
432
|
-
|
|
397
|
+
args_ptr = param.gpr_count ? args_ptr : AlignUp(args_ptr, 8);
|
|
433
398
|
#endif
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
const char32_t *str32;
|
|
441
|
-
if (!PushString32(value, param.directions, &str32)) [[unlikely]]
|
|
442
|
-
return false;
|
|
399
|
+
*(const char16_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str16;
|
|
400
|
+
} break;
|
|
401
|
+
case PrimitiveKind::String32: {
|
|
402
|
+
const char32_t *str32;
|
|
403
|
+
if (!PushString32(value, param.directions, &str32)) [[unlikely]]
|
|
404
|
+
return false;
|
|
443
405
|
|
|
444
406
|
#if defined(__APPLE__)
|
|
445
|
-
|
|
407
|
+
args_ptr = param.gpr_count ? args_ptr : AlignUp(args_ptr, 8);
|
|
446
408
|
#endif
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
void *ptr;
|
|
455
|
-
if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
|
|
456
|
-
return false;
|
|
409
|
+
*(const char32_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str32;
|
|
410
|
+
} break;
|
|
411
|
+
case PrimitiveKind::Pointer: {
|
|
412
|
+
void *ptr;
|
|
413
|
+
if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
|
|
414
|
+
return false;
|
|
457
415
|
|
|
458
416
|
#if defined(__APPLE__)
|
|
459
|
-
|
|
417
|
+
args_ptr = param.gpr_count ? args_ptr : AlignUp(args_ptr, 8);
|
|
460
418
|
#endif
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected object", GetValueType(instance, value));
|
|
470
|
-
return false;
|
|
471
|
-
}
|
|
419
|
+
*(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
|
|
420
|
+
} break;
|
|
421
|
+
case PrimitiveKind::Record:
|
|
422
|
+
case PrimitiveKind::Union: {
|
|
423
|
+
if (!IsObject(value)) [[unlikely]] {
|
|
424
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected object", GetValueType(instance, value));
|
|
425
|
+
return false;
|
|
426
|
+
}
|
|
472
427
|
|
|
473
|
-
|
|
428
|
+
Napi::Object obj = value.As<Napi::Object>();
|
|
474
429
|
|
|
475
|
-
|
|
476
|
-
|
|
430
|
+
if (param.vec_count) { // HFA
|
|
431
|
+
uint8_t *ptr = (uint8_t *)vec_ptr;
|
|
477
432
|
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
433
|
+
if (!PushObject(obj, param.type, ptr))
|
|
434
|
+
return false;
|
|
435
|
+
ExpandFloats(ptr, param.vec_count, param.vec_bytes);
|
|
481
436
|
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
437
|
+
vec_ptr += param.vec_count;
|
|
438
|
+
} else if (!param.use_memory) {
|
|
439
|
+
if (param.gpr_count) {
|
|
440
|
+
K_ASSERT(param.type->align <= 8);
|
|
486
441
|
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
442
|
+
if (!PushObject(obj, param.type, (uint8_t *)gpr_ptr))
|
|
443
|
+
return false;
|
|
444
|
+
gpr_ptr += param.gpr_count;
|
|
445
|
+
} else if (param.type->size) {
|
|
491
446
|
#if defined(__APPLE__)
|
|
492
|
-
|
|
447
|
+
args_ptr = AlignUp(args_ptr, 8);
|
|
493
448
|
#endif
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
449
|
+
if (!PushObject(obj, param.type, (uint8_t *)args_ptr))
|
|
450
|
+
return false;
|
|
451
|
+
args_ptr += (param.type->size + 7) / 8;
|
|
452
|
+
}
|
|
453
|
+
} else {
|
|
454
|
+
uint8_t *ptr = AllocHeap(param.type->size, 16);
|
|
500
455
|
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
456
|
+
if (param.gpr_count) {
|
|
457
|
+
K_ASSERT(param.gpr_count == 1);
|
|
458
|
+
K_ASSERT(param.vec_count == 0);
|
|
504
459
|
|
|
505
|
-
|
|
506
|
-
|
|
460
|
+
*(uint8_t **)(gpr_ptr++) = ptr;
|
|
461
|
+
} else {
|
|
507
462
|
#if defined(__APPLE__)
|
|
508
|
-
|
|
463
|
+
args_ptr = AlignUp(args_ptr, 8);
|
|
509
464
|
#endif
|
|
510
|
-
|
|
511
|
-
|
|
465
|
+
*(uint8_t **)(args_ptr++) = ptr;
|
|
466
|
+
}
|
|
512
467
|
|
|
513
|
-
|
|
468
|
+
if (!PushObject(obj, param.type, ptr))
|
|
469
|
+
return false;
|
|
470
|
+
}
|
|
471
|
+
} break;
|
|
472
|
+
case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
|
|
473
|
+
case PrimitiveKind::Float32: {
|
|
474
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
475
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
514
476
|
return false;
|
|
515
|
-
|
|
516
|
-
};
|
|
517
|
-
CASE(Array) { K_UNREACHABLE(); };
|
|
518
|
-
|
|
519
|
-
CASE(Float32) {
|
|
520
|
-
const ParameterInfo ¶m = func->parameters[i];
|
|
521
|
-
Napi::Value value = info[param.offset];
|
|
477
|
+
}
|
|
522
478
|
|
|
523
|
-
|
|
524
|
-
if (!TryNumber(value, &f)) [[unlikely]] {
|
|
525
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
526
|
-
return false;
|
|
527
|
-
}
|
|
479
|
+
float f = GetNumber<float>(value);
|
|
528
480
|
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
481
|
+
if (param.vec_count) [[likely]] {
|
|
482
|
+
memset((uint8_t *)vec_ptr + 4, 0, 4);
|
|
483
|
+
*(float *)(vec_ptr++) = f;
|
|
532
484
|
#if defined(_WIN32)
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
485
|
+
} else if (param.gpr_count) {
|
|
486
|
+
memset((uint8_t *)gpr_ptr + 4, 0, 4);
|
|
487
|
+
*(float *)(gpr_ptr++) = f;
|
|
536
488
|
#endif
|
|
537
|
-
|
|
489
|
+
} else {
|
|
538
490
|
#if defined(__APPLE__)
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
491
|
+
args_ptr = AlignUp(args_ptr, param.variadic ? 8 : 4);
|
|
492
|
+
*(float *)args_ptr = f;
|
|
493
|
+
args_ptr = (uint64_t *)((uint8_t *)args_ptr + 4);
|
|
542
494
|
#else
|
|
543
|
-
|
|
544
|
-
|
|
495
|
+
memset((uint8_t *)args_ptr + 4, 0, 4);
|
|
496
|
+
*(float *)(args_ptr++) = f;
|
|
545
497
|
#endif
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
498
|
+
}
|
|
499
|
+
} break;
|
|
500
|
+
case PrimitiveKind::Float64: {
|
|
501
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
502
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
503
|
+
return false;
|
|
504
|
+
}
|
|
551
505
|
|
|
552
|
-
|
|
553
|
-
if (!TryNumber(value, &d)) [[unlikely]] {
|
|
554
|
-
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
555
|
-
return false;
|
|
556
|
-
}
|
|
506
|
+
double d = GetNumber<double>(value);
|
|
557
507
|
|
|
558
|
-
|
|
559
|
-
|
|
508
|
+
if (param.vec_count) [[likely]] {
|
|
509
|
+
*(double *)(vec_ptr++) = d;
|
|
560
510
|
#if defined(_WIN32)
|
|
561
|
-
|
|
562
|
-
|
|
511
|
+
} else if (param.gpr_count) {
|
|
512
|
+
*(double *)(gpr_ptr++) = d;
|
|
563
513
|
#endif
|
|
564
|
-
|
|
514
|
+
} else {
|
|
565
515
|
#if defined(__APPLE__)
|
|
566
|
-
|
|
516
|
+
args_ptr = AlignUp(args_ptr, 8);
|
|
567
517
|
#endif
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
void *ptr;
|
|
577
|
-
if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
|
|
578
|
-
return false;
|
|
518
|
+
*(double *)(args_ptr++) = d;
|
|
519
|
+
}
|
|
520
|
+
} break;
|
|
521
|
+
case PrimitiveKind::Callback: {
|
|
522
|
+
void *ptr;
|
|
523
|
+
if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
|
|
524
|
+
return false;
|
|
579
525
|
|
|
580
526
|
#if defined(__APPLE__)
|
|
581
|
-
|
|
527
|
+
args_ptr = param.gpr_count ? args_ptr : AlignUp(args_ptr, 8);
|
|
582
528
|
#endif
|
|
583
|
-
|
|
584
|
-
|
|
529
|
+
*(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
|
|
530
|
+
} break;
|
|
585
531
|
|
|
586
|
-
|
|
532
|
+
case PrimitiveKind::Prototype: { K_UNREACHABLE(); } break;
|
|
533
|
+
}
|
|
587
534
|
}
|
|
588
535
|
|
|
589
536
|
#undef PUSH_INTEGER_SWAP
|
|
590
537
|
#undef PUSH_INTEGER
|
|
591
538
|
|
|
592
|
-
#undef OR
|
|
593
|
-
#undef CASE
|
|
594
|
-
#undef LOOP
|
|
595
|
-
|
|
596
539
|
new_sp = mem->stack.end();
|
|
597
540
|
|
|
598
541
|
return true;
|
|
@@ -710,8 +653,17 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
|
|
|
710
653
|
case PrimitiveKind::String: return result.ptr ? Napi::String::New(env, (const char *)result.ptr) : env.Null();
|
|
711
654
|
case PrimitiveKind::String16: return result.ptr ? Napi::String::New(env, (const char16_t *)result.ptr) : env.Null();
|
|
712
655
|
case PrimitiveKind::String32: return result.ptr ? MakeStringFromUTF32(env, (const char32_t *)result.ptr) : env.Null();
|
|
713
|
-
case PrimitiveKind::Pointer:
|
|
714
|
-
case PrimitiveKind::Callback:
|
|
656
|
+
case PrimitiveKind::Pointer:
|
|
657
|
+
case PrimitiveKind::Callback: {
|
|
658
|
+
if (result.ptr) {
|
|
659
|
+
Napi::External<void> external = Napi::External<void>::New(env, result.ptr);
|
|
660
|
+
SetValueTag(external, func->ret.type->ref.marker);
|
|
661
|
+
|
|
662
|
+
return external;
|
|
663
|
+
} else {
|
|
664
|
+
return env.Null();
|
|
665
|
+
}
|
|
666
|
+
} break;
|
|
715
667
|
case PrimitiveKind::Record:
|
|
716
668
|
case PrimitiveKind::Union: {
|
|
717
669
|
if (func->ret.vec_count) { // HFA
|
|
@@ -739,31 +691,14 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
|
|
|
739
691
|
K_UNREACHABLE();
|
|
740
692
|
}
|
|
741
693
|
|
|
742
|
-
void CallData::Relay(Size idx, uint8_t *
|
|
694
|
+
void CallData::Relay(Size idx, uint8_t *sp)
|
|
743
695
|
{
|
|
744
|
-
if (env.IsExceptionPending()) [[unlikely]]
|
|
745
|
-
return;
|
|
746
|
-
|
|
747
|
-
#if defined(_WIN32)
|
|
748
|
-
TEB *teb = GetTEB();
|
|
749
|
-
|
|
750
|
-
// Restore previous stack limits at the end
|
|
751
|
-
K_DEFER_C(base = teb->StackBase,
|
|
752
|
-
limit = teb->StackLimit,
|
|
753
|
-
dealloc = teb->DeallocationStack) {
|
|
754
|
-
teb->StackBase = base;
|
|
755
|
-
teb->StackLimit = limit;
|
|
756
|
-
teb->DeallocationStack = dealloc;
|
|
757
|
-
};
|
|
758
|
-
|
|
759
|
-
// Adjust stack limits so SEH works correctly
|
|
760
|
-
teb->StackBase = instance->main_stack_max;
|
|
761
|
-
teb->StackLimit = instance->main_stack_min;
|
|
762
|
-
teb->DeallocationStack = instance->main_stack_min;
|
|
763
|
-
#endif
|
|
764
|
-
|
|
765
696
|
const TrampolineInfo &trampoline = shared.trampolines[idx];
|
|
766
697
|
|
|
698
|
+
uint8_t *own_sp = sp;
|
|
699
|
+
uint8_t *caller_sp = sp + 208;
|
|
700
|
+
BackRegisters *out_reg = (BackRegisters *)(sp + 136);
|
|
701
|
+
|
|
767
702
|
const FunctionInfo *proto = trampoline.proto;
|
|
768
703
|
Napi::Function func = trampoline.func.Value();
|
|
769
704
|
|
|
@@ -775,11 +710,6 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
775
710
|
|
|
776
711
|
K_DEFER_N(err_guard) { memset(out_reg, 0, K_SIZE(*out_reg)); };
|
|
777
712
|
|
|
778
|
-
if (trampoline.generation >= 0 && trampoline.generation != (int32_t)mem->generation) [[unlikely]] {
|
|
779
|
-
ThrowError<Napi::Error>(env, "Cannot use non-registered callback beyond FFI call");
|
|
780
|
-
return;
|
|
781
|
-
}
|
|
782
|
-
|
|
783
713
|
LocalArray<napi_value, MaxParameters + 1> arguments;
|
|
784
714
|
|
|
785
715
|
arguments.Append(!trampoline.recv.IsEmpty() ? trampoline.recv.Value() : env.Undefined());
|
|
@@ -1074,29 +1004,22 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
1074
1004
|
Napi::Value arg = str32 ? MakeStringFromUTF32(env, str32) : env.Null();
|
|
1075
1005
|
arguments.Append(arg);
|
|
1076
1006
|
} break;
|
|
1077
|
-
case PrimitiveKind::Pointer:
|
|
1007
|
+
case PrimitiveKind::Pointer:
|
|
1008
|
+
case PrimitiveKind::Callback: {
|
|
1078
1009
|
#if defined(__APPLE__)
|
|
1079
1010
|
args_ptr = AlignUp(args_ptr, 8);
|
|
1080
1011
|
#endif
|
|
1081
1012
|
|
|
1082
1013
|
void *ptr2 = *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++);
|
|
1083
1014
|
|
|
1084
|
-
|
|
1085
|
-
|
|
1015
|
+
if (ptr2) {
|
|
1016
|
+
Napi::External<void> external = Napi::External<void>::New(env, ptr2);
|
|
1017
|
+
SetValueTag(external, param.type->ref.marker);
|
|
1086
1018
|
|
|
1087
|
-
|
|
1088
|
-
|
|
1019
|
+
arguments.Append(external);
|
|
1020
|
+
} else {
|
|
1021
|
+
arguments.Append(env.Null());
|
|
1089
1022
|
}
|
|
1090
|
-
} break;
|
|
1091
|
-
case PrimitiveKind::Callback: {
|
|
1092
|
-
#if defined(__APPLE__)
|
|
1093
|
-
args_ptr = AlignUp(args_ptr, 8);
|
|
1094
|
-
#endif
|
|
1095
|
-
|
|
1096
|
-
void *ptr2 = *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++);
|
|
1097
|
-
|
|
1098
|
-
Napi::Value p = ptr2 ? WrapCallback(env, param.type->ref.type, ptr2) : env.Null();
|
|
1099
|
-
arguments.Append(p);
|
|
1100
1023
|
|
|
1101
1024
|
if (param.type->dispose) {
|
|
1102
1025
|
param.type->dispose(env, param.type, ptr2);
|
|
@@ -1188,37 +1111,30 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
1188
1111
|
|
|
1189
1112
|
const TypeInfo *type = proto->ret.type;
|
|
1190
1113
|
|
|
1191
|
-
// Make the call
|
|
1192
|
-
|
|
1193
|
-
if (switch_stack) {
|
|
1194
|
-
ret = CallSwitchStack(&func, (size_t)arguments.len, arguments.data, old_sp, &mem->stack,
|
|
1195
|
-
[](Napi::Function *func, size_t argc, napi_value *argv) { return (napi_value)func->Call(argv[0], argc - 1, argv + 1); });
|
|
1196
|
-
} else {
|
|
1197
|
-
ret = (napi_value)func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
|
|
1198
|
-
}
|
|
1199
|
-
Napi::Value value(env, ret);
|
|
1114
|
+
// Make the call!
|
|
1115
|
+
Napi::Value value = func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
|
|
1200
1116
|
|
|
1201
1117
|
if (env.IsExceptionPending()) [[unlikely]]
|
|
1202
1118
|
return;
|
|
1203
1119
|
|
|
1204
1120
|
#define RETURN_INTEGER(CType) \
|
|
1205
1121
|
do { \
|
|
1206
|
-
|
|
1207
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
1122
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
1208
1123
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
1209
1124
|
return; \
|
|
1210
1125
|
} \
|
|
1211
1126
|
\
|
|
1127
|
+
CType v = GetNumber<CType>(value); \
|
|
1212
1128
|
out_reg->x0 = (uint64_t)v; \
|
|
1213
1129
|
} while (false)
|
|
1214
1130
|
#define RETURN_INTEGER_SWAP(CType) \
|
|
1215
1131
|
do { \
|
|
1216
|
-
|
|
1217
|
-
if (!TryNumber(value, &v)) [[unlikely]] { \
|
|
1132
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
|
|
1218
1133
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
|
|
1219
1134
|
return; \
|
|
1220
1135
|
} \
|
|
1221
1136
|
\
|
|
1137
|
+
CType v = GetNumber<CType>(value); \
|
|
1222
1138
|
out_reg->x0 = (uint64_t)ReverseBytes(v); \
|
|
1223
1139
|
} while (false)
|
|
1224
1140
|
|
|
@@ -1226,12 +1142,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
1226
1142
|
switch (type->primitive) {
|
|
1227
1143
|
case PrimitiveKind::Void: {} break;
|
|
1228
1144
|
case PrimitiveKind::Bool: {
|
|
1229
|
-
|
|
1230
|
-
if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
|
|
1145
|
+
if (!value.IsBoolean()) [[unlikely]] {
|
|
1231
1146
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
|
|
1232
1147
|
return;
|
|
1233
1148
|
}
|
|
1234
1149
|
|
|
1150
|
+
bool b = value.As<Napi::Boolean>();
|
|
1235
1151
|
out_reg->x0 = (uint64_t)b;
|
|
1236
1152
|
} break;
|
|
1237
1153
|
case PrimitiveKind::Int8: { RETURN_INTEGER(int8_t); } break;
|
|
@@ -1270,9 +1186,24 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
1270
1186
|
out_reg->x0 = (uint64_t)str32;
|
|
1271
1187
|
} break;
|
|
1272
1188
|
case PrimitiveKind::Pointer: {
|
|
1273
|
-
|
|
1274
|
-
|
|
1189
|
+
uint8_t *ptr;
|
|
1190
|
+
|
|
1191
|
+
if (CheckValueTag(value, type->ref.marker)) {
|
|
1192
|
+
ptr = value.As<Napi::External<uint8_t>>().Data();
|
|
1193
|
+
} else if (IsObject(value) && (type->ref.type->primitive == PrimitiveKind::Record ||
|
|
1194
|
+
type->ref.type->primitive == PrimitiveKind::Union)) {
|
|
1195
|
+
Napi::Object obj = value.As<Napi::Object>();
|
|
1196
|
+
|
|
1197
|
+
ptr = AllocHeap(type->ref.type->size, 16);
|
|
1198
|
+
|
|
1199
|
+
if (!PushObject(obj, type->ref.type, ptr))
|
|
1200
|
+
return;
|
|
1201
|
+
} else if (IsNullOrUndefined(value)) {
|
|
1202
|
+
ptr = nullptr;
|
|
1203
|
+
} else {
|
|
1204
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
1275
1205
|
return;
|
|
1206
|
+
}
|
|
1276
1207
|
|
|
1277
1208
|
out_reg->x0 = (uint64_t)ptr;
|
|
1278
1209
|
} break;
|
|
@@ -1300,30 +1231,42 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
1300
1231
|
} break;
|
|
1301
1232
|
case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
|
|
1302
1233
|
case PrimitiveKind::Float32: {
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
if (!TryNumber(value, &f)) [[unlikely]] {
|
|
1234
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
1306
1235
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
1307
1236
|
return;
|
|
1308
1237
|
}
|
|
1309
1238
|
|
|
1239
|
+
float f = GetNumber<float>(value);
|
|
1240
|
+
|
|
1310
1241
|
memset((uint8_t *)&out_reg->d0 + 4, 0, 4);
|
|
1311
1242
|
memcpy(&out_reg->d0, &f, 4);
|
|
1312
1243
|
} break;
|
|
1313
1244
|
case PrimitiveKind::Float64: {
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
if (!TryNumber(value, &d)) [[unlikely]] {
|
|
1245
|
+
if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
|
|
1317
1246
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
|
|
1318
1247
|
return;
|
|
1319
1248
|
}
|
|
1320
1249
|
|
|
1250
|
+
double d = GetNumber<double>(value);
|
|
1321
1251
|
out_reg->d0 = d;
|
|
1322
1252
|
} break;
|
|
1323
1253
|
case PrimitiveKind::Callback: {
|
|
1324
1254
|
void *ptr;
|
|
1325
|
-
|
|
1255
|
+
|
|
1256
|
+
if (value.IsFunction()) {
|
|
1257
|
+
Napi::Function func2 = value.As<Napi::Function>();
|
|
1258
|
+
|
|
1259
|
+
ptr = ReserveTrampoline(type->ref.proto, func2);
|
|
1260
|
+
if (!ptr) [[unlikely]]
|
|
1261
|
+
return;
|
|
1262
|
+
} else if (CheckValueTag(value, type->ref.marker)) {
|
|
1263
|
+
ptr = value.As<Napi::External<void>>().Data();
|
|
1264
|
+
} else if (IsNullOrUndefined(value)) {
|
|
1265
|
+
ptr = nullptr;
|
|
1266
|
+
} else {
|
|
1267
|
+
ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
|
|
1326
1268
|
return;
|
|
1269
|
+
}
|
|
1327
1270
|
|
|
1328
1271
|
out_reg->x0 = (uint64_t)ptr;
|
|
1329
1272
|
} break;
|
|
@@ -1337,6 +1280,16 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
|
|
|
1337
1280
|
err_guard.Disable();
|
|
1338
1281
|
}
|
|
1339
1282
|
|
|
1283
|
+
void *FindTrampolineStart()
|
|
1284
|
+
{
|
|
1285
|
+
return &Trampoline0;
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1288
|
+
void *FindTrampolineEnd()
|
|
1289
|
+
{
|
|
1290
|
+
return &TrampolineEnd;
|
|
1291
|
+
}
|
|
1292
|
+
|
|
1340
1293
|
}
|
|
1341
1294
|
|
|
1342
1295
|
#endif
|