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,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
-
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
348
 
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,8 +483,12 @@ 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
  {
488
+ uint8_t *own_sp = sp;
489
+ uint8_t *caller_sp = sp + 168;
490
+ BackRegisters *out_reg = (BackRegisters *)(sp + 128);
491
+
523
492
  if (env.IsExceptionPending()) [[unlikely]]
524
493
  return;
525
494
 
@@ -674,21 +643,18 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
674
643
  Napi::Value arg = str32 ? MakeStringFromUTF32(env, str32) : env.Null();
675
644
  arguments.Append(arg);
676
645
  } break;
677
- case PrimitiveKind::Pointer: {
646
+ case PrimitiveKind::Pointer:
647
+ case PrimitiveKind::Callback: {
678
648
  void *ptr2 = *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++);
679
649
 
680
- Napi::Value p = ptr2 ? WrapPointer(env, param.type->ref.type, ptr2) : env.Null();
681
- arguments.Append(p);
650
+ if (ptr2) {
651
+ Napi::External<void> external = Napi::External<void>::New(env, ptr2);
652
+ SetValueTag(external, param.type->ref.marker);
682
653
 
683
- if (param.type->dispose) {
684
- param.type->dispose(env, param.type, ptr2);
654
+ arguments.Append(external);
655
+ } else {
656
+ arguments.Append(env.Null());
685
657
  }
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
658
 
693
659
  if (param.type->dispose) {
694
660
  param.type->dispose(env, param.type, ptr2);
@@ -759,37 +725,30 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
759
725
 
760
726
  const TypeInfo *type = proto->ret.type;
761
727
 
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);
728
+ // Make the call!
729
+ Napi::Value value = func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
771
730
 
772
731
  if (env.IsExceptionPending()) [[unlikely]]
773
732
  return;
774
733
 
775
734
  #define RETURN_INTEGER(CType) \
776
735
  do { \
777
- CType v; \
778
- if (!TryNumber(value, &v)) [[unlikely]] { \
736
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
779
737
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
780
738
  return; \
781
739
  } \
782
740
  \
741
+ CType v = GetNumber<CType>(value); \
783
742
  out_reg->a0 = (uint64_t)v; \
784
743
  } while (false)
785
744
  #define RETURN_INTEGER_SWAP(CType) \
786
745
  do { \
787
- CType v; \
788
- if (!TryNumber(value, &v)) [[unlikely]] { \
746
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
789
747
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
790
748
  return; \
791
749
  } \
792
750
  \
751
+ CType v = GetNumber<CType>(value); \
793
752
  out_reg->a0 = (uint64_t)ReverseBytes(v); \
794
753
  } while (false)
795
754
 
@@ -797,12 +756,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
797
756
  switch (type->primitive) {
798
757
  case PrimitiveKind::Void: {} break;
799
758
  case PrimitiveKind::Bool: {
800
- bool b;
801
- if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
759
+ if (!value.IsBoolean()) [[unlikely]] {
802
760
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
803
761
  return;
804
762
  }
805
763
 
764
+ bool b = value.As<Napi::Boolean>();
806
765
  out_reg->a0 = (uint64_t)b;
807
766
  } break;
808
767
  case PrimitiveKind::Int8: { RETURN_INTEGER(int8_t); } break;
@@ -841,9 +800,24 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
841
800
  out_reg->a0 = (uint64_t)str32;
842
801
  } break;
843
802
  case PrimitiveKind::Pointer: {
844
- void *ptr;
845
- if (!PushPointer(value, type, 1, &ptr)) [[unlikely]]
803
+ uint8_t *ptr;
804
+
805
+ if (CheckValueTag(value, type->ref.marker)) {
806
+ ptr = value.As<Napi::External<uint8_t>>().Data();
807
+ } else if (IsObject(value) && (type->ref.type->primitive == PrimitiveKind::Record ||
808
+ type->ref.type->primitive == PrimitiveKind::Union)) {
809
+ Napi::Object obj = value.As<Napi::Object>();
810
+
811
+ ptr = AllocHeap(type->ref.type->size, 16);
812
+
813
+ if (!PushObject(obj, type->ref.type, ptr))
814
+ return;
815
+ } else if (IsNullOrUndefined(value)) {
816
+ ptr = nullptr;
817
+ } else {
818
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
846
819
  return;
820
+ }
847
821
 
848
822
  out_reg->a0 = (uint64_t)ptr;
849
823
  } break;
@@ -886,28 +860,41 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
886
860
  } break;
887
861
  case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
888
862
  case PrimitiveKind::Float32: {
889
- float f;
890
- if (!TryNumber(value, &f)) [[unlikely]] {
863
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
891
864
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
892
865
  return;
893
866
  }
894
867
 
868
+ float f = GetNumber<float>(value);
895
869
  memset((uint8_t *)&out_reg->fa0 + 4, 0xFF, 4);
896
870
  memcpy(&out_reg->fa0, &f, 4);
897
871
  } break;
898
872
  case PrimitiveKind::Float64: {
899
- double d;
900
- if (!TryNumber(value, &d)) [[unlikely]] {
873
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
901
874
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
902
875
  return;
903
876
  }
904
877
 
878
+ double d = GetNumber<double>(value);
905
879
  out_reg->fa0 = d;
906
880
  } break;
907
881
  case PrimitiveKind::Callback: {
908
882
  void *ptr;
909
- if (!PushCallback(value, type, &ptr)) [[unlikely]]
883
+
884
+ if (value.IsFunction()) {
885
+ Napi::Function func2 = value.As<Napi::Function>();
886
+
887
+ ptr = ReserveTrampoline(type->ref.proto, func2);
888
+ if (!ptr) [[unlikely]]
889
+ return;
890
+ } else if (CheckValueTag(value, type->ref.marker)) {
891
+ ptr = value.As<Napi::External<void>>().Data();
892
+ } else if (IsNullOrUndefined(value)) {
893
+ ptr = nullptr;
894
+ } else {
895
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
910
896
  return;
897
+ }
911
898
 
912
899
  out_reg->a0 = (uint64_t)ptr;
913
900
  } break;
@@ -921,6 +908,16 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
921
908
  err_guard.Disable();
922
909
  }
923
910
 
911
+ void *FindTrampolineStart()
912
+ {
913
+ return &Trampoline0;
914
+ }
915
+
916
+ void *FindTrampolineEnd()
917
+ {
918
+ return &TrampolineEnd;
919
+ }
920
+
924
921
  }
925
922
 
926
923
  #endif