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.
Files changed (425) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/build/koffi/darwin_arm64/koffi.node +0 -0
  3. package/build/koffi/darwin_x64/koffi.node +0 -0
  4. package/build/koffi/freebsd_arm64/koffi.node +0 -0
  5. package/build/koffi/freebsd_ia32/koffi.node +0 -0
  6. package/build/koffi/freebsd_x64/koffi.node +0 -0
  7. package/build/koffi/linux_arm64/koffi.node +0 -0
  8. package/build/koffi/linux_armhf/koffi.node +0 -0
  9. package/build/koffi/linux_ia32/koffi.node +0 -0
  10. package/build/koffi/linux_loong64/koffi.node +0 -0
  11. package/build/koffi/linux_riscv64d/koffi.node +0 -0
  12. package/build/koffi/linux_x64/koffi.node +0 -0
  13. package/build/koffi/musl_arm64/koffi.node +0 -0
  14. package/build/koffi/musl_x64/koffi.node +0 -0
  15. package/build/koffi/openbsd_ia32/koffi.node +0 -0
  16. package/build/koffi/openbsd_x64/koffi.node +0 -0
  17. package/build/koffi/win32_arm64/koffi.exp +0 -0
  18. package/build/koffi/win32_arm64/koffi.lib +0 -0
  19. package/build/koffi/win32_arm64/koffi.node +0 -0
  20. package/build/koffi/win32_ia32/koffi.exp +0 -0
  21. package/build/koffi/win32_ia32/koffi.lib +0 -0
  22. package/build/koffi/win32_ia32/koffi.node +0 -0
  23. package/build/koffi/win32_x64/koffi.exp +0 -0
  24. package/build/koffi/win32_x64/koffi.lib +0 -0
  25. package/build/koffi/win32_x64/koffi.node +0 -0
  26. package/index.d.ts +9 -11
  27. package/index.js +6 -9
  28. package/indirect.js +6 -9
  29. package/lib/native/base/base.cc +1 -6
  30. package/package.json +3 -3
  31. package/src/cnoke/assets/FindCNoke.cmake +27 -16
  32. package/src/cnoke/assets/toolchains.json +126 -0
  33. package/src/cnoke/cnoke.js +27 -33
  34. package/src/cnoke/src/builder.js +124 -63
  35. package/src/cnoke/src/tools.js +1 -5
  36. package/src/koffi/CMakeLists.txt +32 -21
  37. package/src/koffi/src/{abi/arm32.cc → abi_arm32.cc} +235 -246
  38. package/src/koffi/src/{abi/arm32_asm.S → abi_arm32_asm.S} +19 -15
  39. package/src/koffi/src/{abi/arm64.cc → abi_arm64.cc} +253 -300
  40. package/src/koffi/src/{abi/arm64_asm.S → abi_arm64_asm.S} +16 -10
  41. package/src/koffi/src/{abi/arm64_asm.asm → abi_arm64_asm.asm} +17 -10
  42. package/src/koffi/src/{abi/loong64_asm.S → abi_loong64_asm.S} +16 -10
  43. package/src/koffi/src/{abi/riscv64.cc → abi_riscv64.cc} +233 -244
  44. package/src/koffi/src/{abi/riscv64_asm.S → abi_riscv64_asm.S} +16 -10
  45. package/src/koffi/src/{abi/x64_sysv.cc → abi_x64_sysv.cc} +208 -220
  46. package/src/koffi/src/{abi/x64_sysv_asm.S → abi_x64_sysv_asm.S} +17 -10
  47. package/src/koffi/src/{abi/x64_win.cc → abi_x64_win.cc} +175 -230
  48. package/src/koffi/src/{abi/x64_win_asm.S → abi_x64_win_asm.S} +49 -27
  49. package/src/koffi/src/{abi/x64_win_asm.asm → abi_x64_win_asm.asm} +54 -27
  50. package/src/koffi/src/{abi/x86.cc → abi_x86.cc} +187 -252
  51. package/src/koffi/src/{abi/x86_asm.S → abi_x86_asm.S} +38 -21
  52. package/src/koffi/src/{abi/x86_asm.asm → abi_x86_asm.asm} +33 -16
  53. package/src/koffi/src/call.cc +475 -290
  54. package/src/koffi/src/call.hh +15 -18
  55. package/src/koffi/src/ffi.cc +195 -184
  56. package/src/koffi/src/ffi.hh +60 -16
  57. package/src/koffi/src/init.js +1 -0
  58. package/src/koffi/src/util.cc +113 -159
  59. package/src/koffi/src/util.hh +23 -74
  60. package/src/koffi/src/win32.cc +13 -0
  61. package/src/koffi/src/win32.hh +7 -0
  62. package/src/koffi/tools/write_trampolines.js +77 -0
  63. package/doc/README.md +0 -27
  64. package/doc/assets.ini +0 -24
  65. package/doc/build.sh +0 -9
  66. package/doc/develop.sh +0 -15
  67. package/doc/pages/404.md +0 -17
  68. package/doc/pages.ini +0 -86
  69. package/doc/static/highlight.js +0 -8
  70. package/doc/static/koffi.css +0 -11
  71. package/doc/static/koffi.png +0 -0
  72. package/doc/static/logo.webp +0 -0
  73. package/doc/static/perf_linux.png +0 -0
  74. package/doc/static/perf_windows.png +0 -0
  75. package/doc/static/print.css +0 -10
  76. package/doc/templates/code.html +0 -48
  77. package/doc/templates/page.html +0 -47
  78. package/src/koffi/cmake/raylib.cmake +0 -85
  79. package/src/koffi/cmake/sqlite3.cmake +0 -9
  80. package/src/koffi/examples/electron-builder/README.md +0 -11
  81. package/src/koffi/examples/electron-builder/package.json +0 -21
  82. package/src/koffi/examples/electron-builder/src/app.js +0 -20
  83. package/src/koffi/examples/electron-builder/src/index.html +0 -143
  84. package/src/koffi/examples/electron-builder/src/preload.js +0 -5
  85. package/src/koffi/examples/electron-forge/README.md +0 -25
  86. package/src/koffi/examples/electron-forge/forge.config.js +0 -63
  87. package/src/koffi/examples/electron-forge/package.json +0 -39
  88. package/src/koffi/examples/electron-forge/src/index.css +0 -7
  89. package/src/koffi/examples/electron-forge/src/index.html +0 -143
  90. package/src/koffi/examples/electron-forge/src/main.js +0 -52
  91. package/src/koffi/examples/electron-forge/src/preload.js +0 -5
  92. package/src/koffi/examples/electron-forge/src/renderer.js +0 -31
  93. package/src/koffi/examples/electron-forge/webpack.main.config.js +0 -11
  94. package/src/koffi/examples/electron-forge/webpack.renderer.config.js +0 -13
  95. package/src/koffi/examples/electron-forge/webpack.rules.js +0 -35
  96. package/src/koffi/examples/node-esbuild/README.md +0 -19
  97. package/src/koffi/examples/node-esbuild/index.js +0 -2
  98. package/src/koffi/examples/node-esbuild/package.json +0 -16
  99. package/src/koffi/examples/nwjs/README.md +0 -20
  100. package/src/koffi/examples/nwjs/package.json +0 -11
  101. package/src/koffi/examples/nwjs/src/index.html +0 -145
  102. package/src/koffi/examples/nwjs/src/package.json +0 -10
  103. package/src/koffi/examples/yao-pkg/README.md +0 -17
  104. package/src/koffi/examples/yao-pkg/index.js +0 -2
  105. package/src/koffi/examples/yao-pkg/package.json +0 -22
  106. package/src/koffi/src/primitives.inc +0 -39
  107. package/src/koffi/src/trampolines/armasm.inc +0 -32771
  108. package/src/koffi/src/trampolines/gnu.inc +0 -24577
  109. package/src/koffi/src/trampolines/masm32.inc +0 -32769
  110. package/src/koffi/src/trampolines/masm64.inc +0 -32769
  111. package/src/koffi/src/trampolines/prototypes.inc +0 -16388
  112. package/vendor/node-addon-api/CHANGELOG.md +0 -1272
  113. package/vendor/node-addon-api/CODE_OF_CONDUCT.md +0 -4
  114. package/vendor/node-addon-api/CONTRIBUTING.md +0 -203
  115. package/vendor/node-addon-api/appveyor.yml +0 -37
  116. package/vendor/node-addon-api/benchmark/README.md +0 -47
  117. package/vendor/node-addon-api/benchmark/binding.gyp +0 -25
  118. package/vendor/node-addon-api/benchmark/function_args.cc +0 -250
  119. package/vendor/node-addon-api/benchmark/function_args.js +0 -60
  120. package/vendor/node-addon-api/benchmark/index.js +0 -34
  121. package/vendor/node-addon-api/benchmark/property_descriptor.cc +0 -84
  122. package/vendor/node-addon-api/benchmark/property_descriptor.js +0 -38
  123. package/vendor/node-addon-api/common.gypi +0 -21
  124. package/vendor/node-addon-api/doc/README.md +0 -145
  125. package/vendor/node-addon-api/doc/addon.md +0 -163
  126. package/vendor/node-addon-api/doc/array.md +0 -81
  127. package/vendor/node-addon-api/doc/array_buffer.md +0 -165
  128. package/vendor/node-addon-api/doc/async_context.md +0 -86
  129. package/vendor/node-addon-api/doc/async_operations.md +0 -31
  130. package/vendor/node-addon-api/doc/async_worker.md +0 -428
  131. package/vendor/node-addon-api/doc/async_worker_variants.md +0 -578
  132. package/vendor/node-addon-api/doc/basic_env.md +0 -200
  133. package/vendor/node-addon-api/doc/bigint.md +0 -97
  134. package/vendor/node-addon-api/doc/boolean.md +0 -68
  135. package/vendor/node-addon-api/doc/buffer.md +0 -245
  136. package/vendor/node-addon-api/doc/callback_scope.md +0 -54
  137. package/vendor/node-addon-api/doc/callbackinfo.md +0 -97
  138. package/vendor/node-addon-api/doc/checker-tool.md +0 -32
  139. package/vendor/node-addon-api/doc/class_property_descriptor.md +0 -123
  140. package/vendor/node-addon-api/doc/cmake-js.md +0 -87
  141. package/vendor/node-addon-api/doc/contributing/creating_a_release.md +0 -95
  142. package/vendor/node-addon-api/doc/conversion-tool.md +0 -28
  143. package/vendor/node-addon-api/doc/dataview.md +0 -248
  144. package/vendor/node-addon-api/doc/date.md +0 -68
  145. package/vendor/node-addon-api/doc/env.md +0 -87
  146. package/vendor/node-addon-api/doc/error.md +0 -120
  147. package/vendor/node-addon-api/doc/error_handling.md +0 -266
  148. package/vendor/node-addon-api/doc/escapable_handle_scope.md +0 -80
  149. package/vendor/node-addon-api/doc/external.md +0 -79
  150. package/vendor/node-addon-api/doc/external_buffer.md +0 -18
  151. package/vendor/node-addon-api/doc/finalization.md +0 -153
  152. package/vendor/node-addon-api/doc/function.md +0 -402
  153. package/vendor/node-addon-api/doc/function_reference.md +0 -238
  154. package/vendor/node-addon-api/doc/generator.md +0 -13
  155. package/vendor/node-addon-api/doc/handle_scope.md +0 -77
  156. package/vendor/node-addon-api/doc/hierarchy.md +0 -95
  157. package/vendor/node-addon-api/doc/instance_wrap.md +0 -408
  158. package/vendor/node-addon-api/doc/maybe.md +0 -76
  159. package/vendor/node-addon-api/doc/memory_management.md +0 -27
  160. package/vendor/node-addon-api/doc/name.md +0 -29
  161. package/vendor/node-addon-api/doc/node-gyp.md +0 -82
  162. package/vendor/node-addon-api/doc/number.md +0 -163
  163. package/vendor/node-addon-api/doc/object.md +0 -411
  164. package/vendor/node-addon-api/doc/object_lifetime_management.md +0 -83
  165. package/vendor/node-addon-api/doc/object_reference.md +0 -117
  166. package/vendor/node-addon-api/doc/object_wrap.md +0 -604
  167. package/vendor/node-addon-api/doc/prebuild_tools.md +0 -16
  168. package/vendor/node-addon-api/doc/promises.md +0 -130
  169. package/vendor/node-addon-api/doc/property_descriptor.md +0 -286
  170. package/vendor/node-addon-api/doc/propertylvalue.md +0 -50
  171. package/vendor/node-addon-api/doc/range_error.md +0 -59
  172. package/vendor/node-addon-api/doc/reference.md +0 -113
  173. package/vendor/node-addon-api/doc/setup.md +0 -115
  174. package/vendor/node-addon-api/doc/string.md +0 -93
  175. package/vendor/node-addon-api/doc/symbol.md +0 -61
  176. package/vendor/node-addon-api/doc/syntax_error.md +0 -66
  177. package/vendor/node-addon-api/doc/threadsafe.md +0 -121
  178. package/vendor/node-addon-api/doc/threadsafe_function.md +0 -290
  179. package/vendor/node-addon-api/doc/type_error.md +0 -59
  180. package/vendor/node-addon-api/doc/type_taggable.md +0 -40
  181. package/vendor/node-addon-api/doc/typed_array.md +0 -78
  182. package/vendor/node-addon-api/doc/typed_array_of.md +0 -137
  183. package/vendor/node-addon-api/doc/typed_threadsafe_function.md +0 -306
  184. package/vendor/node-addon-api/doc/value.md +0 -368
  185. package/vendor/node-addon-api/doc/version_management.md +0 -43
  186. package/vendor/node-addon-api/eslint.config.js +0 -5
  187. package/vendor/node-addon-api/except.gypi +0 -25
  188. package/vendor/node-addon-api/index.js +0 -14
  189. package/vendor/node-addon-api/node_addon_api.gyp +0 -42
  190. package/vendor/node-addon-api/node_api.gyp +0 -9
  191. package/vendor/node-addon-api/noexcept.gypi +0 -26
  192. package/vendor/node-addon-api/nothing.c +0 -0
  193. package/vendor/node-addon-api/package-support.json +0 -21
  194. package/vendor/node-addon-api/package.json +0 -480
  195. package/vendor/node-addon-api/release-please-config.json +0 -15
  196. package/vendor/node-addon-api/test/README.md +0 -91
  197. package/vendor/node-addon-api/test/addon.cc +0 -44
  198. package/vendor/node-addon-api/test/addon.js +0 -7
  199. package/vendor/node-addon-api/test/addon_build/index.js +0 -49
  200. package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +0 -18
  201. package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +0 -63
  202. package/vendor/node-addon-api/test/addon_build/tpl/index.js +0 -9
  203. package/vendor/node-addon-api/test/addon_build/tpl/package.json +0 -11
  204. package/vendor/node-addon-api/test/addon_data.cc +0 -98
  205. package/vendor/node-addon-api/test/addon_data.js +0 -24
  206. package/vendor/node-addon-api/test/array_buffer.cc +0 -243
  207. package/vendor/node-addon-api/test/array_buffer.js +0 -70
  208. package/vendor/node-addon-api/test/async_context.cc +0 -36
  209. package/vendor/node-addon-api/test/async_context.js +0 -122
  210. package/vendor/node-addon-api/test/async_progress_queue_worker.cc +0 -248
  211. package/vendor/node-addon-api/test/async_progress_queue_worker.js +0 -180
  212. package/vendor/node-addon-api/test/async_progress_worker.cc +0 -357
  213. package/vendor/node-addon-api/test/async_progress_worker.js +0 -200
  214. package/vendor/node-addon-api/test/async_worker.cc +0 -341
  215. package/vendor/node-addon-api/test/async_worker.js +0 -264
  216. package/vendor/node-addon-api/test/async_worker_nocallback.js +0 -19
  217. package/vendor/node-addon-api/test/async_worker_persistent.cc +0 -63
  218. package/vendor/node-addon-api/test/async_worker_persistent.js +0 -24
  219. package/vendor/node-addon-api/test/basic_types/array.cc +0 -40
  220. package/vendor/node-addon-api/test/basic_types/array.js +0 -34
  221. package/vendor/node-addon-api/test/basic_types/boolean.cc +0 -40
  222. package/vendor/node-addon-api/test/basic_types/boolean.js +0 -34
  223. package/vendor/node-addon-api/test/basic_types/number.cc +0 -105
  224. package/vendor/node-addon-api/test/basic_types/number.js +0 -115
  225. package/vendor/node-addon-api/test/basic_types/value.cc +0 -177
  226. package/vendor/node-addon-api/test/basic_types/value.js +0 -173
  227. package/vendor/node-addon-api/test/bigint.cc +0 -91
  228. package/vendor/node-addon-api/test/bigint.js +0 -53
  229. package/vendor/node-addon-api/test/binding-swallowexcept.cc +0 -12
  230. package/vendor/node-addon-api/test/binding.cc +0 -200
  231. package/vendor/node-addon-api/test/binding.gyp +0 -160
  232. package/vendor/node-addon-api/test/buffer.cc +0 -185
  233. package/vendor/node-addon-api/test/buffer.h +0 -26
  234. package/vendor/node-addon-api/test/buffer.js +0 -150
  235. package/vendor/node-addon-api/test/buffer_new_or_copy-inl.h +0 -68
  236. package/vendor/node-addon-api/test/buffer_no_external.cc +0 -24
  237. package/vendor/node-addon-api/test/callbackInfo.cc +0 -27
  238. package/vendor/node-addon-api/test/callbackInfo.js +0 -9
  239. package/vendor/node-addon-api/test/callbackscope.cc +0 -39
  240. package/vendor/node-addon-api/test/callbackscope.js +0 -49
  241. package/vendor/node-addon-api/test/child_processes/addon.js +0 -11
  242. package/vendor/node-addon-api/test/child_processes/addon_data.js +0 -24
  243. package/vendor/node-addon-api/test/child_processes/objectwrap_function.js +0 -22
  244. package/vendor/node-addon-api/test/child_processes/threadsafe_function_exception.js +0 -33
  245. package/vendor/node-addon-api/test/child_processes/typed_threadsafe_function_exception.js +0 -19
  246. package/vendor/node-addon-api/test/common/index.js +0 -246
  247. package/vendor/node-addon-api/test/common/test_helper.h +0 -71
  248. package/vendor/node-addon-api/test/dataview/dataview.cc +0 -48
  249. package/vendor/node-addon-api/test/dataview/dataview.js +0 -35
  250. package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +0 -115
  251. package/vendor/node-addon-api/test/dataview/dataview_read_write.js +0 -92
  252. package/vendor/node-addon-api/test/date.cc +0 -45
  253. package/vendor/node-addon-api/test/date.js +0 -18
  254. package/vendor/node-addon-api/test/env_cleanup.cc +0 -100
  255. package/vendor/node-addon-api/test/env_cleanup.js +0 -55
  256. package/vendor/node-addon-api/test/env_misc.cc +0 -25
  257. package/vendor/node-addon-api/test/env_misc.js +0 -12
  258. package/vendor/node-addon-api/test/error.cc +0 -436
  259. package/vendor/node-addon-api/test/error.js +0 -111
  260. package/vendor/node-addon-api/test/error_handling_for_primitives.cc +0 -13
  261. package/vendor/node-addon-api/test/error_handling_for_primitives.js +0 -29
  262. package/vendor/node-addon-api/test/error_terminating_environment.js +0 -99
  263. package/vendor/node-addon-api/test/except_all.cc +0 -22
  264. package/vendor/node-addon-api/test/except_all.js +0 -14
  265. package/vendor/node-addon-api/test/exports.js +0 -19
  266. package/vendor/node-addon-api/test/external.cc +0 -85
  267. package/vendor/node-addon-api/test/external.js +0 -85
  268. package/vendor/node-addon-api/test/finalizer_order.cc +0 -152
  269. package/vendor/node-addon-api/test/finalizer_order.js +0 -98
  270. package/vendor/node-addon-api/test/function.cc +0 -338
  271. package/vendor/node-addon-api/test/function.js +0 -137
  272. package/vendor/node-addon-api/test/function_reference.cc +0 -204
  273. package/vendor/node-addon-api/test/function_reference.js +0 -157
  274. package/vendor/node-addon-api/test/globalObject/global_object.cc +0 -61
  275. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +0 -31
  276. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +0 -58
  277. package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +0 -40
  278. package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +0 -56
  279. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +0 -28
  280. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +0 -46
  281. package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +0 -31
  282. package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +0 -56
  283. package/vendor/node-addon-api/test/handlescope.cc +0 -86
  284. package/vendor/node-addon-api/test/handlescope.js +0 -16
  285. package/vendor/node-addon-api/test/index.js +0 -160
  286. package/vendor/node-addon-api/test/maybe/check.cc +0 -69
  287. package/vendor/node-addon-api/test/maybe/index.js +0 -50
  288. package/vendor/node-addon-api/test/memory_management.cc +0 -18
  289. package/vendor/node-addon-api/test/memory_management.js +0 -9
  290. package/vendor/node-addon-api/test/movable_callbacks.cc +0 -23
  291. package/vendor/node-addon-api/test/movable_callbacks.js +0 -21
  292. package/vendor/node-addon-api/test/name.cc +0 -110
  293. package/vendor/node-addon-api/test/name.js +0 -59
  294. package/vendor/node-addon-api/test/napi_child.js +0 -14
  295. package/vendor/node-addon-api/test/object/delete_property.cc +0 -38
  296. package/vendor/node-addon-api/test/object/delete_property.js +0 -41
  297. package/vendor/node-addon-api/test/object/finalizer.cc +0 -30
  298. package/vendor/node-addon-api/test/object/finalizer.js +0 -28
  299. package/vendor/node-addon-api/test/object/get_property.cc +0 -34
  300. package/vendor/node-addon-api/test/object/get_property.js +0 -40
  301. package/vendor/node-addon-api/test/object/has_own_property.cc +0 -34
  302. package/vendor/node-addon-api/test/object/has_own_property.js +0 -34
  303. package/vendor/node-addon-api/test/object/has_property.cc +0 -38
  304. package/vendor/node-addon-api/test/object/has_property.js +0 -37
  305. package/vendor/node-addon-api/test/object/object.cc +0 -430
  306. package/vendor/node-addon-api/test/object/object.js +0 -218
  307. package/vendor/node-addon-api/test/object/object_deprecated.cc +0 -70
  308. package/vendor/node-addon-api/test/object/object_deprecated.js +0 -42
  309. package/vendor/node-addon-api/test/object/object_freeze_seal.cc +0 -25
  310. package/vendor/node-addon-api/test/object/object_freeze_seal.js +0 -61
  311. package/vendor/node-addon-api/test/object/set_property.cc +0 -45
  312. package/vendor/node-addon-api/test/object/set_property.js +0 -30
  313. package/vendor/node-addon-api/test/object/subscript_operator.cc +0 -58
  314. package/vendor/node-addon-api/test/object/subscript_operator.js +0 -17
  315. package/vendor/node-addon-api/test/object_reference.cc +0 -417
  316. package/vendor/node-addon-api/test/object_reference.js +0 -262
  317. package/vendor/node-addon-api/test/objectwrap.cc +0 -295
  318. package/vendor/node-addon-api/test/objectwrap.js +0 -309
  319. package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +0 -26
  320. package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +0 -18
  321. package/vendor/node-addon-api/test/objectwrap_function.cc +0 -43
  322. package/vendor/node-addon-api/test/objectwrap_function.js +0 -6
  323. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +0 -30
  324. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +0 -13
  325. package/vendor/node-addon-api/test/objectwrap_removewrap.cc +0 -45
  326. package/vendor/node-addon-api/test/objectwrap_removewrap.js +0 -32
  327. package/vendor/node-addon-api/test/objectwrap_worker_thread.js +0 -20
  328. package/vendor/node-addon-api/test/promise.cc +0 -111
  329. package/vendor/node-addon-api/test/promise.js +0 -43
  330. package/vendor/node-addon-api/test/reference.cc +0 -78
  331. package/vendor/node-addon-api/test/reference.js +0 -20
  332. package/vendor/node-addon-api/test/require_basic_finalizers/index.js +0 -38
  333. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/addon.cc +0 -12
  334. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/binding.gyp +0 -48
  335. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/index.js +0 -3
  336. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/package.json +0 -11
  337. package/vendor/node-addon-api/test/run_script.cc +0 -56
  338. package/vendor/node-addon-api/test/run_script.js +0 -45
  339. package/vendor/node-addon-api/test/symbol.cc +0 -79
  340. package/vendor/node-addon-api/test/symbol.js +0 -66
  341. package/vendor/node-addon-api/test/testUtil.js +0 -54
  342. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +0 -230
  343. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +0 -225
  344. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +0 -155
  345. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +0 -13
  346. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_exception.cc +0 -50
  347. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_exception.js +0 -20
  348. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +0 -125
  349. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +0 -14
  350. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +0 -27
  351. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +0 -7
  352. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +0 -240
  353. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +0 -59
  354. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +0 -55
  355. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +0 -98
  356. package/vendor/node-addon-api/test/thunking_manual.cc +0 -127
  357. package/vendor/node-addon-api/test/thunking_manual.js +0 -16
  358. package/vendor/node-addon-api/test/type_taggable.cc +0 -66
  359. package/vendor/node-addon-api/test/type_taggable.js +0 -59
  360. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +0 -215
  361. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +0 -188
  362. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +0 -120
  363. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +0 -14
  364. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_exception.cc +0 -39
  365. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_exception.js +0 -13
  366. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +0 -127
  367. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +0 -14
  368. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +0 -32
  369. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +0 -8
  370. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +0 -237
  371. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +0 -59
  372. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +0 -67
  373. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +0 -98
  374. package/vendor/node-addon-api/test/typedarray-bigint.js +0 -58
  375. package/vendor/node-addon-api/test/typedarray.cc +0 -413
  376. package/vendor/node-addon-api/test/typedarray.js +0 -103
  377. package/vendor/node-addon-api/test/value_type_cast.cc +0 -60
  378. package/vendor/node-addon-api/test/value_type_cast.js +0 -106
  379. package/vendor/node-addon-api/test/version_management.cc +0 -28
  380. package/vendor/node-addon-api/test/version_management.js +0 -29
  381. package/vendor/node-addon-api/tools/README.md +0 -73
  382. package/vendor/node-addon-api/tools/check-napi.js +0 -99
  383. package/vendor/node-addon-api/tools/clang-format.js +0 -71
  384. package/vendor/node-addon-api/tools/conversion.js +0 -301
  385. package/vendor/node-addon-api/unit-test/README.md +0 -28
  386. package/vendor/node-addon-api/unit-test/binding-file-template.js +0 -39
  387. package/vendor/node-addon-api/unit-test/binding.gyp +0 -72
  388. package/vendor/node-addon-api/unit-test/exceptions.js +0 -32
  389. package/vendor/node-addon-api/unit-test/generate-binding-cc.js +0 -61
  390. package/vendor/node-addon-api/unit-test/injectTestParams.js +0 -101
  391. package/vendor/node-addon-api/unit-test/listOfTestModules.js +0 -88
  392. package/vendor/node-addon-api/unit-test/matchModules.js +0 -65
  393. package/vendor/node-addon-api/unit-test/setup.js +0 -13
  394. package/vendor/node-addon-api/unit-test/spawnTask.js +0 -26
  395. package/vendor/node-addon-api/unit-test/test.js +0 -30
  396. package/vendor/node-api-headers/CHANGELOG.md +0 -130
  397. package/vendor/node-api-headers/CODE_OF_CONDUCT.md +0 -4
  398. package/vendor/node-api-headers/CONTRIBUTING.md +0 -32
  399. package/vendor/node-api-headers/CREATING_A_RELEASE.md +0 -68
  400. package/vendor/node-api-headers/index.js +0 -17
  401. package/vendor/node-api-headers/lib/clang-utils.js +0 -50
  402. package/vendor/node-api-headers/lib/parse-utils.js +0 -92
  403. package/vendor/node-api-headers/package.json +0 -59
  404. package/vendor/node-api-headers/release-please-config.json +0 -12
  405. package/vendor/node-api-headers/scripts/update-headers.js +0 -246
  406. package/vendor/node-api-headers/scripts/write-symbols.js +0 -154
  407. package/vendor/node-api-headers/scripts/write-win32-def.js +0 -52
  408. package/vendor/node-api-headers/symbols.js +0 -257
  409. package/vendor/node-api-headers/test/parse-utils.js +0 -21
  410. /package/doc/{pages/benchmarks.md → benchmarks.md} +0 -0
  411. /package/doc/{pages/callbacks.md → callbacks.md} +0 -0
  412. /package/doc/{pages/contribute.md → contribute.md} +0 -0
  413. /package/doc/{pages/functions.md → functions.md} +0 -0
  414. /package/doc/{pages/index.md → index.md} +0 -0
  415. /package/doc/{pages/input.md → input.md} +0 -0
  416. /package/doc/{pages/migration.md → migration.md} +0 -0
  417. /package/doc/{pages/misc.md → misc.md} +0 -0
  418. /package/doc/{pages/output.md → output.md} +0 -0
  419. /package/doc/{pages/packaging.md → packaging.md} +0 -0
  420. /package/doc/{pages/platforms.md → platforms.md} +0 -0
  421. /package/doc/{pages/pointers.md → pointers.md} +0 -0
  422. /package/doc/{pages/start.md → start.md} +0 -0
  423. /package/doc/{pages/unions.md → unions.md} +0 -0
  424. /package/doc/{pages/variables.md → variables.md} +0 -0
  425. /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 "../ffi.hh"
8
- #include "../call.hh"
9
- #include "../util.hh"
7
+ #include "ffi.hh"
8
+ #include "call.hh"
9
+ #include "util.hh"
10
10
  #if defined(_WIN32)
11
- #include "../win32.hh"
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" napi_value CallSwitchStack(Napi::Function *func, size_t argc, napi_value *argv,
52
- uint8_t *old_sp, Span<uint8_t> *new_stack,
53
- napi_value (*call)(Napi::Function *func, size_t argc, napi_value *argv));
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 *gpr_ptr = AllocStack<uint64_t>(17 * 8 + func->args_size);
251
- uint64_t *vec_ptr = gpr_ptr + 9;
252
- uint64_t *args_ptr = gpr_ptr + 17;
251
+ uint64_t *args_ptr = nullptr;
252
+ uint64_t *gpr_ptr = nullptr;
253
+ uint64_t *vec_ptr = nullptr;
253
254
 
254
- if (!gpr_ptr) [[unlikely]]
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
- const ParameterInfo &param = func->parameters[i]; \
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
- const ParameterInfo &param = func->parameters[i]; \
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
- const ParameterInfo &param = func->parameters[i]; \
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
- const ParameterInfo &param = func->parameters[i]; \
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
- LOOP {
371
- CASE(Void) { K_UNREACHABLE(); };
338
+ for (Size i = 0; i < func->parameters.len; i++) {
339
+ const ParameterInfo &param = func->parameters[i];
340
+ K_ASSERT(param.directions >= 1 && param.directions <= 3);
372
341
 
373
- CASE(Bool) {
374
- const ParameterInfo &param = func->parameters[i];
375
- Napi::Value value = info[param.offset];
342
+ Napi::Value value = info[param.offset];
376
343
 
377
- bool b;
378
- if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
379
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
380
- return false;
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
- if (param.gpr_count) [[likely]] {
385
- *(gpr_ptr++) = (uint64_t)b;
386
- } else {
387
- *(uint8_t *)args_ptr = b;
388
- args_ptr = (uint64_t *)((uint8_t *)args_ptr + 1);
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
- *((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint64_t)b;
364
+ *((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint64_t)b;
392
365
  #endif
393
- };
394
-
395
- CASE(Int8) { PUSH_INTEGER(int8_t); };
396
- CASE(UInt8) { PUSH_INTEGER(uint8_t); };
397
- CASE(Int16) { PUSH_INTEGER(int16_t); };
398
- CASE(Int16S) { PUSH_INTEGER_SWAP(int16_t); };
399
- CASE(UInt16) { PUSH_INTEGER(uint16_t); };
400
- CASE(UInt16S) { PUSH_INTEGER_SWAP(uint16_t); };
401
- CASE(Int32) { PUSH_INTEGER(int32_t); };
402
- CASE(Int32S) { PUSH_INTEGER_SWAP(int32_t); };
403
- CASE(UInt32) { PUSH_INTEGER(uint32_t); };
404
- CASE(UInt32S) { PUSH_INTEGER_SWAP(uint32_t); };
405
- CASE(Int64) { PUSH_INTEGER(int64_t); };
406
- CASE(Int64S) { PUSH_INTEGER_SWAP(int64_t); };
407
- CASE(UInt64) { PUSH_INTEGER(uint64_t); };
408
- CASE(UInt64S) { PUSH_INTEGER_SWAP(uint64_t); };
409
-
410
- CASE(String) {
411
- const ParameterInfo &param = func->parameters[i];
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
- args_ptr = param.gpr_count ? args_ptr : AlignUp(args_ptr, 8);
387
+ args_ptr = param.gpr_count ? args_ptr : AlignUp(args_ptr, 8);
420
388
  #endif
421
- *(const char **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str;
422
- };
423
- CASE(String16) {
424
- const ParameterInfo &param = func->parameters[i];
425
- Napi::Value value = info[param.offset];
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
- args_ptr = param.gpr_count ? args_ptr : AlignUp(args_ptr, 8);
397
+ args_ptr = param.gpr_count ? args_ptr : AlignUp(args_ptr, 8);
433
398
  #endif
434
- *(const char16_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str16;
435
- };
436
- CASE(String32) {
437
- const ParameterInfo &param = func->parameters[i];
438
- Napi::Value value = info[param.offset];
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
- args_ptr = param.gpr_count ? args_ptr : AlignUp(args_ptr, 8);
407
+ args_ptr = param.gpr_count ? args_ptr : AlignUp(args_ptr, 8);
446
408
  #endif
447
- *(const char32_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str32;
448
- };
449
-
450
- CASE(Pointer) {
451
- const ParameterInfo &param = func->parameters[i];
452
- Napi::Value value = info[param.offset];
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
- args_ptr = param.gpr_count ? args_ptr : AlignUp(args_ptr, 8);
417
+ args_ptr = param.gpr_count ? args_ptr : AlignUp(args_ptr, 8);
460
418
  #endif
461
- *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
462
- };
463
-
464
- CASE(Record) OR(Union) {
465
- const ParameterInfo &param = func->parameters[i];
466
- Napi::Value value = info[param.offset];
467
-
468
- if (!IsObject(value)) [[unlikely]] {
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
- Napi::Object obj = value.As<Napi::Object>();
428
+ Napi::Object obj = value.As<Napi::Object>();
474
429
 
475
- if (param.vec_count) { // HFA
476
- uint8_t *ptr = (uint8_t *)vec_ptr;
430
+ if (param.vec_count) { // HFA
431
+ uint8_t *ptr = (uint8_t *)vec_ptr;
477
432
 
478
- if (!PushObject(obj, param.type, ptr))
479
- return false;
480
- ExpandFloats(ptr, param.vec_count, param.vec_bytes);
433
+ if (!PushObject(obj, param.type, ptr))
434
+ return false;
435
+ ExpandFloats(ptr, param.vec_count, param.vec_bytes);
481
436
 
482
- vec_ptr += param.vec_count;
483
- } else if (!param.use_memory) {
484
- if (param.gpr_count) {
485
- K_ASSERT(param.type->align <= 8);
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
- if (!PushObject(obj, param.type, (uint8_t *)gpr_ptr))
488
- return false;
489
- gpr_ptr += param.gpr_count;
490
- } else if (param.type->size) {
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
- args_ptr = AlignUp(args_ptr, param.type->align);
447
+ args_ptr = AlignUp(args_ptr, 8);
493
448
  #endif
494
- if (!PushObject(obj, param.type, (uint8_t *)args_ptr))
495
- return false;
496
- args_ptr += (param.type->size + 7) / 8;
497
- }
498
- } else {
499
- uint8_t *ptr = AllocHeap(param.type->size, 16);
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
- if (param.gpr_count) {
502
- K_ASSERT(param.gpr_count == 1);
503
- K_ASSERT(param.vec_count == 0);
456
+ if (param.gpr_count) {
457
+ K_ASSERT(param.gpr_count == 1);
458
+ K_ASSERT(param.vec_count == 0);
504
459
 
505
- *(uint8_t **)(gpr_ptr++) = ptr;
506
- } else {
460
+ *(uint8_t **)(gpr_ptr++) = ptr;
461
+ } else {
507
462
  #if defined(__APPLE__)
508
- args_ptr = AlignUp(args_ptr, 8);
463
+ args_ptr = AlignUp(args_ptr, 8);
509
464
  #endif
510
- *(uint8_t **)(args_ptr++) = ptr;
511
- }
465
+ *(uint8_t **)(args_ptr++) = ptr;
466
+ }
512
467
 
513
- if (!PushObject(obj, param.type, ptr))
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 &param = func->parameters[i];
521
- Napi::Value value = info[param.offset];
477
+ }
522
478
 
523
- float f;
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
- if (param.vec_count) [[likely]] {
530
- memset((uint8_t *)vec_ptr + 4, 0, 4);
531
- *(float *)(vec_ptr++) = f;
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
- } else if (param.gpr_count) {
534
- memset((uint8_t *)gpr_ptr + 4, 0, 4);
535
- *(float *)(gpr_ptr++) = f;
485
+ } else if (param.gpr_count) {
486
+ memset((uint8_t *)gpr_ptr + 4, 0, 4);
487
+ *(float *)(gpr_ptr++) = f;
536
488
  #endif
537
- } else {
489
+ } else {
538
490
  #if defined(__APPLE__)
539
- args_ptr = AlignUp(args_ptr, 4);
540
- *(float *)args_ptr = f;
541
- args_ptr = (uint64_t *)((uint8_t *)args_ptr + 4);
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
- memset((uint8_t *)args_ptr + 4, 0, 4);
544
- *(float *)(args_ptr++) = f;
495
+ memset((uint8_t *)args_ptr + 4, 0, 4);
496
+ *(float *)(args_ptr++) = f;
545
497
  #endif
546
- }
547
- };
548
- CASE(Float64) {
549
- const ParameterInfo &param = func->parameters[i];
550
- Napi::Value value = info[param.offset];
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
- double d;
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
- if (param.vec_count) [[likely]] {
559
- *(double *)(vec_ptr++) = d;
508
+ if (param.vec_count) [[likely]] {
509
+ *(double *)(vec_ptr++) = d;
560
510
  #if defined(_WIN32)
561
- } else if (param.gpr_count) {
562
- *(double *)(gpr_ptr++) = d;
511
+ } else if (param.gpr_count) {
512
+ *(double *)(gpr_ptr++) = d;
563
513
  #endif
564
- } else {
514
+ } else {
565
515
  #if defined(__APPLE__)
566
- args_ptr = AlignUp(args_ptr, 8);
516
+ args_ptr = AlignUp(args_ptr, 8);
567
517
  #endif
568
- *(double *)(args_ptr++) = d;
569
- }
570
- };
571
-
572
- CASE(Callback) {
573
- const ParameterInfo &param = func->parameters[i];
574
- Napi::Value value = info[param.offset];
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
- args_ptr = param.gpr_count ? args_ptr : AlignUp(args_ptr, 8);
527
+ args_ptr = param.gpr_count ? args_ptr : AlignUp(args_ptr, 8);
582
528
  #endif
583
- *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
584
- };
529
+ *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
530
+ } break;
585
531
 
586
- CASE(Prototype) { /* End loop */ };
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: return result.ptr ? WrapPointer(env, func->ret.type->ref.type, result.ptr) : env.Null();
714
- case PrimitiveKind::Callback: return result.ptr ? WrapCallback(env, func->ret.type->ref.type, result.ptr) : env.Null();
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 *own_sp, uint8_t *caller_sp, bool switch_stack, BackRegisters *out_reg)
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
- Napi::Value p = ptr2 ? WrapPointer(env, param.type->ref.type, ptr2) : env.Null();
1085
- arguments.Append(p);
1015
+ if (ptr2) {
1016
+ Napi::External<void> external = Napi::External<void>::New(env, ptr2);
1017
+ SetValueTag(external, param.type->ref.marker);
1086
1018
 
1087
- if (param.type->dispose) {
1088
- param.type->dispose(env, param.type, ptr2);
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
- napi_value ret;
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
- CType v; \
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
- CType v; \
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
- bool b;
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
- void *ptr;
1274
- if (!PushPointer(value, type, 1, &ptr)) [[unlikely]]
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
- float f;
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
- double d;
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
- if (!PushCallback(value, type, &ptr)) [[unlikely]]
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