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,9 +4,9 @@
4
4
  #if __riscv_xlen == 64 || defined(__loongarch64)
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
 
11
11
  #include <napi.h>
12
12
 
@@ -48,9 +48,10 @@ extern "C" Fa0A0Ret ForwardCallXDG(const void *func, uint8_t *sp, uint8_t **out_
48
48
  extern "C" A0Fa0Ret ForwardCallXGD(const void *func, uint8_t *sp, uint8_t **out_old_sp);
49
49
  extern "C" Fa0Fa1Ret ForwardCallXDD(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 inline void ExpandPair(const uint8_t raw[16], int size1, int size2, uint64_t out_regs[2])
56
57
  {
@@ -148,258 +149,213 @@ bool AnalyseFunction(Napi::Env, InstanceData *, FunctionInfo *func)
148
149
 
149
150
  bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
150
151
  {
151
- uint64_t *vec_ptr = AllocStack<uint64_t>(16 * 8 + func->args_size);
152
- uint64_t *gpr_ptr = vec_ptr + 8;
153
- uint64_t *args_ptr = vec_ptr + 16;
152
+ uint64_t *args_ptr = nullptr;
153
+ uint64_t *gpr_ptr = nullptr;
154
+ uint64_t *vec_ptr = nullptr;
154
155
 
155
- if (!vec_ptr) [[unlikely]]
156
+ // Return through registers unless it's too big
157
+ if (!AllocStack(func->args_size, 16, &args_ptr)) [[unlikely]]
158
+ return false;
159
+ if (!AllocStack(8 * 8, 8, &gpr_ptr)) [[unlikely]]
160
+ return false;
161
+ if (!AllocStack(8 * 8, 8, &vec_ptr)) [[unlikely]]
156
162
  return false;
157
163
  if (func->ret.use_memory) {
158
164
  return_ptr = AllocHeap(func->ret.type->size, 16);
159
165
  *(uint8_t **)(gpr_ptr++) = return_ptr;
160
166
  }
161
167
 
162
- Size i = -1;
163
-
164
- static const void *const DispatchTable[] = {
165
- #define PRIMITIVE(Name) && Name,
166
- #include "../primitives.inc"
167
- };
168
-
169
- #define LOOP
170
- #define CASE(Primitive) \
171
- do { \
172
- PrimitiveKind next = func->primitives[++i]; \
173
- goto *DispatchTable[(int)next]; \
174
- } while (false); \
175
- Primitive:
176
- #define OR(Primitive) \
177
- Primitive:
178
-
179
168
  #define PUSH_INTEGER(CType) \
180
169
  do { \
181
- const ParameterInfo &param = func->parameters[i]; \
182
- Napi::Value value = info[param.offset]; \
183
- \
184
- CType v; \
185
- if (!TryNumber(value, &v)) [[unlikely]] { \
170
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
186
171
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
187
172
  return false; \
188
173
  } \
189
174
  \
175
+ CType v = GetNumber<CType>(value); \
190
176
  *((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint64_t)v; \
191
177
  } while (false)
192
178
  #define PUSH_INTEGER_SWAP(CType) \
193
179
  do { \
194
- const ParameterInfo &param = func->parameters[i]; \
195
- Napi::Value value = info[param.offset]; \
196
- \
197
- CType v; \
198
- if (!TryNumber(value, &v)) [[unlikely]] { \
180
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
199
181
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
200
182
  return false; \
201
183
  } \
202
184
  \
185
+ CType v = GetNumber<CType>(value); \
203
186
  *((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint64_t)ReverseBytes(v); \
204
187
  } while (false)
205
188
 
206
189
  // Push arguments
207
- LOOP {
208
- CASE(Void) { K_UNREACHABLE(); };
209
-
210
- CASE(Bool) {
211
- const ParameterInfo &param = func->parameters[i];
212
- Napi::Value value = info[param.offset];
213
-
214
- bool b;
215
- if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
216
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
217
- return false;
218
- }
190
+ for (Size i = 0; i < func->parameters.len; i++) {
191
+ const ParameterInfo &param = func->parameters[i];
192
+ K_ASSERT(param.directions >= 1 && param.directions <= 3);
219
193
 
220
- *((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint64_t)b;
221
- };
222
-
223
- CASE(Int8) { PUSH_INTEGER(int8_t); };
224
- CASE(UInt8) { PUSH_INTEGER(uint8_t); };
225
- CASE(Int16) { PUSH_INTEGER(int16_t); };
226
- CASE(Int16S) { PUSH_INTEGER_SWAP(int16_t); };
227
- CASE(UInt16) { PUSH_INTEGER(uint16_t); };
228
- CASE(UInt16S) { PUSH_INTEGER_SWAP(uint16_t); };
229
- CASE(Int32) { PUSH_INTEGER(int32_t); };
230
- CASE(Int32S) { PUSH_INTEGER_SWAP(int32_t); };
231
- CASE(UInt32) { PUSH_INTEGER(uint32_t); };
232
- CASE(UInt32S) { PUSH_INTEGER_SWAP(uint32_t); };
233
- CASE(Int64) { PUSH_INTEGER(int64_t); };
234
- CASE(Int64S) { PUSH_INTEGER_SWAP(int64_t); };
235
- CASE(UInt64) { PUSH_INTEGER(uint64_t); };
236
- CASE(UInt64S) { PUSH_INTEGER_SWAP(uint64_t); };
237
-
238
- CASE(String) {
239
- const ParameterInfo &param = func->parameters[i];
240
- Napi::Value value = info[param.offset];
194
+ Napi::Value value = info[param.offset];
241
195
 
242
- const char *str;
243
- if (!PushString(value, param.directions, &str)) [[unlikely]]
244
- return false;
196
+ switch (param.type->primitive) {
197
+ case PrimitiveKind::Void: { K_UNREACHABLE(); } break;
245
198
 
246
- *(const char **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str;
247
- };
248
- CASE(String16) {
249
- const ParameterInfo &param = func->parameters[i];
250
- Napi::Value value = info[param.offset];
199
+ case PrimitiveKind::Bool: {
200
+ if (!value.IsBoolean()) [[unlikely]] {
201
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
202
+ return false;
203
+ }
251
204
 
252
- const char16_t *str16;
253
- if (!PushString16(value, param.directions, &str16)) [[unlikely]]
254
- return false;
205
+ bool b = value.As<Napi::Boolean>();
206
+ *((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint64_t)b;
207
+ } break;
208
+ case PrimitiveKind::Int8: { PUSH_INTEGER(int8_t); } break;
209
+ case PrimitiveKind::UInt8: { PUSH_INTEGER(uint8_t); } break;
210
+ case PrimitiveKind::Int16: { PUSH_INTEGER(int16_t); } break;
211
+ case PrimitiveKind::Int16S: { PUSH_INTEGER_SWAP(int16_t); } break;
212
+ case PrimitiveKind::UInt16: { PUSH_INTEGER(uint16_t); } break;
213
+ case PrimitiveKind::UInt16S: { PUSH_INTEGER_SWAP(uint16_t); } break;
214
+ case PrimitiveKind::Int32: { PUSH_INTEGER(int32_t); } break;
215
+ case PrimitiveKind::Int32S: { PUSH_INTEGER_SWAP(int32_t); } break;
216
+ case PrimitiveKind::UInt32: { PUSH_INTEGER(uint32_t); } break;
217
+ case PrimitiveKind::UInt32S: { PUSH_INTEGER_SWAP(uint32_t); } break;
218
+ case PrimitiveKind::Int64: { PUSH_INTEGER(int64_t); } break;
219
+ case PrimitiveKind::Int64S: { PUSH_INTEGER_SWAP(int64_t); } break;
220
+ case PrimitiveKind::UInt64: { PUSH_INTEGER(uint64_t); } break;
221
+ case PrimitiveKind::UInt64S: { PUSH_INTEGER_SWAP(uint64_t); } break;
222
+ case PrimitiveKind::String: {
223
+ const char *str;
224
+ if (!PushString(value, param.directions, &str)) [[unlikely]]
225
+ return false;
255
226
 
256
- *(const char16_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str16;
257
- };
258
- CASE(String32) {
259
- const ParameterInfo &param = func->parameters[i];
260
- Napi::Value value = info[param.offset];
227
+ *(const char **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str;
228
+ } break;
229
+ case PrimitiveKind::String16: {
230
+ const char16_t *str16;
231
+ if (!PushString16(value, param.directions, &str16)) [[unlikely]]
232
+ return false;
261
233
 
262
- const char32_t *str32;
263
- if (!PushString32(value, param.directions, &str32)) [[unlikely]]
264
- return false;
234
+ *(const char16_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str16;
235
+ } break;
236
+ case PrimitiveKind::String32: {
237
+ const char32_t *str32;
238
+ if (!PushString32(value, param.directions, &str32)) [[unlikely]]
239
+ return false;
265
240
 
266
- *(const char32_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str32;
267
- };
241
+ *(const char32_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str32;
242
+ } break;
243
+ case PrimitiveKind::Pointer: {
244
+ void *ptr;
245
+ if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
246
+ return false;
268
247
 
269
- CASE(Pointer) {
270
- const ParameterInfo &param = func->parameters[i];
271
- Napi::Value value = info[param.offset];
248
+ *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
249
+ } break;
250
+ case PrimitiveKind::Record:
251
+ case PrimitiveKind::Union: {
252
+ if (!IsObject(value)) [[unlikely]] {
253
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected object", GetValueType(instance, value));
254
+ return false;
255
+ }
272
256
 
273
- void *ptr;
274
- if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
275
- return false;
257
+ Napi::Object obj = value.As<Napi::Object>();
276
258
 
277
- *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
278
- };
259
+ if (!param.use_memory) {
260
+ K_ASSERT(param.type->size <= 16);
261
+
262
+ uint64_t regs[2] = { 0xFFFFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFFFFull };
263
+ {
264
+ uint8_t buf[16] = {};
265
+ if (!PushObject(obj, param.type, buf))
266
+ return false;
267
+ ExpandPair(buf, param.reg_size[0], param.reg_size[1], regs);
268
+ }
279
269
 
280
- CASE(Record) OR(Union) {
281
- const ParameterInfo &param = func->parameters[i];
282
- Napi::Value value = info[param.offset];
270
+ if (param.gpr_first) {
271
+ *(gpr_ptr++) = regs[0];
272
+ if (param.gpr_count == 2) {
273
+ *(gpr_ptr++) = regs[1];
274
+ } else if (param.vec_count == 1) {
275
+ *(vec_ptr++) = regs[1];
276
+ }
277
+
278
+ args_ptr = std::max(gpr_ptr, args_ptr);
279
+ } else if (param.vec_count) {
280
+ *(vec_ptr++) = regs[0];
281
+ if (param.vec_count == 2) {
282
+ *(vec_ptr++) = regs[1];
283
+ } else if (param.gpr_count == 1) {
284
+ *(gpr_ptr++) = regs[1];
285
+ }
286
+ } else {
287
+ K_ASSERT(param.type->align <= 8);
283
288
 
284
- if (!IsObject(value)) [[unlikely]] {
285
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected object", GetValueType(instance, value));
286
- return false;
287
- }
289
+ MemCpy(args_ptr, regs, param.type->size);
290
+ args_ptr += (param.type->size + 7) / 8;
291
+ }
292
+ } else {
293
+ uint8_t *ptr = AllocHeap(param.type->size, 16);
288
294
 
289
- Napi::Object obj = value.As<Napi::Object>();
295
+ if (param.gpr_count) {
296
+ K_ASSERT(param.gpr_count == 1);
297
+ K_ASSERT(param.vec_count == 0);
290
298
 
291
- if (!param.use_memory) {
292
- K_ASSERT(param.type->size <= 16);
299
+ *(uint8_t **)(gpr_ptr++) = ptr;
300
+ } else {
301
+ *(uint8_t **)(args_ptr++) = ptr;
302
+ }
293
303
 
294
- uint64_t regs[2] = { 0xFFFFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFFFFull };
295
- {
296
- uint8_t buf[16] = {};
297
- if (!PushObject(obj, param.type, buf))
304
+ if (!PushObject(obj, param.type, ptr))
298
305
  return false;
299
- ExpandPair(buf, param.reg_size[0], param.reg_size[1], regs);
306
+ }
307
+ } break;
308
+ case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
309
+ case PrimitiveKind::Float32: {
310
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
311
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
312
+ return false;
300
313
  }
301
314
 
302
- if (param.gpr_first) {
303
- *(gpr_ptr++) = regs[0];
304
- if (param.gpr_count == 2) {
305
- *(gpr_ptr++) = regs[1];
306
- } else if (param.vec_count == 1) {
307
- *(vec_ptr++) = regs[1];
308
- }
315
+ float f = GetNumber<float>(value);
309
316
 
310
- args_ptr = std::max(gpr_ptr, args_ptr);
311
- } else if (param.vec_count) {
312
- *(vec_ptr++) = regs[0];
313
- if (param.vec_count == 2) {
314
- *(vec_ptr++) = regs[1];
315
- } else if (param.gpr_count == 1) {
316
- *(gpr_ptr++) = regs[1];
317
- }
317
+ if (param.vec_count) [[likely]] {
318
+ memset((uint8_t *)vec_ptr + 4, 0xFF, 4);
319
+ *(float *)(vec_ptr++) = f;
320
+ } else if (param.gpr_count) {
321
+ memset((uint8_t *)gpr_ptr + 4, 0xFF, 4);
322
+ *(float *)(gpr_ptr++) = f;
318
323
  } else {
319
- K_ASSERT(param.type->align <= 8);
320
-
321
- MemCpy(args_ptr, regs, param.type->size);
322
- args_ptr += (param.type->size + 7) / 8;
324
+ memset(args_ptr, 0xFF, 8);
325
+ *(float *)(args_ptr++) = f;
326
+ }
327
+ } break;
328
+ case PrimitiveKind::Float64: {
329
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
330
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
331
+ return false;
323
332
  }
324
- } else {
325
- uint8_t *ptr = AllocHeap(param.type->size, 16);
326
333
 
327
- if (param.gpr_count) {
328
- K_ASSERT(param.gpr_count == 1);
329
- K_ASSERT(param.vec_count == 0);
334
+ double d = GetNumber<double>(value);
330
335
 
331
- *(uint8_t **)(gpr_ptr++) = ptr;
336
+ if (param.vec_count) [[likely]] {
337
+ *(double *)(vec_ptr++) = d;
338
+ } else if (param.gpr_count) {
339
+ *(double *)(gpr_ptr++) = d;
332
340
  } else {
333
- *(uint8_t **)(args_ptr++) = ptr;
341
+ *(double *)(args_ptr++) = d;
334
342
  }
335
-
336
- if (!PushObject(obj, param.type, ptr))
343
+ } break;
344
+ case PrimitiveKind::Callback: {
345
+ void *ptr;
346
+ if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
337
347
  return false;
338
- }
339
- };
340
- CASE(Array) { K_UNREACHABLE(); };
341
348
 
342
- CASE(Float32) {
343
- const ParameterInfo &param = func->parameters[i];
344
- Napi::Value value = info[param.offset];
345
-
346
- float f;
347
- if (!TryNumber(value, &f)) [[unlikely]] {
348
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
349
- return false;
350
- }
351
-
352
- if (param.vec_count) [[likely]] {
353
- memset((uint8_t *)vec_ptr + 4, 0xFF, 4);
354
- *(float *)(vec_ptr++) = f;
355
- } else if (param.gpr_count) {
356
- memset((uint8_t *)gpr_ptr + 4, 0xFF, 4);
357
- *(float *)(gpr_ptr++) = f;
358
- } else {
359
- memset(args_ptr, 0xFF, 8);
360
- *(float *)(args_ptr++) = f;
361
- }
362
- };
363
- CASE(Float64) {
364
- const ParameterInfo &param = func->parameters[i];
365
- Napi::Value value = info[param.offset];
366
-
367
- double d;
368
- if (!TryNumber(value, &d)) [[unlikely]] {
369
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
370
- return false;
371
- }
372
-
373
- if (param.vec_count) [[likely]] {
374
- *(double *)(vec_ptr++) = d;
375
- } else if (param.gpr_count) {
376
- *(double *)(gpr_ptr++) = d;
377
- } else {
378
- *(double *)(args_ptr++) = d;
379
- }
380
- };
381
-
382
- CASE(Callback) {
383
- const ParameterInfo &param = func->parameters[i];
384
- Napi::Value value = info[param.offset];
385
-
386
- void *ptr;
387
- if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
388
- return false;
389
-
390
- *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
391
- };
349
+ *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
350
+ } break;
392
351
 
393
- CASE(Prototype) { /* End loop */ };
352
+ case PrimitiveKind::Prototype: { K_UNREACHABLE(); } break;
353
+ }
394
354
  }
395
355
 
396
356
  #undef PUSH_INTEGER_SWAP
397
357
  #undef PUSH_INTEGER
398
358
 
399
- #undef OR
400
- #undef CASE
401
- #undef LOOP
402
-
403
359
  new_sp = mem->stack.end();
404
360
 
405
361
  return true;
@@ -493,8 +449,17 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
493
449
  case PrimitiveKind::String: return result.ptr ? Napi::String::New(env, (const char *)result.ptr) : env.Null();
494
450
  case PrimitiveKind::String16: return result.ptr ? Napi::String::New(env, (const char16_t *)result.ptr) : env.Null();
495
451
  case PrimitiveKind::String32: return result.ptr ? MakeStringFromUTF32(env, (const char32_t *)result.ptr) : env.Null();
496
- case PrimitiveKind::Pointer: return result.ptr ? WrapPointer(env, func->ret.type->ref.type, result.ptr) : env.Null();
497
- case PrimitiveKind::Callback: return result.ptr ? WrapCallback(env, func->ret.type->ref.type, result.ptr) : env.Null();
452
+ case PrimitiveKind::Pointer:
453
+ case PrimitiveKind::Callback: {
454
+ if (result.ptr) {
455
+ Napi::External<void> external = Napi::External<void>::New(env, result.ptr);
456
+ SetValueTag(external, func->ret.type->ref.marker);
457
+
458
+ return external;
459
+ } else {
460
+ return env.Null();
461
+ }
462
+ } break;
498
463
  case PrimitiveKind::Record:
499
464
  case PrimitiveKind::Union: {
500
465
  if (return_ptr) {
@@ -518,13 +483,14 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
518
483
  K_UNREACHABLE();
519
484
  }
520
485
 
521
- void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_stack, BackRegisters *out_reg)
486
+ void CallData::Relay(Size idx, uint8_t *sp)
522
487
  {
523
- if (env.IsExceptionPending()) [[unlikely]]
524
- return;
525
-
526
488
  const TrampolineInfo &trampoline = shared.trampolines[idx];
527
489
 
490
+ uint8_t *own_sp = sp;
491
+ uint8_t *caller_sp = sp + 168;
492
+ BackRegisters *out_reg = (BackRegisters *)(sp + 128);
493
+
528
494
  const FunctionInfo *proto = trampoline.proto;
529
495
  Napi::Function func = trampoline.func.Value();
530
496
 
@@ -537,11 +503,6 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
537
503
 
538
504
  K_DEFER_N(err_guard) { memset(out_reg, 0, K_SIZE(*out_reg)); };
539
505
 
540
- if (trampoline.generation >= 0 && trampoline.generation != (int32_t)mem->generation) [[unlikely]] {
541
- ThrowError<Napi::Error>(env, "Cannot use non-registered callback beyond FFI call");
542
- return;
543
- }
544
-
545
506
  LocalArray<napi_value, MaxParameters + 1> arguments;
546
507
 
547
508
  arguments.Append(!trampoline.recv.IsEmpty() ? trampoline.recv.Value() : env.Undefined());
@@ -674,21 +635,18 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
674
635
  Napi::Value arg = str32 ? MakeStringFromUTF32(env, str32) : env.Null();
675
636
  arguments.Append(arg);
676
637
  } break;
677
- case PrimitiveKind::Pointer: {
638
+ case PrimitiveKind::Pointer:
639
+ case PrimitiveKind::Callback: {
678
640
  void *ptr2 = *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++);
679
641
 
680
- Napi::Value p = ptr2 ? WrapPointer(env, param.type->ref.type, ptr2) : env.Null();
681
- arguments.Append(p);
642
+ if (ptr2) {
643
+ Napi::External<void> external = Napi::External<void>::New(env, ptr2);
644
+ SetValueTag(external, param.type->ref.marker);
682
645
 
683
- if (param.type->dispose) {
684
- param.type->dispose(env, param.type, ptr2);
646
+ arguments.Append(external);
647
+ } else {
648
+ arguments.Append(env.Null());
685
649
  }
686
- } break;
687
- case PrimitiveKind::Callback: {
688
- void *ptr2 = *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++);
689
-
690
- Napi::Value p = ptr2 ? WrapCallback(env, param.type->ref.type, ptr2) : env.Null();
691
- arguments.Append(p);
692
650
 
693
651
  if (param.type->dispose) {
694
652
  param.type->dispose(env, param.type, ptr2);
@@ -759,37 +717,30 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
759
717
 
760
718
  const TypeInfo *type = proto->ret.type;
761
719
 
762
- // Make the call
763
- napi_value ret;
764
- if (switch_stack) {
765
- ret = CallSwitchStack(&func, (size_t)arguments.len, arguments.data, old_sp, &mem->stack,
766
- [](Napi::Function *func, size_t argc, napi_value *argv) { return (napi_value)func->Call(argv[0], argc - 1, argv + 1); });
767
- } else {
768
- ret = (napi_value)func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
769
- }
770
- Napi::Value value(env, ret);
720
+ // Make the call!
721
+ Napi::Value value = func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
771
722
 
772
723
  if (env.IsExceptionPending()) [[unlikely]]
773
724
  return;
774
725
 
775
726
  #define RETURN_INTEGER(CType) \
776
727
  do { \
777
- CType v; \
778
- if (!TryNumber(value, &v)) [[unlikely]] { \
728
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
779
729
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
780
730
  return; \
781
731
  } \
782
732
  \
733
+ CType v = GetNumber<CType>(value); \
783
734
  out_reg->a0 = (uint64_t)v; \
784
735
  } while (false)
785
736
  #define RETURN_INTEGER_SWAP(CType) \
786
737
  do { \
787
- CType v; \
788
- if (!TryNumber(value, &v)) [[unlikely]] { \
738
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
789
739
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
790
740
  return; \
791
741
  } \
792
742
  \
743
+ CType v = GetNumber<CType>(value); \
793
744
  out_reg->a0 = (uint64_t)ReverseBytes(v); \
794
745
  } while (false)
795
746
 
@@ -797,12 +748,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
797
748
  switch (type->primitive) {
798
749
  case PrimitiveKind::Void: {} break;
799
750
  case PrimitiveKind::Bool: {
800
- bool b;
801
- if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
751
+ if (!value.IsBoolean()) [[unlikely]] {
802
752
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
803
753
  return;
804
754
  }
805
755
 
756
+ bool b = value.As<Napi::Boolean>();
806
757
  out_reg->a0 = (uint64_t)b;
807
758
  } break;
808
759
  case PrimitiveKind::Int8: { RETURN_INTEGER(int8_t); } break;
@@ -841,9 +792,24 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
841
792
  out_reg->a0 = (uint64_t)str32;
842
793
  } break;
843
794
  case PrimitiveKind::Pointer: {
844
- void *ptr;
845
- if (!PushPointer(value, type, 1, &ptr)) [[unlikely]]
795
+ uint8_t *ptr;
796
+
797
+ if (CheckValueTag(value, type->ref.marker)) {
798
+ ptr = value.As<Napi::External<uint8_t>>().Data();
799
+ } else if (IsObject(value) && (type->ref.type->primitive == PrimitiveKind::Record ||
800
+ type->ref.type->primitive == PrimitiveKind::Union)) {
801
+ Napi::Object obj = value.As<Napi::Object>();
802
+
803
+ ptr = AllocHeap(type->ref.type->size, 16);
804
+
805
+ if (!PushObject(obj, type->ref.type, ptr))
806
+ return;
807
+ } else if (IsNullOrUndefined(value)) {
808
+ ptr = nullptr;
809
+ } else {
810
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
846
811
  return;
812
+ }
847
813
 
848
814
  out_reg->a0 = (uint64_t)ptr;
849
815
  } break;
@@ -886,28 +852,41 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
886
852
  } break;
887
853
  case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
888
854
  case PrimitiveKind::Float32: {
889
- float f;
890
- if (!TryNumber(value, &f)) [[unlikely]] {
855
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
891
856
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
892
857
  return;
893
858
  }
894
859
 
860
+ float f = GetNumber<float>(value);
895
861
  memset((uint8_t *)&out_reg->fa0 + 4, 0xFF, 4);
896
862
  memcpy(&out_reg->fa0, &f, 4);
897
863
  } break;
898
864
  case PrimitiveKind::Float64: {
899
- double d;
900
- if (!TryNumber(value, &d)) [[unlikely]] {
865
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
901
866
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
902
867
  return;
903
868
  }
904
869
 
870
+ double d = GetNumber<double>(value);
905
871
  out_reg->fa0 = d;
906
872
  } break;
907
873
  case PrimitiveKind::Callback: {
908
874
  void *ptr;
909
- if (!PushCallback(value, type, &ptr)) [[unlikely]]
875
+
876
+ if (value.IsFunction()) {
877
+ Napi::Function func2 = value.As<Napi::Function>();
878
+
879
+ ptr = ReserveTrampoline(type->ref.proto, func2);
880
+ if (!ptr) [[unlikely]]
881
+ return;
882
+ } else if (CheckValueTag(value, type->ref.marker)) {
883
+ ptr = value.As<Napi::External<void>>().Data();
884
+ } else if (IsNullOrUndefined(value)) {
885
+ ptr = nullptr;
886
+ } else {
887
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
910
888
  return;
889
+ }
911
890
 
912
891
  out_reg->a0 = (uint64_t)ptr;
913
892
  } break;
@@ -921,6 +900,16 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
921
900
  err_guard.Disable();
922
901
  }
923
902
 
903
+ void *FindTrampolineStart()
904
+ {
905
+ return &Trampoline0;
906
+ }
907
+
908
+ void *FindTrampolineEnd()
909
+ {
910
+ return &TrampolineEnd;
911
+ }
912
+
924
913
  }
925
914
 
926
915
  #endif