koffi 2.16.0-beta.2 → 2.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/CHANGELOG.md +59 -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 -238
  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 -274
  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 -236
  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 -212
  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 -206
  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 -226
  51. package/src/koffi/src/{abi/x86_asm.S → abi_x86_asm.S} +36 -21
  52. package/src/koffi/src/{abi/x86_asm.asm → abi_x86_asm.asm} +31 -16
  53. package/src/koffi/src/call.cc +473 -287
  54. package/src/koffi/src/call.hh +15 -18
  55. package/src/koffi/src/ffi.cc +167 -183
  56. package/src/koffi/src/ffi.hh +59 -13
  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(); };
477
+ }
518
478
 
519
- CASE(Float32) {
520
- const ParameterInfo &param = func->parameters[i];
521
- Napi::Value value = info[param.offset];
479
+ float f = GetNumber<float>(value);
522
480
 
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
- }
528
-
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,8 +691,12 @@ 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
  {
696
+ uint8_t *own_sp = sp;
697
+ uint8_t *caller_sp = sp + 208;
698
+ BackRegisters *out_reg = (BackRegisters *)(sp + 136);
699
+
744
700
  if (env.IsExceptionPending()) [[unlikely]]
745
701
  return;
746
702
 
@@ -1074,29 +1030,22 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
1074
1030
  Napi::Value arg = str32 ? MakeStringFromUTF32(env, str32) : env.Null();
1075
1031
  arguments.Append(arg);
1076
1032
  } break;
1077
- case PrimitiveKind::Pointer: {
1033
+ case PrimitiveKind::Pointer:
1034
+ case PrimitiveKind::Callback: {
1078
1035
  #if defined(__APPLE__)
1079
1036
  args_ptr = AlignUp(args_ptr, 8);
1080
1037
  #endif
1081
1038
 
1082
1039
  void *ptr2 = *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++);
1083
1040
 
1084
- Napi::Value p = ptr2 ? WrapPointer(env, param.type->ref.type, ptr2) : env.Null();
1085
- arguments.Append(p);
1041
+ if (ptr2) {
1042
+ Napi::External<void> external = Napi::External<void>::New(env, ptr2);
1043
+ SetValueTag(external, param.type->ref.marker);
1086
1044
 
1087
- if (param.type->dispose) {
1088
- param.type->dispose(env, param.type, ptr2);
1045
+ arguments.Append(external);
1046
+ } else {
1047
+ arguments.Append(env.Null());
1089
1048
  }
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
1049
 
1101
1050
  if (param.type->dispose) {
1102
1051
  param.type->dispose(env, param.type, ptr2);
@@ -1188,37 +1137,30 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
1188
1137
 
1189
1138
  const TypeInfo *type = proto->ret.type;
1190
1139
 
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);
1140
+ // Make the call!
1141
+ Napi::Value value = func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
1200
1142
 
1201
1143
  if (env.IsExceptionPending()) [[unlikely]]
1202
1144
  return;
1203
1145
 
1204
1146
  #define RETURN_INTEGER(CType) \
1205
1147
  do { \
1206
- CType v; \
1207
- if (!TryNumber(value, &v)) [[unlikely]] { \
1148
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
1208
1149
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
1209
1150
  return; \
1210
1151
  } \
1211
1152
  \
1153
+ CType v = GetNumber<CType>(value); \
1212
1154
  out_reg->x0 = (uint64_t)v; \
1213
1155
  } while (false)
1214
1156
  #define RETURN_INTEGER_SWAP(CType) \
1215
1157
  do { \
1216
- CType v; \
1217
- if (!TryNumber(value, &v)) [[unlikely]] { \
1158
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
1218
1159
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
1219
1160
  return; \
1220
1161
  } \
1221
1162
  \
1163
+ CType v = GetNumber<CType>(value); \
1222
1164
  out_reg->x0 = (uint64_t)ReverseBytes(v); \
1223
1165
  } while (false)
1224
1166
 
@@ -1226,12 +1168,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
1226
1168
  switch (type->primitive) {
1227
1169
  case PrimitiveKind::Void: {} break;
1228
1170
  case PrimitiveKind::Bool: {
1229
- bool b;
1230
- if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
1171
+ if (!value.IsBoolean()) [[unlikely]] {
1231
1172
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
1232
1173
  return;
1233
1174
  }
1234
1175
 
1176
+ bool b = value.As<Napi::Boolean>();
1235
1177
  out_reg->x0 = (uint64_t)b;
1236
1178
  } break;
1237
1179
  case PrimitiveKind::Int8: { RETURN_INTEGER(int8_t); } break;
@@ -1270,9 +1212,24 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
1270
1212
  out_reg->x0 = (uint64_t)str32;
1271
1213
  } break;
1272
1214
  case PrimitiveKind::Pointer: {
1273
- void *ptr;
1274
- if (!PushPointer(value, type, 1, &ptr)) [[unlikely]]
1215
+ uint8_t *ptr;
1216
+
1217
+ if (CheckValueTag(value, type->ref.marker)) {
1218
+ ptr = value.As<Napi::External<uint8_t>>().Data();
1219
+ } else if (IsObject(value) && (type->ref.type->primitive == PrimitiveKind::Record ||
1220
+ type->ref.type->primitive == PrimitiveKind::Union)) {
1221
+ Napi::Object obj = value.As<Napi::Object>();
1222
+
1223
+ ptr = AllocHeap(type->ref.type->size, 16);
1224
+
1225
+ if (!PushObject(obj, type->ref.type, ptr))
1226
+ return;
1227
+ } else if (IsNullOrUndefined(value)) {
1228
+ ptr = nullptr;
1229
+ } else {
1230
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
1275
1231
  return;
1232
+ }
1276
1233
 
1277
1234
  out_reg->x0 = (uint64_t)ptr;
1278
1235
  } break;
@@ -1300,30 +1257,42 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
1300
1257
  } break;
1301
1258
  case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
1302
1259
  case PrimitiveKind::Float32: {
1303
- float f;
1304
-
1305
- if (!TryNumber(value, &f)) [[unlikely]] {
1260
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
1306
1261
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
1307
1262
  return;
1308
1263
  }
1309
1264
 
1265
+ float f = GetNumber<float>(value);
1266
+
1310
1267
  memset((uint8_t *)&out_reg->d0 + 4, 0, 4);
1311
1268
  memcpy(&out_reg->d0, &f, 4);
1312
1269
  } break;
1313
1270
  case PrimitiveKind::Float64: {
1314
- double d;
1315
-
1316
- if (!TryNumber(value, &d)) [[unlikely]] {
1271
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
1317
1272
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
1318
1273
  return;
1319
1274
  }
1320
1275
 
1276
+ double d = GetNumber<double>(value);
1321
1277
  out_reg->d0 = d;
1322
1278
  } break;
1323
1279
  case PrimitiveKind::Callback: {
1324
1280
  void *ptr;
1325
- if (!PushCallback(value, type, &ptr)) [[unlikely]]
1281
+
1282
+ if (value.IsFunction()) {
1283
+ Napi::Function func2 = value.As<Napi::Function>();
1284
+
1285
+ ptr = ReserveTrampoline(type->ref.proto, func2);
1286
+ if (!ptr) [[unlikely]]
1287
+ return;
1288
+ } else if (CheckValueTag(value, type->ref.marker)) {
1289
+ ptr = value.As<Napi::External<void>>().Data();
1290
+ } else if (IsNullOrUndefined(value)) {
1291
+ ptr = nullptr;
1292
+ } else {
1293
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
1326
1294
  return;
1295
+ }
1327
1296
 
1328
1297
  out_reg->x0 = (uint64_t)ptr;
1329
1298
  } break;
@@ -1337,6 +1306,16 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
1337
1306
  err_guard.Disable();
1338
1307
  }
1339
1308
 
1309
+ void *FindTrampolineStart()
1310
+ {
1311
+ return &Trampoline0;
1312
+ }
1313
+
1314
+ void *FindTrampolineEnd()
1315
+ {
1316
+ return &TrampolineEnd;
1317
+ }
1318
+
1340
1319
  }
1341
1320
 
1342
1321
  #endif