koffi 2.16.0-beta.2 → 2.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/build/koffi/darwin_arm64/koffi.node +0 -0
  3. package/build/koffi/darwin_x64/koffi.node +0 -0
  4. package/build/koffi/freebsd_arm64/koffi.node +0 -0
  5. package/build/koffi/freebsd_ia32/koffi.node +0 -0
  6. package/build/koffi/freebsd_x64/koffi.node +0 -0
  7. package/build/koffi/linux_arm64/koffi.node +0 -0
  8. package/build/koffi/linux_armhf/koffi.node +0 -0
  9. package/build/koffi/linux_ia32/koffi.node +0 -0
  10. package/build/koffi/linux_loong64/koffi.node +0 -0
  11. package/build/koffi/linux_riscv64d/koffi.node +0 -0
  12. package/build/koffi/linux_x64/koffi.node +0 -0
  13. package/build/koffi/musl_arm64/koffi.node +0 -0
  14. package/build/koffi/musl_x64/koffi.node +0 -0
  15. package/build/koffi/openbsd_ia32/koffi.node +0 -0
  16. package/build/koffi/openbsd_x64/koffi.node +0 -0
  17. package/build/koffi/win32_arm64/koffi.exp +0 -0
  18. package/build/koffi/win32_arm64/koffi.lib +0 -0
  19. package/build/koffi/win32_arm64/koffi.node +0 -0
  20. package/build/koffi/win32_ia32/koffi.exp +0 -0
  21. package/build/koffi/win32_ia32/koffi.lib +0 -0
  22. package/build/koffi/win32_ia32/koffi.node +0 -0
  23. package/build/koffi/win32_x64/koffi.exp +0 -0
  24. package/build/koffi/win32_x64/koffi.lib +0 -0
  25. package/build/koffi/win32_x64/koffi.node +0 -0
  26. package/index.d.ts +9 -11
  27. package/index.js +6 -9
  28. package/indirect.js +6 -9
  29. package/lib/native/base/base.cc +1 -6
  30. package/package.json +3 -3
  31. package/src/cnoke/assets/FindCNoke.cmake +27 -16
  32. package/src/cnoke/assets/toolchains.json +126 -0
  33. package/src/cnoke/cnoke.js +27 -33
  34. package/src/cnoke/src/builder.js +124 -63
  35. package/src/cnoke/src/tools.js +1 -5
  36. package/src/koffi/CMakeLists.txt +32 -21
  37. package/src/koffi/src/{abi/arm32.cc → abi_arm32.cc} +235 -246
  38. package/src/koffi/src/{abi/arm32_asm.S → abi_arm32_asm.S} +19 -15
  39. package/src/koffi/src/{abi/arm64.cc → abi_arm64.cc} +253 -300
  40. package/src/koffi/src/{abi/arm64_asm.S → abi_arm64_asm.S} +16 -10
  41. package/src/koffi/src/{abi/arm64_asm.asm → abi_arm64_asm.asm} +17 -10
  42. package/src/koffi/src/{abi/loong64_asm.S → abi_loong64_asm.S} +16 -10
  43. package/src/koffi/src/{abi/riscv64.cc → abi_riscv64.cc} +233 -244
  44. package/src/koffi/src/{abi/riscv64_asm.S → abi_riscv64_asm.S} +16 -10
  45. package/src/koffi/src/{abi/x64_sysv.cc → abi_x64_sysv.cc} +208 -220
  46. package/src/koffi/src/{abi/x64_sysv_asm.S → abi_x64_sysv_asm.S} +17 -10
  47. package/src/koffi/src/{abi/x64_win.cc → abi_x64_win.cc} +175 -230
  48. package/src/koffi/src/{abi/x64_win_asm.S → abi_x64_win_asm.S} +49 -27
  49. package/src/koffi/src/{abi/x64_win_asm.asm → abi_x64_win_asm.asm} +54 -27
  50. package/src/koffi/src/{abi/x86.cc → abi_x86.cc} +187 -252
  51. package/src/koffi/src/{abi/x86_asm.S → abi_x86_asm.S} +38 -21
  52. package/src/koffi/src/{abi/x86_asm.asm → abi_x86_asm.asm} +33 -16
  53. package/src/koffi/src/call.cc +475 -290
  54. package/src/koffi/src/call.hh +15 -18
  55. package/src/koffi/src/ffi.cc +195 -184
  56. package/src/koffi/src/ffi.hh +60 -16
  57. package/src/koffi/src/init.js +1 -0
  58. package/src/koffi/src/util.cc +113 -159
  59. package/src/koffi/src/util.hh +23 -74
  60. package/src/koffi/src/win32.cc +13 -0
  61. package/src/koffi/src/win32.hh +7 -0
  62. package/src/koffi/tools/write_trampolines.js +77 -0
  63. package/doc/README.md +0 -27
  64. package/doc/assets.ini +0 -24
  65. package/doc/build.sh +0 -9
  66. package/doc/develop.sh +0 -15
  67. package/doc/pages/404.md +0 -17
  68. package/doc/pages.ini +0 -86
  69. package/doc/static/highlight.js +0 -8
  70. package/doc/static/koffi.css +0 -11
  71. package/doc/static/koffi.png +0 -0
  72. package/doc/static/logo.webp +0 -0
  73. package/doc/static/perf_linux.png +0 -0
  74. package/doc/static/perf_windows.png +0 -0
  75. package/doc/static/print.css +0 -10
  76. package/doc/templates/code.html +0 -48
  77. package/doc/templates/page.html +0 -47
  78. package/src/koffi/cmake/raylib.cmake +0 -85
  79. package/src/koffi/cmake/sqlite3.cmake +0 -9
  80. package/src/koffi/examples/electron-builder/README.md +0 -11
  81. package/src/koffi/examples/electron-builder/package.json +0 -21
  82. package/src/koffi/examples/electron-builder/src/app.js +0 -20
  83. package/src/koffi/examples/electron-builder/src/index.html +0 -143
  84. package/src/koffi/examples/electron-builder/src/preload.js +0 -5
  85. package/src/koffi/examples/electron-forge/README.md +0 -25
  86. package/src/koffi/examples/electron-forge/forge.config.js +0 -63
  87. package/src/koffi/examples/electron-forge/package.json +0 -39
  88. package/src/koffi/examples/electron-forge/src/index.css +0 -7
  89. package/src/koffi/examples/electron-forge/src/index.html +0 -143
  90. package/src/koffi/examples/electron-forge/src/main.js +0 -52
  91. package/src/koffi/examples/electron-forge/src/preload.js +0 -5
  92. package/src/koffi/examples/electron-forge/src/renderer.js +0 -31
  93. package/src/koffi/examples/electron-forge/webpack.main.config.js +0 -11
  94. package/src/koffi/examples/electron-forge/webpack.renderer.config.js +0 -13
  95. package/src/koffi/examples/electron-forge/webpack.rules.js +0 -35
  96. package/src/koffi/examples/node-esbuild/README.md +0 -19
  97. package/src/koffi/examples/node-esbuild/index.js +0 -2
  98. package/src/koffi/examples/node-esbuild/package.json +0 -16
  99. package/src/koffi/examples/nwjs/README.md +0 -20
  100. package/src/koffi/examples/nwjs/package.json +0 -11
  101. package/src/koffi/examples/nwjs/src/index.html +0 -145
  102. package/src/koffi/examples/nwjs/src/package.json +0 -10
  103. package/src/koffi/examples/yao-pkg/README.md +0 -17
  104. package/src/koffi/examples/yao-pkg/index.js +0 -2
  105. package/src/koffi/examples/yao-pkg/package.json +0 -22
  106. package/src/koffi/src/primitives.inc +0 -39
  107. package/src/koffi/src/trampolines/armasm.inc +0 -32771
  108. package/src/koffi/src/trampolines/gnu.inc +0 -24577
  109. package/src/koffi/src/trampolines/masm32.inc +0 -32769
  110. package/src/koffi/src/trampolines/masm64.inc +0 -32769
  111. package/src/koffi/src/trampolines/prototypes.inc +0 -16388
  112. package/vendor/node-addon-api/CHANGELOG.md +0 -1272
  113. package/vendor/node-addon-api/CODE_OF_CONDUCT.md +0 -4
  114. package/vendor/node-addon-api/CONTRIBUTING.md +0 -203
  115. package/vendor/node-addon-api/appveyor.yml +0 -37
  116. package/vendor/node-addon-api/benchmark/README.md +0 -47
  117. package/vendor/node-addon-api/benchmark/binding.gyp +0 -25
  118. package/vendor/node-addon-api/benchmark/function_args.cc +0 -250
  119. package/vendor/node-addon-api/benchmark/function_args.js +0 -60
  120. package/vendor/node-addon-api/benchmark/index.js +0 -34
  121. package/vendor/node-addon-api/benchmark/property_descriptor.cc +0 -84
  122. package/vendor/node-addon-api/benchmark/property_descriptor.js +0 -38
  123. package/vendor/node-addon-api/common.gypi +0 -21
  124. package/vendor/node-addon-api/doc/README.md +0 -145
  125. package/vendor/node-addon-api/doc/addon.md +0 -163
  126. package/vendor/node-addon-api/doc/array.md +0 -81
  127. package/vendor/node-addon-api/doc/array_buffer.md +0 -165
  128. package/vendor/node-addon-api/doc/async_context.md +0 -86
  129. package/vendor/node-addon-api/doc/async_operations.md +0 -31
  130. package/vendor/node-addon-api/doc/async_worker.md +0 -428
  131. package/vendor/node-addon-api/doc/async_worker_variants.md +0 -578
  132. package/vendor/node-addon-api/doc/basic_env.md +0 -200
  133. package/vendor/node-addon-api/doc/bigint.md +0 -97
  134. package/vendor/node-addon-api/doc/boolean.md +0 -68
  135. package/vendor/node-addon-api/doc/buffer.md +0 -245
  136. package/vendor/node-addon-api/doc/callback_scope.md +0 -54
  137. package/vendor/node-addon-api/doc/callbackinfo.md +0 -97
  138. package/vendor/node-addon-api/doc/checker-tool.md +0 -32
  139. package/vendor/node-addon-api/doc/class_property_descriptor.md +0 -123
  140. package/vendor/node-addon-api/doc/cmake-js.md +0 -87
  141. package/vendor/node-addon-api/doc/contributing/creating_a_release.md +0 -95
  142. package/vendor/node-addon-api/doc/conversion-tool.md +0 -28
  143. package/vendor/node-addon-api/doc/dataview.md +0 -248
  144. package/vendor/node-addon-api/doc/date.md +0 -68
  145. package/vendor/node-addon-api/doc/env.md +0 -87
  146. package/vendor/node-addon-api/doc/error.md +0 -120
  147. package/vendor/node-addon-api/doc/error_handling.md +0 -266
  148. package/vendor/node-addon-api/doc/escapable_handle_scope.md +0 -80
  149. package/vendor/node-addon-api/doc/external.md +0 -79
  150. package/vendor/node-addon-api/doc/external_buffer.md +0 -18
  151. package/vendor/node-addon-api/doc/finalization.md +0 -153
  152. package/vendor/node-addon-api/doc/function.md +0 -402
  153. package/vendor/node-addon-api/doc/function_reference.md +0 -238
  154. package/vendor/node-addon-api/doc/generator.md +0 -13
  155. package/vendor/node-addon-api/doc/handle_scope.md +0 -77
  156. package/vendor/node-addon-api/doc/hierarchy.md +0 -95
  157. package/vendor/node-addon-api/doc/instance_wrap.md +0 -408
  158. package/vendor/node-addon-api/doc/maybe.md +0 -76
  159. package/vendor/node-addon-api/doc/memory_management.md +0 -27
  160. package/vendor/node-addon-api/doc/name.md +0 -29
  161. package/vendor/node-addon-api/doc/node-gyp.md +0 -82
  162. package/vendor/node-addon-api/doc/number.md +0 -163
  163. package/vendor/node-addon-api/doc/object.md +0 -411
  164. package/vendor/node-addon-api/doc/object_lifetime_management.md +0 -83
  165. package/vendor/node-addon-api/doc/object_reference.md +0 -117
  166. package/vendor/node-addon-api/doc/object_wrap.md +0 -604
  167. package/vendor/node-addon-api/doc/prebuild_tools.md +0 -16
  168. package/vendor/node-addon-api/doc/promises.md +0 -130
  169. package/vendor/node-addon-api/doc/property_descriptor.md +0 -286
  170. package/vendor/node-addon-api/doc/propertylvalue.md +0 -50
  171. package/vendor/node-addon-api/doc/range_error.md +0 -59
  172. package/vendor/node-addon-api/doc/reference.md +0 -113
  173. package/vendor/node-addon-api/doc/setup.md +0 -115
  174. package/vendor/node-addon-api/doc/string.md +0 -93
  175. package/vendor/node-addon-api/doc/symbol.md +0 -61
  176. package/vendor/node-addon-api/doc/syntax_error.md +0 -66
  177. package/vendor/node-addon-api/doc/threadsafe.md +0 -121
  178. package/vendor/node-addon-api/doc/threadsafe_function.md +0 -290
  179. package/vendor/node-addon-api/doc/type_error.md +0 -59
  180. package/vendor/node-addon-api/doc/type_taggable.md +0 -40
  181. package/vendor/node-addon-api/doc/typed_array.md +0 -78
  182. package/vendor/node-addon-api/doc/typed_array_of.md +0 -137
  183. package/vendor/node-addon-api/doc/typed_threadsafe_function.md +0 -306
  184. package/vendor/node-addon-api/doc/value.md +0 -368
  185. package/vendor/node-addon-api/doc/version_management.md +0 -43
  186. package/vendor/node-addon-api/eslint.config.js +0 -5
  187. package/vendor/node-addon-api/except.gypi +0 -25
  188. package/vendor/node-addon-api/index.js +0 -14
  189. package/vendor/node-addon-api/node_addon_api.gyp +0 -42
  190. package/vendor/node-addon-api/node_api.gyp +0 -9
  191. package/vendor/node-addon-api/noexcept.gypi +0 -26
  192. package/vendor/node-addon-api/nothing.c +0 -0
  193. package/vendor/node-addon-api/package-support.json +0 -21
  194. package/vendor/node-addon-api/package.json +0 -480
  195. package/vendor/node-addon-api/release-please-config.json +0 -15
  196. package/vendor/node-addon-api/test/README.md +0 -91
  197. package/vendor/node-addon-api/test/addon.cc +0 -44
  198. package/vendor/node-addon-api/test/addon.js +0 -7
  199. package/vendor/node-addon-api/test/addon_build/index.js +0 -49
  200. package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +0 -18
  201. package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +0 -63
  202. package/vendor/node-addon-api/test/addon_build/tpl/index.js +0 -9
  203. package/vendor/node-addon-api/test/addon_build/tpl/package.json +0 -11
  204. package/vendor/node-addon-api/test/addon_data.cc +0 -98
  205. package/vendor/node-addon-api/test/addon_data.js +0 -24
  206. package/vendor/node-addon-api/test/array_buffer.cc +0 -243
  207. package/vendor/node-addon-api/test/array_buffer.js +0 -70
  208. package/vendor/node-addon-api/test/async_context.cc +0 -36
  209. package/vendor/node-addon-api/test/async_context.js +0 -122
  210. package/vendor/node-addon-api/test/async_progress_queue_worker.cc +0 -248
  211. package/vendor/node-addon-api/test/async_progress_queue_worker.js +0 -180
  212. package/vendor/node-addon-api/test/async_progress_worker.cc +0 -357
  213. package/vendor/node-addon-api/test/async_progress_worker.js +0 -200
  214. package/vendor/node-addon-api/test/async_worker.cc +0 -341
  215. package/vendor/node-addon-api/test/async_worker.js +0 -264
  216. package/vendor/node-addon-api/test/async_worker_nocallback.js +0 -19
  217. package/vendor/node-addon-api/test/async_worker_persistent.cc +0 -63
  218. package/vendor/node-addon-api/test/async_worker_persistent.js +0 -24
  219. package/vendor/node-addon-api/test/basic_types/array.cc +0 -40
  220. package/vendor/node-addon-api/test/basic_types/array.js +0 -34
  221. package/vendor/node-addon-api/test/basic_types/boolean.cc +0 -40
  222. package/vendor/node-addon-api/test/basic_types/boolean.js +0 -34
  223. package/vendor/node-addon-api/test/basic_types/number.cc +0 -105
  224. package/vendor/node-addon-api/test/basic_types/number.js +0 -115
  225. package/vendor/node-addon-api/test/basic_types/value.cc +0 -177
  226. package/vendor/node-addon-api/test/basic_types/value.js +0 -173
  227. package/vendor/node-addon-api/test/bigint.cc +0 -91
  228. package/vendor/node-addon-api/test/bigint.js +0 -53
  229. package/vendor/node-addon-api/test/binding-swallowexcept.cc +0 -12
  230. package/vendor/node-addon-api/test/binding.cc +0 -200
  231. package/vendor/node-addon-api/test/binding.gyp +0 -160
  232. package/vendor/node-addon-api/test/buffer.cc +0 -185
  233. package/vendor/node-addon-api/test/buffer.h +0 -26
  234. package/vendor/node-addon-api/test/buffer.js +0 -150
  235. package/vendor/node-addon-api/test/buffer_new_or_copy-inl.h +0 -68
  236. package/vendor/node-addon-api/test/buffer_no_external.cc +0 -24
  237. package/vendor/node-addon-api/test/callbackInfo.cc +0 -27
  238. package/vendor/node-addon-api/test/callbackInfo.js +0 -9
  239. package/vendor/node-addon-api/test/callbackscope.cc +0 -39
  240. package/vendor/node-addon-api/test/callbackscope.js +0 -49
  241. package/vendor/node-addon-api/test/child_processes/addon.js +0 -11
  242. package/vendor/node-addon-api/test/child_processes/addon_data.js +0 -24
  243. package/vendor/node-addon-api/test/child_processes/objectwrap_function.js +0 -22
  244. package/vendor/node-addon-api/test/child_processes/threadsafe_function_exception.js +0 -33
  245. package/vendor/node-addon-api/test/child_processes/typed_threadsafe_function_exception.js +0 -19
  246. package/vendor/node-addon-api/test/common/index.js +0 -246
  247. package/vendor/node-addon-api/test/common/test_helper.h +0 -71
  248. package/vendor/node-addon-api/test/dataview/dataview.cc +0 -48
  249. package/vendor/node-addon-api/test/dataview/dataview.js +0 -35
  250. package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +0 -115
  251. package/vendor/node-addon-api/test/dataview/dataview_read_write.js +0 -92
  252. package/vendor/node-addon-api/test/date.cc +0 -45
  253. package/vendor/node-addon-api/test/date.js +0 -18
  254. package/vendor/node-addon-api/test/env_cleanup.cc +0 -100
  255. package/vendor/node-addon-api/test/env_cleanup.js +0 -55
  256. package/vendor/node-addon-api/test/env_misc.cc +0 -25
  257. package/vendor/node-addon-api/test/env_misc.js +0 -12
  258. package/vendor/node-addon-api/test/error.cc +0 -436
  259. package/vendor/node-addon-api/test/error.js +0 -111
  260. package/vendor/node-addon-api/test/error_handling_for_primitives.cc +0 -13
  261. package/vendor/node-addon-api/test/error_handling_for_primitives.js +0 -29
  262. package/vendor/node-addon-api/test/error_terminating_environment.js +0 -99
  263. package/vendor/node-addon-api/test/except_all.cc +0 -22
  264. package/vendor/node-addon-api/test/except_all.js +0 -14
  265. package/vendor/node-addon-api/test/exports.js +0 -19
  266. package/vendor/node-addon-api/test/external.cc +0 -85
  267. package/vendor/node-addon-api/test/external.js +0 -85
  268. package/vendor/node-addon-api/test/finalizer_order.cc +0 -152
  269. package/vendor/node-addon-api/test/finalizer_order.js +0 -98
  270. package/vendor/node-addon-api/test/function.cc +0 -338
  271. package/vendor/node-addon-api/test/function.js +0 -137
  272. package/vendor/node-addon-api/test/function_reference.cc +0 -204
  273. package/vendor/node-addon-api/test/function_reference.js +0 -157
  274. package/vendor/node-addon-api/test/globalObject/global_object.cc +0 -61
  275. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +0 -31
  276. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +0 -58
  277. package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +0 -40
  278. package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +0 -56
  279. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +0 -28
  280. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +0 -46
  281. package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +0 -31
  282. package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +0 -56
  283. package/vendor/node-addon-api/test/handlescope.cc +0 -86
  284. package/vendor/node-addon-api/test/handlescope.js +0 -16
  285. package/vendor/node-addon-api/test/index.js +0 -160
  286. package/vendor/node-addon-api/test/maybe/check.cc +0 -69
  287. package/vendor/node-addon-api/test/maybe/index.js +0 -50
  288. package/vendor/node-addon-api/test/memory_management.cc +0 -18
  289. package/vendor/node-addon-api/test/memory_management.js +0 -9
  290. package/vendor/node-addon-api/test/movable_callbacks.cc +0 -23
  291. package/vendor/node-addon-api/test/movable_callbacks.js +0 -21
  292. package/vendor/node-addon-api/test/name.cc +0 -110
  293. package/vendor/node-addon-api/test/name.js +0 -59
  294. package/vendor/node-addon-api/test/napi_child.js +0 -14
  295. package/vendor/node-addon-api/test/object/delete_property.cc +0 -38
  296. package/vendor/node-addon-api/test/object/delete_property.js +0 -41
  297. package/vendor/node-addon-api/test/object/finalizer.cc +0 -30
  298. package/vendor/node-addon-api/test/object/finalizer.js +0 -28
  299. package/vendor/node-addon-api/test/object/get_property.cc +0 -34
  300. package/vendor/node-addon-api/test/object/get_property.js +0 -40
  301. package/vendor/node-addon-api/test/object/has_own_property.cc +0 -34
  302. package/vendor/node-addon-api/test/object/has_own_property.js +0 -34
  303. package/vendor/node-addon-api/test/object/has_property.cc +0 -38
  304. package/vendor/node-addon-api/test/object/has_property.js +0 -37
  305. package/vendor/node-addon-api/test/object/object.cc +0 -430
  306. package/vendor/node-addon-api/test/object/object.js +0 -218
  307. package/vendor/node-addon-api/test/object/object_deprecated.cc +0 -70
  308. package/vendor/node-addon-api/test/object/object_deprecated.js +0 -42
  309. package/vendor/node-addon-api/test/object/object_freeze_seal.cc +0 -25
  310. package/vendor/node-addon-api/test/object/object_freeze_seal.js +0 -61
  311. package/vendor/node-addon-api/test/object/set_property.cc +0 -45
  312. package/vendor/node-addon-api/test/object/set_property.js +0 -30
  313. package/vendor/node-addon-api/test/object/subscript_operator.cc +0 -58
  314. package/vendor/node-addon-api/test/object/subscript_operator.js +0 -17
  315. package/vendor/node-addon-api/test/object_reference.cc +0 -417
  316. package/vendor/node-addon-api/test/object_reference.js +0 -262
  317. package/vendor/node-addon-api/test/objectwrap.cc +0 -295
  318. package/vendor/node-addon-api/test/objectwrap.js +0 -309
  319. package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +0 -26
  320. package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +0 -18
  321. package/vendor/node-addon-api/test/objectwrap_function.cc +0 -43
  322. package/vendor/node-addon-api/test/objectwrap_function.js +0 -6
  323. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +0 -30
  324. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +0 -13
  325. package/vendor/node-addon-api/test/objectwrap_removewrap.cc +0 -45
  326. package/vendor/node-addon-api/test/objectwrap_removewrap.js +0 -32
  327. package/vendor/node-addon-api/test/objectwrap_worker_thread.js +0 -20
  328. package/vendor/node-addon-api/test/promise.cc +0 -111
  329. package/vendor/node-addon-api/test/promise.js +0 -43
  330. package/vendor/node-addon-api/test/reference.cc +0 -78
  331. package/vendor/node-addon-api/test/reference.js +0 -20
  332. package/vendor/node-addon-api/test/require_basic_finalizers/index.js +0 -38
  333. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/addon.cc +0 -12
  334. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/binding.gyp +0 -48
  335. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/index.js +0 -3
  336. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/package.json +0 -11
  337. package/vendor/node-addon-api/test/run_script.cc +0 -56
  338. package/vendor/node-addon-api/test/run_script.js +0 -45
  339. package/vendor/node-addon-api/test/symbol.cc +0 -79
  340. package/vendor/node-addon-api/test/symbol.js +0 -66
  341. package/vendor/node-addon-api/test/testUtil.js +0 -54
  342. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +0 -230
  343. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +0 -225
  344. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +0 -155
  345. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +0 -13
  346. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_exception.cc +0 -50
  347. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_exception.js +0 -20
  348. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +0 -125
  349. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +0 -14
  350. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +0 -27
  351. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +0 -7
  352. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +0 -240
  353. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +0 -59
  354. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +0 -55
  355. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +0 -98
  356. package/vendor/node-addon-api/test/thunking_manual.cc +0 -127
  357. package/vendor/node-addon-api/test/thunking_manual.js +0 -16
  358. package/vendor/node-addon-api/test/type_taggable.cc +0 -66
  359. package/vendor/node-addon-api/test/type_taggable.js +0 -59
  360. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +0 -215
  361. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +0 -188
  362. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +0 -120
  363. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +0 -14
  364. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_exception.cc +0 -39
  365. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_exception.js +0 -13
  366. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +0 -127
  367. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +0 -14
  368. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +0 -32
  369. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +0 -8
  370. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +0 -237
  371. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +0 -59
  372. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +0 -67
  373. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +0 -98
  374. package/vendor/node-addon-api/test/typedarray-bigint.js +0 -58
  375. package/vendor/node-addon-api/test/typedarray.cc +0 -413
  376. package/vendor/node-addon-api/test/typedarray.js +0 -103
  377. package/vendor/node-addon-api/test/value_type_cast.cc +0 -60
  378. package/vendor/node-addon-api/test/value_type_cast.js +0 -106
  379. package/vendor/node-addon-api/test/version_management.cc +0 -28
  380. package/vendor/node-addon-api/test/version_management.js +0 -29
  381. package/vendor/node-addon-api/tools/README.md +0 -73
  382. package/vendor/node-addon-api/tools/check-napi.js +0 -99
  383. package/vendor/node-addon-api/tools/clang-format.js +0 -71
  384. package/vendor/node-addon-api/tools/conversion.js +0 -301
  385. package/vendor/node-addon-api/unit-test/README.md +0 -28
  386. package/vendor/node-addon-api/unit-test/binding-file-template.js +0 -39
  387. package/vendor/node-addon-api/unit-test/binding.gyp +0 -72
  388. package/vendor/node-addon-api/unit-test/exceptions.js +0 -32
  389. package/vendor/node-addon-api/unit-test/generate-binding-cc.js +0 -61
  390. package/vendor/node-addon-api/unit-test/injectTestParams.js +0 -101
  391. package/vendor/node-addon-api/unit-test/listOfTestModules.js +0 -88
  392. package/vendor/node-addon-api/unit-test/matchModules.js +0 -65
  393. package/vendor/node-addon-api/unit-test/setup.js +0 -13
  394. package/vendor/node-addon-api/unit-test/spawnTask.js +0 -26
  395. package/vendor/node-addon-api/unit-test/test.js +0 -30
  396. package/vendor/node-api-headers/CHANGELOG.md +0 -130
  397. package/vendor/node-api-headers/CODE_OF_CONDUCT.md +0 -4
  398. package/vendor/node-api-headers/CONTRIBUTING.md +0 -32
  399. package/vendor/node-api-headers/CREATING_A_RELEASE.md +0 -68
  400. package/vendor/node-api-headers/index.js +0 -17
  401. package/vendor/node-api-headers/lib/clang-utils.js +0 -50
  402. package/vendor/node-api-headers/lib/parse-utils.js +0 -92
  403. package/vendor/node-api-headers/package.json +0 -59
  404. package/vendor/node-api-headers/release-please-config.json +0 -12
  405. package/vendor/node-api-headers/scripts/update-headers.js +0 -246
  406. package/vendor/node-api-headers/scripts/write-symbols.js +0 -154
  407. package/vendor/node-api-headers/scripts/write-win32-def.js +0 -52
  408. package/vendor/node-api-headers/symbols.js +0 -257
  409. package/vendor/node-api-headers/test/parse-utils.js +0 -21
  410. /package/doc/{pages/benchmarks.md → benchmarks.md} +0 -0
  411. /package/doc/{pages/callbacks.md → callbacks.md} +0 -0
  412. /package/doc/{pages/contribute.md → contribute.md} +0 -0
  413. /package/doc/{pages/functions.md → functions.md} +0 -0
  414. /package/doc/{pages/index.md → index.md} +0 -0
  415. /package/doc/{pages/input.md → input.md} +0 -0
  416. /package/doc/{pages/migration.md → migration.md} +0 -0
  417. /package/doc/{pages/misc.md → misc.md} +0 -0
  418. /package/doc/{pages/output.md → output.md} +0 -0
  419. /package/doc/{pages/packaging.md → packaging.md} +0 -0
  420. /package/doc/{pages/platforms.md → platforms.md} +0 -0
  421. /package/doc/{pages/pointers.md → pointers.md} +0 -0
  422. /package/doc/{pages/start.md → start.md} +0 -0
  423. /package/doc/{pages/unions.md → unions.md} +0 -0
  424. /package/doc/{pages/variables.md → variables.md} +0 -0
  425. /package/src/koffi/src/{abi/loong64.cc → abi_loong64.cc} +0 -0
@@ -4,9 +4,9 @@
4
4
  #if defined(__arm__) || (defined(__M_ARM) && !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
 
11
11
  #include <napi.h>
12
12
  #include <signal.h>
@@ -38,9 +38,10 @@ extern "C" uint64_t ForwardCallXGG(const void *func, uint8_t *sp, uint8_t **out_
38
38
  extern "C" float ForwardCallXF(const void *func, uint8_t *sp, uint8_t **out_old_sp);
39
39
  extern "C" HfaRet ForwardCallXDDDD(const void *func, uint8_t *sp, uint8_t **out_old_sp);
40
40
 
41
- extern "C" napi_value CallSwitchStack(Napi::Function *func, size_t argc, napi_value *argv,
42
- uint8_t *old_sp, Span<uint8_t> *new_stack,
43
- napi_value (*call)(Napi::Function *func, size_t argc, napi_value *argv));
41
+ extern "C" uint8_t Trampoline0;
42
+ extern "C" uint8_t TrampolineEnd;
43
+ extern "C" void *FindTrampolineStart();
44
+ extern "C" void *FindTrampolineEnd();
44
45
 
45
46
  static int IsHFA(const TypeInfo *type)
46
47
  {
@@ -199,73 +200,54 @@ bool AnalyseFunction(Napi::Env, InstanceData *, FunctionInfo *func)
199
200
 
200
201
  bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
201
202
  {
202
- // Unlike other call conventions, here we put the general-purpose registers before the stack, behind the vector ones).
203
- // In the armv7hf calling convention, some arguments can end up partially in GPR, partially in the stack.
204
- uint32_t *vec_ptr = AllocStack<uint32_t>(20 * 4 + func->args_size);
205
- uint32_t *gpr_ptr = vec_ptr + 16;
206
- uint32_t *args_ptr = vec_ptr + 20;
207
-
208
- if (!vec_ptr) [[unlikely]]
203
+ uint32_t *args_ptr = nullptr;
204
+ uint32_t *gpr_ptr = nullptr;
205
+ uint32_t *vec_ptr = nullptr;
206
+
207
+ // Unlike other call conventions, here we put the general-purpose
208
+ // registers just before the stack (so behind the vector ones).
209
+ // In the armv7hf calling convention, some arguments can end up
210
+ // partially in GPR, partially in the stack.
211
+ if (!AllocStack(func->args_size, 16, &args_ptr)) [[unlikely]]
212
+ return false;
213
+ if (!AllocStack(4 * 4, 8, &gpr_ptr)) [[unlikely]]
214
+ return false;
215
+ if (!AllocStack(8 * 8, 8, &vec_ptr)) [[unlikely]]
209
216
  return false;
210
217
  if (func->ret.use_memory) {
211
218
  return_ptr = AllocHeap(func->ret.type->size, 16);
212
219
  *(uint8_t **)(gpr_ptr++) = return_ptr;
213
220
  }
214
221
 
215
- Size i = -1;
216
-
217
- static const void *const DispatchTable[] = {
218
- #define PRIMITIVE(Name) && Name,
219
- #include "../primitives.inc"
220
- };
221
-
222
- #define LOOP
223
- #define CASE(Primitive) \
224
- do { \
225
- PrimitiveKind next = func->primitives[++i]; \
226
- goto *DispatchTable[(int)next]; \
227
- } while (false); \
228
- Primitive:
229
- #define OR(Primitive) \
230
- Primitive:
231
-
232
222
  #define PUSH_INTEGER_32(CType) \
233
223
  do { \
234
- const ParameterInfo &param = func->parameters[i]; \
235
- Napi::Value value = info[param.offset]; \
236
- \
237
- CType v; \
238
- if (!TryNumber(value, &v)) [[unlikely]] { \
224
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
239
225
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
240
226
  return false; \
241
227
  } \
242
228
  \
229
+ CType v = GetNumber<CType>(value); \
243
230
  *((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint32_t)v; \
244
231
  } while (false)
245
232
  #define PUSH_INTEGER_32_SWAP(CType) \
246
233
  do { \
247
- const ParameterInfo &param = func->parameters[i]; \
248
- Napi::Value value = info[param.offset]; \
249
- \
250
- CType v; \
251
- if (!TryNumber(value, &v)) [[unlikely]] { \
234
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
252
235
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
253
236
  return false; \
254
237
  } \
255
238
  \
239
+ CType v = GetNumber<CType>(value); \
256
240
  *((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint32_t)ReverseBytes(v); \
257
241
  } while (false)
258
242
  #define PUSH_INTEGER_64(CType) \
259
243
  do { \
260
- const ParameterInfo &param = func->parameters[i]; \
261
- Napi::Value value = info[param.offset]; \
262
- \
263
- CType v; \
264
- if (!TryNumber(value, &v)) [[unlikely]] { \
244
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
265
245
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
266
246
  return false; \
267
247
  } \
268
248
  \
249
+ CType v = GetNumber<CType>(value); \
250
+ \
269
251
  if (param.gpr_count) [[likely]] { \
270
252
  gpr_ptr = AlignUp(gpr_ptr, 8); \
271
253
  *(uint64_t *)gpr_ptr = (uint64_t)v; \
@@ -278,15 +260,13 @@ bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
278
260
  } while (false)
279
261
  #define PUSH_INTEGER_64_SWAP(CType) \
280
262
  do { \
281
- const ParameterInfo &param = func->parameters[i]; \
282
- Napi::Value value = info[param.offset]; \
283
- \
284
- CType v; \
285
- if (!TryNumber(value, &v)) [[unlikely]] { \
263
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
286
264
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
287
265
  return false; \
288
266
  } \
289
267
  \
268
+ CType v = GetNumber<CType>(value); \
269
+ \
290
270
  if (param.gpr_count) [[likely]] { \
291
271
  gpr_ptr = AlignUp(gpr_ptr, 8); \
292
272
  *(uint64_t *)gpr_ptr = (uint64_t)ReverseBytes(v); \
@@ -298,170 +278,148 @@ bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
298
278
  } \
299
279
  } while (false)
300
280
 
301
- LOOP {
302
- CASE(Void) { K_UNREACHABLE(); };
303
-
304
- CASE(Bool) {
305
- const ParameterInfo &param = func->parameters[i];
306
- Napi::Value value = info[param.offset];
307
-
308
- bool b;
309
- if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
310
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
311
- return false;
312
- }
281
+ // Push arguments
282
+ for (Size i = 0; i < func->parameters.len; i++) {
283
+ const ParameterInfo &param = func->parameters[i];
284
+ K_ASSERT(param.directions >= 1 && param.directions <= 3);
313
285
 
314
- *((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint32_t)b;
315
- };
316
-
317
- CASE(Int8) { PUSH_INTEGER_32(int8_t); };
318
- CASE(UInt8) { PUSH_INTEGER_32(uint8_t); };
319
- CASE(Int16) { PUSH_INTEGER_32(int16_t); };
320
- CASE(Int16S) { PUSH_INTEGER_32_SWAP(int16_t); };
321
- CASE(UInt16) { PUSH_INTEGER_32(uint16_t); };
322
- CASE(UInt16S) { PUSH_INTEGER_32_SWAP(uint16_t); };
323
- CASE(Int32) { PUSH_INTEGER_32(int32_t); };
324
- CASE(Int32S) { PUSH_INTEGER_32_SWAP(int32_t); };
325
- CASE(UInt32) { PUSH_INTEGER_32(uint32_t); };
326
- CASE(UInt32S) { PUSH_INTEGER_32_SWAP(uint32_t); };
327
- CASE(Int64) { PUSH_INTEGER_64(int64_t); };
328
- CASE(Int64S) { PUSH_INTEGER_64_SWAP(int64_t); };
329
- CASE(UInt64) { PUSH_INTEGER_64(uint64_t); };
330
- CASE(UInt64S) { PUSH_INTEGER_64_SWAP(uint64_t); };
331
-
332
- CASE(String) {
333
- const ParameterInfo &param = func->parameters[i];
334
- Napi::Value value = info[param.offset];
286
+ Napi::Value value = info[param.offset];
335
287
 
336
- const char *str;
337
- if (!PushString(value, param.directions, &str)) [[unlikely]]
338
- return false;
288
+ switch (param.type->primitive) {
289
+ case PrimitiveKind::Void: { K_UNREACHABLE(); } break;
339
290
 
340
- *(const char **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str;
341
- };
342
- CASE(String16) {
343
- const ParameterInfo &param = func->parameters[i];
344
- Napi::Value value = info[param.offset];
291
+ case PrimitiveKind::Bool: {
292
+ if (!value.IsBoolean()) [[unlikely]] {
293
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
294
+ return false;
295
+ }
345
296
 
346
- const char16_t *str16;
347
- if (!PushString16(value, param.directions, &str16)) [[unlikely]]
348
- return false;
297
+ bool b = value.As<Napi::Boolean>();
298
+ *((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint32_t)b;
299
+ } break;
300
+ case PrimitiveKind::Int8: { PUSH_INTEGER_32(int8_t); } break;
301
+ case PrimitiveKind::UInt8: { PUSH_INTEGER_32(uint8_t); } break;
302
+ case PrimitiveKind::Int16: { PUSH_INTEGER_32(int16_t); } break;
303
+ case PrimitiveKind::Int16S: { PUSH_INTEGER_32_SWAP(int16_t); } break;
304
+ case PrimitiveKind::UInt16: { PUSH_INTEGER_32(uint16_t); } break;
305
+ case PrimitiveKind::UInt16S: { PUSH_INTEGER_32_SWAP(uint16_t); } break;
306
+ case PrimitiveKind::Int32: { PUSH_INTEGER_32(int32_t); } break;
307
+ case PrimitiveKind::Int32S: { PUSH_INTEGER_32_SWAP(int32_t); } break;
308
+ case PrimitiveKind::UInt32: { PUSH_INTEGER_32(uint32_t); } break;
309
+ case PrimitiveKind::UInt32S: { PUSH_INTEGER_32_SWAP(uint32_t); } break;
310
+ case PrimitiveKind::Int64: { PUSH_INTEGER_64(int64_t); } break;
311
+ case PrimitiveKind::Int64S: { PUSH_INTEGER_64_SWAP(int64_t); } break;
312
+ case PrimitiveKind::UInt64: { PUSH_INTEGER_64(uint64_t); } break;
313
+ case PrimitiveKind::UInt64S: { PUSH_INTEGER_64_SWAP(uint64_t); } break;
314
+ case PrimitiveKind::String: {
315
+ const char *str;
316
+ if (!PushString(value, param.directions, &str)) [[unlikely]]
317
+ return false;
349
318
 
350
- *(const char16_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str16;
351
- };
352
- CASE(String32) {
353
- const ParameterInfo &param = func->parameters[i];
354
- Napi::Value value = info[param.offset];
319
+ *(const char **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str;
320
+ } break;
321
+ case PrimitiveKind::String16: {
322
+ const char16_t *str16;
323
+ if (!PushString16(value, param.directions, &str16)) [[unlikely]]
324
+ return false;
355
325
 
356
- const char32_t *str32;
357
- if (!PushString32(value, param.directions, &str32)) [[unlikely]]
358
- return false;
326
+ *(const char16_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str16;
327
+ } break;
328
+ case PrimitiveKind::String32: {
329
+ const char32_t *str32;
330
+ if (!PushString32(value, param.directions, &str32)) [[unlikely]]
331
+ return false;
359
332
 
360
- *(const char32_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str32;
361
- };
333
+ *(const char32_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str32;
334
+ } break;
335
+ case PrimitiveKind::Pointer: {
336
+ void *ptr;
337
+ if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
338
+ return false;
362
339
 
363
- CASE(Pointer) {
364
- const ParameterInfo &param = func->parameters[i];
365
- Napi::Value value = info[param.offset];
340
+ *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
341
+ } break;
342
+ case PrimitiveKind::Record:
343
+ case PrimitiveKind::Union: {
344
+ if (!IsObject(value)) [[unlikely]] {
345
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected object", GetValueType(instance, value));
346
+ return false;
347
+ }
366
348
 
367
- void *ptr;
368
- if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
369
- return false;
349
+ Napi::Object obj = value.As<Napi::Object>();
370
350
 
371
- *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
372
- };
351
+ if (param.vec_count) {
352
+ if (!PushObject(obj, param.type, (uint8_t *)vec_ptr))
353
+ return false;
354
+ vec_ptr += param.vec_count;
355
+ } else if (param.gpr_count) {
356
+ K_ASSERT(param.type->align <= 8);
373
357
 
374
- CASE(Record) OR(Union) {
375
- const ParameterInfo &param = func->parameters[i];
376
- Napi::Value value = info[param.offset];
358
+ int16_t align = (param.type->align <= 4) ? 4 : 8;
359
+ gpr_ptr = AlignUp(gpr_ptr, align);
377
360
 
378
- if (!IsObject(value)) [[unlikely]] {
379
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected object", GetValueType(instance, value));
380
- return false;
381
- }
361
+ if (!PushObject(obj, param.type, (uint8_t *)gpr_ptr))
362
+ return false;
382
363
 
383
- Napi::Object obj = value.As<Napi::Object>();
364
+ gpr_ptr += param.gpr_count;
365
+ args_ptr += (param.type->size - param.gpr_count * 4 + 3) / 4;
366
+ } else if (param.type->size) {
367
+ int16_t align = (param.type->align <= 4) ? 4 : 8;
368
+ args_ptr = AlignUp(args_ptr, align);
384
369
 
385
- if (param.vec_count) {
386
- if (!PushObject(obj, param.type, (uint8_t *)vec_ptr))
370
+ if (!PushObject(obj, param.type, (uint8_t *)args_ptr))
371
+ return false;
372
+ args_ptr += (param.type->size + 3) / 4;
373
+ }
374
+ } break;
375
+ case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
376
+ case PrimitiveKind::Float32: {
377
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
378
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
387
379
  return false;
388
- vec_ptr += param.vec_count;
389
- } else if (param.gpr_count) {
390
- K_ASSERT(param.type->align <= 8);
380
+ }
391
381
 
392
- int16_t align = (param.type->align <= 4) ? 4 : 8;
393
- gpr_ptr = AlignUp(gpr_ptr, align);
382
+ float f = GetNumber<float>(value);
394
383
 
395
- if (!PushObject(obj, param.type, (uint8_t *)gpr_ptr))
384
+ if (param.vec_count) [[likely]] {
385
+ *(float *)(vec_ptr++) = f;
386
+ } else if (param.gpr_count) {
387
+ *(float *)(gpr_ptr++) = f;
388
+ } else {
389
+ *(float *)(args_ptr++) = f;
390
+ }
391
+ } break;
392
+ case PrimitiveKind::Float64: {
393
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
394
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
396
395
  return false;
396
+ }
397
397
 
398
- gpr_ptr += param.gpr_count;
399
- args_ptr += (param.type->size - param.gpr_count * 4 + 3) / 4;
400
- } else if (param.type->size) {
401
- int16_t align = (param.type->align <= 4) ? 4 : 8;
402
- args_ptr = AlignUp(args_ptr, align);
398
+ double d = GetNumber<double>(value);
403
399
 
404
- if (!PushObject(obj, param.type, (uint8_t *)args_ptr))
400
+ if (param.vec_count) [[likely]] {
401
+ *(double *)vec_ptr = d;
402
+ vec_ptr += 2;
403
+ } else if (param.gpr_count) {
404
+ gpr_ptr = AlignUp(gpr_ptr, 8);
405
+ *(double *)gpr_ptr = d;
406
+ gpr_ptr += 2;
407
+ } else {
408
+ args_ptr = AlignUp(args_ptr, 8);
409
+ *(double *)args_ptr = d;
410
+ args_ptr += 2;
411
+ }
412
+ } break;
413
+ case PrimitiveKind::Callback: {
414
+ void *ptr;
415
+ if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
405
416
  return false;
406
- args_ptr += (param.type->size + 3) / 4;
407
- }
408
- };
409
- CASE(Array) { K_UNREACHABLE(); };
410
-
411
- CASE(Float32) {
412
- const ParameterInfo &param = func->parameters[i];
413
- Napi::Value value = info[param.offset];
414
-
415
- float f;
416
- if (!TryNumber(value, &f)) [[unlikely]] {
417
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
418
- return false;
419
- }
420
-
421
- if (param.vec_count) [[likely]] {
422
- *(float *)(vec_ptr++) = f;
423
- } else if (param.gpr_count) {
424
- *(float *)(gpr_ptr++) = f;
425
- } else {
426
- *(float *)(args_ptr++) = f;
427
- }
428
- };
429
- CASE(Float64) {
430
- const ParameterInfo &param = func->parameters[i];
431
- Napi::Value value = info[param.offset];
432
-
433
- double d;
434
- if (!TryNumber(value, &d)) [[unlikely]] {
435
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
436
- return false;
437
- }
438
-
439
- if (param.vec_count) [[likely]] {
440
- *(double *)vec_ptr = d;
441
- vec_ptr += 2;
442
- } else if (param.gpr_count) {
443
- gpr_ptr = AlignUp(gpr_ptr, 8);
444
- *(double *)gpr_ptr = d;
445
- gpr_ptr += 2;
446
- } else {
447
- args_ptr = AlignUp(args_ptr, 8);
448
- *(double *)args_ptr = d;
449
- args_ptr += 2;
450
- }
451
- };
452
417
 
453
- CASE(Callback) {
454
- const ParameterInfo &param = func->parameters[i];
455
- Napi::Value value = info[param.offset];
456
-
457
- void *ptr;
458
- if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
459
- return false;
460
-
461
- *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
462
- };
418
+ *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
419
+ } break;
463
420
 
464
- CASE(Prototype) { /* End loop */ };
421
+ case PrimitiveKind::Prototype: { K_UNREACHABLE(); } break;
422
+ }
465
423
  }
466
424
 
467
425
  #undef PUSH_INTEGER_64_SWAP
@@ -469,10 +427,6 @@ bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
469
427
  #undef PUSH_INTEGER_32_SWAP
470
428
  #undef PUSH_INTEGER_32
471
429
 
472
- #undef OR
473
- #undef CASE
474
- #undef LOOP
475
-
476
430
  new_sp = mem->stack.end();
477
431
 
478
432
  return true;
@@ -559,8 +513,17 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
559
513
  case PrimitiveKind::String: return result.ptr ? Napi::String::New(env, (const char *)result.ptr) : env.Null();
560
514
  case PrimitiveKind::String16: return result.ptr ? Napi::String::New(env, (const char16_t *)result.ptr) : env.Null();
561
515
  case PrimitiveKind::String32: return result.ptr ? MakeStringFromUTF32(env, (const char32_t *)result.ptr) : env.Null();
562
- case PrimitiveKind::Pointer: return result.ptr ? WrapPointer(env, func->ret.type->ref.type, result.ptr) : env.Null();
563
- case PrimitiveKind::Callback: return result.ptr ? WrapCallback(env, func->ret.type->ref.type, result.ptr) : env.Null();
516
+ case PrimitiveKind::Pointer:
517
+ case PrimitiveKind::Callback: {
518
+ if (result.ptr) {
519
+ Napi::External<void> external = Napi::External<void>::New(env, result.ptr);
520
+ SetValueTag(external, func->ret.type->ref.marker);
521
+
522
+ return external;
523
+ } else {
524
+ return env.Null();
525
+ }
526
+ } break;
564
527
  case PrimitiveKind::Record:
565
528
  case PrimitiveKind::Union: {
566
529
  const uint8_t *ptr = return_ptr ? (const uint8_t *)return_ptr
@@ -579,13 +542,14 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
579
542
  K_UNREACHABLE();
580
543
  }
581
544
 
582
- void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_stack, BackRegisters *out_reg)
545
+ void CallData::Relay(Size idx, uint8_t *sp)
583
546
  {
584
- if (env.IsExceptionPending()) [[unlikely]]
585
- return;
586
-
587
547
  const TrampolineInfo &trampoline = shared.trampolines[idx];
588
548
 
549
+ uint8_t *own_sp = sp;
550
+ uint8_t *caller_sp = sp + 128;
551
+ BackRegisters *out_reg = (BackRegisters *)(sp + 80);
552
+
589
553
  const FunctionInfo *proto = trampoline.proto;
590
554
  Napi::Function func = trampoline.func.Value();
591
555
 
@@ -598,11 +562,6 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
598
562
 
599
563
  K_DEFER_N(err_guard) { memset(out_reg, 0, K_SIZE(*out_reg)); };
600
564
 
601
- if (trampoline.generation >= 0 && trampoline.generation != (int32_t)mem->generation) [[unlikely]] {
602
- ThrowError<Napi::Error>(env, "Cannot use non-registered callback beyond FFI call");
603
- return;
604
- }
605
-
606
565
  LocalArray<napi_value, MaxParameters + 1> arguments;
607
566
 
608
567
  arguments.Append(!trampoline.recv.IsEmpty() ? trampoline.recv.Value() : env.Undefined());
@@ -747,21 +706,18 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
747
706
  Napi::Value arg = str32 ? MakeStringFromUTF32(env, str32) : env.Null();
748
707
  arguments.Append(arg);
749
708
  } break;
750
- case PrimitiveKind::Pointer: {
709
+ case PrimitiveKind::Pointer:
710
+ case PrimitiveKind::Callback: {
751
711
  void *ptr2 = *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++);
752
712
 
753
- Napi::Value p = ptr2 ? WrapPointer(env, param.type->ref.type, ptr2) : env.Null();
754
- arguments.Append(p);
713
+ if (ptr2) {
714
+ Napi::External<void> external = Napi::External<void>::New(env, ptr2);
715
+ SetValueTag(external, param.type->ref.marker);
755
716
 
756
- if (param.type->dispose) {
757
- param.type->dispose(env, param.type, ptr2);
717
+ arguments.Append(external);
718
+ } else {
719
+ arguments.Append(env.Null());
758
720
  }
759
- } break;
760
- case PrimitiveKind::Callback: {
761
- void *ptr2 = *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++);
762
-
763
- Napi::Value p = ptr2 ? WrapCallback(env, param.type->ref.type, ptr2) : env.Null();
764
- arguments.Append(p);
765
721
 
766
722
  if (param.type->dispose) {
767
723
  param.type->dispose(env, param.type, ptr2);
@@ -849,58 +805,53 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
849
805
 
850
806
  const TypeInfo *type = proto->ret.type;
851
807
 
852
- // Make the call
853
- napi_value ret;
854
- if (switch_stack) {
855
- ret = CallSwitchStack(&func, (size_t)arguments.len, arguments.data, old_sp, &mem->stack,
856
- [](Napi::Function *func, size_t argc, napi_value *argv) { return (napi_value)func->Call(argv[0], argc - 1, argv + 1); });
857
- } else {
858
- ret = (napi_value)func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
859
- }
860
- Napi::Value value(env, ret);
808
+ // Make the call!
809
+ Napi::Value value = func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
861
810
 
862
811
  if (env.IsExceptionPending()) [[unlikely]]
863
812
  return;
864
813
 
865
814
  #define RETURN_INTEGER_32(CType) \
866
815
  do { \
867
- CType v; \
868
- if (!TryNumber(value, &v)) [[unlikely]] { \
816
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
869
817
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value for return value, expected number", GetValueType(instance, value)); \
870
818
  return; \
871
819
  } \
872
820
  \
821
+ CType v = GetNumber<CType>(value); \
873
822
  out_reg->r0 = (uint32_t)v; \
874
823
  } while (false)
875
824
  #define RETURN_INTEGER_32_SWAP(CType) \
876
825
  do { \
877
- CType v; \
878
- if (!TryNumber(value, &v)) [[unlikely]] { \
879
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value for return value, expected number", GetValueType(instance, value)); \
826
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
827
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
880
828
  return; \
881
829
  } \
882
830
  \
831
+ CType v = GetNumber<CType>(value); \
883
832
  out_reg->r0 = (uint32_t)ReverseBytes(v); \
884
833
  } while (false)
885
834
  #define RETURN_INTEGER_64(CType) \
886
835
  do { \
887
- CType v; \
888
- if (!TryNumber(value, &v)) [[unlikely]] { \
889
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value for return value, expected number", GetValueType(instance, value)); \
836
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
837
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
890
838
  return; \
891
839
  } \
892
840
  \
841
+ CType v = GetNumber<CType>(value); \
842
+ \
893
843
  out_reg->r0 = (uint32_t)((uint64_t)v >> 32); \
894
844
  out_reg->r1 = (uint32_t)((uint64_t)v & 0xFFFFFFFFu); \
895
845
  } while (false)
896
846
  #define RETURN_INTEGER_64_SWAP(CType) \
897
847
  do { \
898
- CType v; \
899
- if (!TryNumber(value, &v)) [[unlikely]] { \
900
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value for return value, expected number", GetValueType(instance, value)); \
848
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
849
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
901
850
  return; \
902
851
  } \
903
852
  \
853
+ CType v = ReverseBytes(GetNumber<CType>(value)); \
854
+ \
904
855
  out_reg->r0 = (uint32_t)((uint64_t)v >> 32); \
905
856
  out_reg->r1 = (uint32_t)((uint64_t)v & 0xFFFFFFFFu); \
906
857
  } while (false)
@@ -909,12 +860,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
909
860
  switch (type->primitive) {
910
861
  case PrimitiveKind::Void: {} break;
911
862
  case PrimitiveKind::Bool: {
912
- bool b;
913
- if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
863
+ if (!value.IsBoolean()) [[unlikely]] {
914
864
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
915
865
  return;
916
866
  }
917
867
 
868
+ bool b = value.As<Napi::Boolean>();
918
869
  out_reg->r0 = (uint32_t)b;
919
870
  } break;
920
871
  case PrimitiveKind::Int8: { RETURN_INTEGER_32(int8_t); } break;
@@ -953,9 +904,24 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
953
904
  out_reg->r0 = (uint32_t)str32;
954
905
  } break;
955
906
  case PrimitiveKind::Pointer: {
956
- void *ptr;
957
- if (!PushPointer(value, type, 1, &ptr)) [[unlikely]]
907
+ uint8_t *ptr;
908
+
909
+ if (CheckValueTag(value, type->ref.marker)) {
910
+ ptr = value.As<Napi::External<uint8_t>>().Data();
911
+ } else if (IsObject(value) && (type->ref.type->primitive == PrimitiveKind::Record ||
912
+ type->ref.type->primitive == PrimitiveKind::Union)) {
913
+ Napi::Object obj = value.As<Napi::Object>();
914
+
915
+ ptr = AllocHeap(type->ref.type->size, 16);
916
+
917
+ if (!PushObject(obj, type->ref.type, ptr))
918
+ return;
919
+ } else if (IsNullOrUndefined(value)) {
920
+ ptr = nullptr;
921
+ } else {
922
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
958
923
  return;
924
+ }
959
925
 
960
926
  out_reg->r0 = (uint32_t)ptr;
961
927
  } break;
@@ -980,12 +946,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
980
946
  } break;
981
947
  case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
982
948
  case PrimitiveKind::Float32: {
983
- float f;
984
- if (!TryNumber(value, &f)) [[unlikely]] {
949
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
985
950
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
986
951
  return;
987
952
  }
988
953
 
954
+ float f = GetNumber<float>(value);
989
955
  #if defined(__ARM_PCS_VFP)
990
956
  memcpy(&out_reg->d0, &f, 4);
991
957
  #else
@@ -993,12 +959,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
993
959
  #endif
994
960
  } break;
995
961
  case PrimitiveKind::Float64: {
996
- double d;
997
- if (!TryNumber(value, &d)) [[unlikely]] {
962
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
998
963
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
999
964
  return;
1000
965
  }
1001
966
 
967
+ double d = GetNumber<double>(value);
1002
968
  #if defined(__ARM_PCS_VFP)
1003
969
  out_reg->d0 = d;
1004
970
  #else
@@ -1007,8 +973,21 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
1007
973
  } break;
1008
974
  case PrimitiveKind::Callback: {
1009
975
  void *ptr;
1010
- if (!PushCallback(value, type, &ptr)) [[unlikely]]
976
+
977
+ if (value.IsFunction()) {
978
+ Napi::Function func2 = value.As<Napi::Function>();
979
+
980
+ ptr = ReserveTrampoline(type->ref.proto, func2);
981
+ if (!ptr) [[unlikely]]
982
+ return;
983
+ } else if (CheckValueTag(value, type->ref.marker)) {
984
+ ptr = value.As<Napi::External<void>>().Data();
985
+ } else if (IsNullOrUndefined(value)) {
986
+ ptr = nullptr;
987
+ } else {
988
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
1011
989
  return;
990
+ }
1012
991
 
1013
992
  out_reg->r0 = (uint32_t)ptr;
1014
993
  } break;
@@ -1024,6 +1003,16 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
1024
1003
  err_guard.Disable();
1025
1004
  }
1026
1005
 
1006
+ void *FindTrampolineStart()
1007
+ {
1008
+ return &Trampoline0;
1009
+ }
1010
+
1011
+ void *FindTrampolineEnd()
1012
+ {
1013
+ return &TrampolineEnd;
1014
+ }
1015
+
1027
1016
  }
1028
1017
 
1029
1018
  #endif