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 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
417
 
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
-
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,8 +542,12 @@ 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
  {
547
+ uint8_t *own_sp = sp;
548
+ uint8_t *caller_sp = sp + 128;
549
+ BackRegisters *out_reg = (BackRegisters *)(sp + 80);
550
+
584
551
  if (env.IsExceptionPending()) [[unlikely]]
585
552
  return;
586
553
 
@@ -747,21 +714,18 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
747
714
  Napi::Value arg = str32 ? MakeStringFromUTF32(env, str32) : env.Null();
748
715
  arguments.Append(arg);
749
716
  } break;
750
- case PrimitiveKind::Pointer: {
717
+ case PrimitiveKind::Pointer:
718
+ case PrimitiveKind::Callback: {
751
719
  void *ptr2 = *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++);
752
720
 
753
- Napi::Value p = ptr2 ? WrapPointer(env, param.type->ref.type, ptr2) : env.Null();
754
- arguments.Append(p);
721
+ if (ptr2) {
722
+ Napi::External<void> external = Napi::External<void>::New(env, ptr2);
723
+ SetValueTag(external, param.type->ref.marker);
755
724
 
756
- if (param.type->dispose) {
757
- param.type->dispose(env, param.type, ptr2);
725
+ arguments.Append(external);
726
+ } else {
727
+ arguments.Append(env.Null());
758
728
  }
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
729
 
766
730
  if (param.type->dispose) {
767
731
  param.type->dispose(env, param.type, ptr2);
@@ -849,58 +813,53 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
849
813
 
850
814
  const TypeInfo *type = proto->ret.type;
851
815
 
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);
816
+ // Make the call!
817
+ Napi::Value value = func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
861
818
 
862
819
  if (env.IsExceptionPending()) [[unlikely]]
863
820
  return;
864
821
 
865
822
  #define RETURN_INTEGER_32(CType) \
866
823
  do { \
867
- CType v; \
868
- if (!TryNumber(value, &v)) [[unlikely]] { \
824
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
869
825
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value for return value, expected number", GetValueType(instance, value)); \
870
826
  return; \
871
827
  } \
872
828
  \
829
+ CType v = GetNumber<CType>(value); \
873
830
  out_reg->r0 = (uint32_t)v; \
874
831
  } while (false)
875
832
  #define RETURN_INTEGER_32_SWAP(CType) \
876
833
  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)); \
834
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
835
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
880
836
  return; \
881
837
  } \
882
838
  \
839
+ CType v = GetNumber<CType>(value); \
883
840
  out_reg->r0 = (uint32_t)ReverseBytes(v); \
884
841
  } while (false)
885
842
  #define RETURN_INTEGER_64(CType) \
886
843
  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)); \
844
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
845
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
890
846
  return; \
891
847
  } \
892
848
  \
849
+ CType v = GetNumber<CType>(value); \
850
+ \
893
851
  out_reg->r0 = (uint32_t)((uint64_t)v >> 32); \
894
852
  out_reg->r1 = (uint32_t)((uint64_t)v & 0xFFFFFFFFu); \
895
853
  } while (false)
896
854
  #define RETURN_INTEGER_64_SWAP(CType) \
897
855
  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)); \
856
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
857
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
901
858
  return; \
902
859
  } \
903
860
  \
861
+ CType v = ReverseBytes(GetNumber<CType>(value)); \
862
+ \
904
863
  out_reg->r0 = (uint32_t)((uint64_t)v >> 32); \
905
864
  out_reg->r1 = (uint32_t)((uint64_t)v & 0xFFFFFFFFu); \
906
865
  } while (false)
@@ -909,12 +868,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
909
868
  switch (type->primitive) {
910
869
  case PrimitiveKind::Void: {} break;
911
870
  case PrimitiveKind::Bool: {
912
- bool b;
913
- if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
871
+ if (!value.IsBoolean()) [[unlikely]] {
914
872
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
915
873
  return;
916
874
  }
917
875
 
876
+ bool b = value.As<Napi::Boolean>();
918
877
  out_reg->r0 = (uint32_t)b;
919
878
  } break;
920
879
  case PrimitiveKind::Int8: { RETURN_INTEGER_32(int8_t); } break;
@@ -953,9 +912,24 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
953
912
  out_reg->r0 = (uint32_t)str32;
954
913
  } break;
955
914
  case PrimitiveKind::Pointer: {
956
- void *ptr;
957
- if (!PushPointer(value, type, 1, &ptr)) [[unlikely]]
915
+ uint8_t *ptr;
916
+
917
+ if (CheckValueTag(value, type->ref.marker)) {
918
+ ptr = value.As<Napi::External<uint8_t>>().Data();
919
+ } else if (IsObject(value) && (type->ref.type->primitive == PrimitiveKind::Record ||
920
+ type->ref.type->primitive == PrimitiveKind::Union)) {
921
+ Napi::Object obj = value.As<Napi::Object>();
922
+
923
+ ptr = AllocHeap(type->ref.type->size, 16);
924
+
925
+ if (!PushObject(obj, type->ref.type, ptr))
926
+ return;
927
+ } else if (IsNullOrUndefined(value)) {
928
+ ptr = nullptr;
929
+ } else {
930
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
958
931
  return;
932
+ }
959
933
 
960
934
  out_reg->r0 = (uint32_t)ptr;
961
935
  } break;
@@ -980,12 +954,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
980
954
  } break;
981
955
  case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
982
956
  case PrimitiveKind::Float32: {
983
- float f;
984
- if (!TryNumber(value, &f)) [[unlikely]] {
957
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
985
958
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
986
959
  return;
987
960
  }
988
961
 
962
+ float f = GetNumber<float>(value);
989
963
  #if defined(__ARM_PCS_VFP)
990
964
  memcpy(&out_reg->d0, &f, 4);
991
965
  #else
@@ -993,12 +967,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
993
967
  #endif
994
968
  } break;
995
969
  case PrimitiveKind::Float64: {
996
- double d;
997
- if (!TryNumber(value, &d)) [[unlikely]] {
970
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
998
971
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
999
972
  return;
1000
973
  }
1001
974
 
975
+ double d = GetNumber<double>(value);
1002
976
  #if defined(__ARM_PCS_VFP)
1003
977
  out_reg->d0 = d;
1004
978
  #else
@@ -1007,8 +981,21 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
1007
981
  } break;
1008
982
  case PrimitiveKind::Callback: {
1009
983
  void *ptr;
1010
- if (!PushCallback(value, type, &ptr)) [[unlikely]]
984
+
985
+ if (value.IsFunction()) {
986
+ Napi::Function func2 = value.As<Napi::Function>();
987
+
988
+ ptr = ReserveTrampoline(type->ref.proto, func2);
989
+ if (!ptr) [[unlikely]]
990
+ return;
991
+ } else if (CheckValueTag(value, type->ref.marker)) {
992
+ ptr = value.As<Napi::External<void>>().Data();
993
+ } else if (IsNullOrUndefined(value)) {
994
+ ptr = nullptr;
995
+ } else {
996
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
1011
997
  return;
998
+ }
1012
999
 
1013
1000
  out_reg->r0 = (uint32_t)ptr;
1014
1001
  } break;
@@ -1024,6 +1011,16 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
1024
1011
  err_guard.Disable();
1025
1012
  }
1026
1013
 
1014
+ void *FindTrampolineStart()
1015
+ {
1016
+ return &Trampoline0;
1017
+ }
1018
+
1019
+ void *FindTrampolineEnd()
1020
+ {
1021
+ return &TrampolineEnd;
1022
+ }
1023
+
1027
1024
  }
1028
1025
 
1029
1026
  #endif