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
@@ -129,7 +129,9 @@ ForwardCallXDD:
129
129
  # ----------------------------
130
130
 
131
131
  .global RelayCallback
132
- .global CallSwitchStack
132
+ .global SwitchAndRelay
133
+ .global RelayDirect
134
+ .global TrampolineEnd
133
135
 
134
136
  # First, make a copy of argument registers.
135
137
  # Then call the C function RelayCallback with the following arguments:
@@ -137,6 +139,12 @@ ForwardCallXDD:
137
139
  # arguments of this call, and a pointer to a struct that will contain the result registers.
138
140
  # After the call, simply load these registers from the output struct.
139
141
  .macro trampoline id
142
+ li t0, \id
143
+ j RelayTrampoline
144
+ .align 4
145
+ .endm
146
+
147
+ RelayTrampoline:
140
148
  addi sp, sp, -176
141
149
  sd ra, 0(sp)
142
150
  sd a0, 8(sp)
@@ -155,10 +163,8 @@ ForwardCallXDD:
155
163
  fsd fa5, 112(sp)
156
164
  fsd fa6, 120(sp)
157
165
  fsd fa7, 128(sp)
158
- li a0, \id
166
+ mv a0, t0
159
167
  addi a1, sp, 8
160
- addi a2, sp, 176
161
- addi a3, sp, 136
162
168
  call RelayCallback
163
169
  ld ra, 0(sp)
164
170
  ld a0, 136(sp)
@@ -167,14 +173,13 @@ ForwardCallXDD:
167
173
  fld fa1, 160(sp)
168
174
  addi sp, sp, 176
169
175
  ret
170
- .endm
171
176
 
172
177
  # When a callback is relayed, Koffi will call into Node.js and V8 to execute Javascript.
173
178
  # The problem is that we're still running on the separate Koffi stack, and V8 will
174
179
  # probably misdetect this as a "stack overflow". We have to restore the old
175
180
  # stack pointer, call Node.js/V8 and go back to ours.
176
181
  # The first three parameters (a0, a1, a2) are passed through untouched.
177
- CallSwitchStack:
182
+ SwitchAndRelay:
178
183
  addi sp, sp, -16
179
184
  sd ra, 0(sp)
180
185
  sd s1, 8(sp)
@@ -184,14 +189,15 @@ CallSwitchStack:
184
189
  andi t0, t0, -16
185
190
  sd t0, 8(a4)
186
191
  mv sp, a3
187
- jalr a5
192
+ call RelayDirect
188
193
  mv sp, s1
189
194
  ld ra, 0(sp)
190
195
  ld s1, 8(sp)
191
196
  addi sp, sp, 16
192
197
  ret
193
198
 
194
- # Trampolines
195
- # ----------------------------
199
+ .align 4
200
+ #include "gnu.inc"
196
201
 
197
- #include "../trampolines/gnu.inc"
202
+ TrampolineEnd:
203
+ ret
@@ -4,9 +4,9 @@
4
4
  #if defined(__x86_64__) && !defined(_WIN32)
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
 
@@ -55,9 +55,10 @@ extern "C" Xmm0RaxRet ForwardCallXDG(const void *func, uint8_t *sp, uint8_t **ou
55
55
  extern "C" RaxXmm0Ret ForwardCallXGD(const void *func, uint8_t *sp, uint8_t **out_old_sp);
56
56
  extern "C" Xmm0Xmm1Ret ForwardCallXDD(const void *func, uint8_t *sp, uint8_t **out_old_sp);
57
57
 
58
- extern "C" napi_value CallSwitchStack(Napi::Function *func, size_t argc, napi_value *argv,
59
- uint8_t *old_sp, Span<uint8_t> *new_stack,
60
- napi_value (*call)(Napi::Function *func, size_t argc, napi_value *argv));
58
+ extern "C" uint8_t Trampoline0;
59
+ extern "C" uint8_t TrampolineEnd;
60
+ extern "C" void *FindTrampolineStart();
61
+ extern "C" void *FindTrampolineEnd();
61
62
 
62
63
  static inline RegisterClass MergeClasses(RegisterClass cls1, RegisterClass cls2)
63
64
  {
@@ -223,226 +224,179 @@ bool AnalyseFunction(Napi::Env, InstanceData *, FunctionInfo *func)
223
224
 
224
225
  bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
225
226
  {
226
- uint64_t *gpr_ptr = AllocStack<uint64_t>(14 * 8 + func->args_size);
227
- uint64_t *xmm_ptr = gpr_ptr + 6;
228
- uint64_t *args_ptr = gpr_ptr + 14;
227
+ uint64_t *args_ptr = nullptr;
228
+ uint64_t *gpr_ptr = nullptr;
229
+ uint64_t *xmm_ptr = nullptr;
229
230
 
230
- if (!gpr_ptr) [[unlikely]]
231
+ // Return through registers unless it's too big
232
+ if (!AllocStack(func->args_size, 16, &args_ptr)) [[unlikely]]
233
+ return false;
234
+ if (!AllocStack(8 * 8, 8, &xmm_ptr)) [[unlikely]]
235
+ return false;
236
+ if (!AllocStack(6 * 8, 8, &gpr_ptr)) [[unlikely]]
231
237
  return false;
232
238
  if (func->ret.use_memory) {
233
239
  return_ptr = AllocHeap(func->ret.type->size, 16);
234
240
  *(uint8_t **)(gpr_ptr++) = return_ptr;
235
241
  }
236
242
 
237
- Size i = -1;
238
-
239
- static const void *const DispatchTable[] = {
240
- #define PRIMITIVE(Name) && Name,
241
- #include "../primitives.inc"
242
- };
243
-
244
- #define LOOP
245
- #define CASE(Primitive) \
246
- do { \
247
- PrimitiveKind next = func->primitives[++i]; \
248
- goto *DispatchTable[(int)next]; \
249
- } while (false); \
250
- Primitive:
251
- #define OR(Primitive) \
252
- Primitive:
253
-
254
243
  #define PUSH_INTEGER(CType) \
255
244
  do { \
256
- const ParameterInfo &param = func->parameters[i]; \
257
- Napi::Value value = info[param.offset]; \
258
- \
259
- CType v; \
260
- if (!TryNumber(value, &v)) [[unlikely]] { \
245
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
261
246
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
262
247
  return false; \
263
248
  } \
264
249
  \
250
+ CType v = GetNumber<CType>(value); \
265
251
  *((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint64_t)v; \
266
252
  } while (false)
267
253
  #define PUSH_INTEGER_SWAP(CType) \
268
254
  do { \
269
- const ParameterInfo &param = func->parameters[i]; \
270
- Napi::Value value = info[param.offset]; \
271
- \
272
- CType v; \
273
- if (!TryNumber(value, &v)) [[unlikely]] { \
255
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
274
256
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
275
257
  return false; \
276
258
  } \
277
259
  \
260
+ CType v = GetNumber<CType>(value); \
278
261
  *((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint64_t)ReverseBytes(v); \
279
262
  } while (false)
280
263
 
281
264
  // Push arguments
282
- LOOP {
283
- CASE(Void) { K_UNREACHABLE(); };
284
-
285
- CASE(Bool) {
286
- const ParameterInfo &param = func->parameters[i];
287
- Napi::Value value = info[param.offset];
288
-
289
- bool b;
290
- if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
291
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
292
- return false;
293
- }
294
-
295
- *((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint64_t)b;
296
- };
297
-
298
- CASE(Int8) { PUSH_INTEGER(int8_t); };
299
- CASE(UInt8) { PUSH_INTEGER(uint8_t); };
300
- CASE(Int16) { PUSH_INTEGER(int16_t); };
301
- CASE(Int16S) { PUSH_INTEGER_SWAP(int16_t); };
302
- CASE(UInt16) { PUSH_INTEGER(uint16_t); };
303
- CASE(UInt16S) { PUSH_INTEGER_SWAP(uint16_t); };
304
- CASE(Int32) { PUSH_INTEGER(int32_t); };
305
- CASE(Int32S) { PUSH_INTEGER_SWAP(int32_t); };
306
- CASE(UInt32) { PUSH_INTEGER(uint32_t); };
307
- CASE(UInt32S) { PUSH_INTEGER_SWAP(uint32_t); };
308
- CASE(Int64) { PUSH_INTEGER(int64_t); };
309
- CASE(Int64S) { PUSH_INTEGER_SWAP(int64_t); };
310
- CASE(UInt64) { PUSH_INTEGER(int64_t); };
311
- CASE(UInt64S) { PUSH_INTEGER_SWAP(int64_t); };
312
-
313
- CASE(String) {
314
- const ParameterInfo &param = func->parameters[i];
315
- Napi::Value value = info[param.offset];
316
-
317
- const char *str;
318
- if (!PushString(value, param.directions, &str)) [[unlikely]]
319
- return false;
320
-
321
- *(const char **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str;
322
- };
323
- CASE(String16) {
324
- const ParameterInfo &param = func->parameters[i];
325
- Napi::Value value = info[param.offset];
326
-
327
- const char16_t *str16;
328
- if (!PushString16(value, param.directions, &str16)) [[unlikely]]
329
- return false;
265
+ for (Size i = 0; i < func->parameters.len; i++) {
266
+ const ParameterInfo &param = func->parameters[i];
267
+ K_ASSERT(param.directions >= 1 && param.directions <= 3);
330
268
 
331
- *(const char16_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str16;
332
- };
333
- CASE(String32) {
334
- const ParameterInfo &param = func->parameters[i];
335
- Napi::Value value = info[param.offset];
269
+ Napi::Value value = info[param.offset];
336
270
 
337
- const char32_t *str32;
338
- if (!PushString32(value, param.directions, &str32)) [[unlikely]]
339
- return false;
271
+ switch (param.type->primitive) {
272
+ case PrimitiveKind::Void: { K_UNREACHABLE(); } break;
340
273
 
341
- *(const char32_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str32;
342
- };
274
+ case PrimitiveKind::Bool: {
275
+ if (!value.IsBoolean()) [[unlikely]] {
276
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value for argmument %2, expected boolean", GetValueType(instance, value));
277
+ return false;
278
+ }
343
279
 
344
- CASE(Pointer) {
345
- const ParameterInfo &param = func->parameters[i];
346
- Napi::Value value = info[param.offset];
280
+ bool b = value.As<Napi::Boolean>();
281
+ *((param.gpr_count ? gpr_ptr : args_ptr)++) = (uint64_t)b;
282
+ } break;
283
+ case PrimitiveKind::Int8: { PUSH_INTEGER(int8_t); } break;
284
+ case PrimitiveKind::UInt8: { PUSH_INTEGER(uint8_t); } break;
285
+ case PrimitiveKind::Int16: { PUSH_INTEGER(int16_t); } break;
286
+ case PrimitiveKind::Int16S: { PUSH_INTEGER_SWAP(int16_t); } break;
287
+ case PrimitiveKind::UInt16: { PUSH_INTEGER(uint16_t); } break;
288
+ case PrimitiveKind::UInt16S: { PUSH_INTEGER_SWAP(uint16_t); } break;
289
+ case PrimitiveKind::Int32: { PUSH_INTEGER(int32_t); } break;
290
+ case PrimitiveKind::Int32S: { PUSH_INTEGER_SWAP(int32_t); } break;
291
+ case PrimitiveKind::UInt32: { PUSH_INTEGER(uint32_t); } break;
292
+ case PrimitiveKind::UInt32S: { PUSH_INTEGER_SWAP(uint32_t); } break;
293
+ case PrimitiveKind::Int64: { PUSH_INTEGER(int64_t); } break;
294
+ case PrimitiveKind::Int64S: { PUSH_INTEGER_SWAP(int64_t); } break;
295
+ case PrimitiveKind::UInt64: { PUSH_INTEGER(uint64_t); } break;
296
+ case PrimitiveKind::UInt64S: { PUSH_INTEGER_SWAP(uint64_t); } break;
297
+ case PrimitiveKind::String: {
298
+ const char *str;
299
+ if (!PushString(value, param.directions, &str)) [[unlikely]]
300
+ return false;
347
301
 
348
- void *ptr;
349
- if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
350
- return false;
302
+ *(const char **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str;
303
+ } break;
304
+ case PrimitiveKind::String16: {
305
+ const char16_t *str16;
306
+ if (!PushString16(value, param.directions, &str16)) [[unlikely]]
307
+ return false;
351
308
 
352
- *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
353
- };
309
+ *(const char16_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str16;
310
+ } break;
311
+ case PrimitiveKind::String32: {
312
+ const char32_t *str32;
313
+ if (!PushString32(value, param.directions, &str32)) [[unlikely]]
314
+ return false;
354
315
 
355
- CASE(Record) OR(Union) {
356
- const ParameterInfo &param = func->parameters[i];
357
- Napi::Value value = info[param.offset];
316
+ *(const char32_t **)((param.gpr_count ? gpr_ptr : args_ptr)++) = str32;
317
+ } break;
318
+ case PrimitiveKind::Pointer: {
319
+ void *ptr;
320
+ if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
321
+ return false;
358
322
 
359
- if (!IsObject(value)) [[unlikely]] {
360
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected object", GetValueType(instance, value));
361
- return false;
362
- }
323
+ *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
324
+ } break;
325
+ case PrimitiveKind::Record:
326
+ case PrimitiveKind::Union: {
327
+ if (!IsObject(value)) [[unlikely]] {
328
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected object", GetValueType(instance, value));
329
+ return false;
330
+ }
363
331
 
364
- Napi::Object obj = value.As<Napi::Object>();
332
+ Napi::Object obj = value.As<Napi::Object>();
365
333
 
366
- if (param.gpr_count || param.xmm_count) {
367
- K_ASSERT(param.type->size <= 16);
334
+ if (param.gpr_count || param.xmm_count) {
335
+ K_ASSERT(param.type->size <= 16);
368
336
 
369
- uint64_t buf[2] = {};
370
- if (!PushObject(obj, param.type, (uint8_t *)buf))
371
- return false;
337
+ uint64_t buf[2] = {};
338
+ if (!PushObject(obj, param.type, (uint8_t *)buf))
339
+ return false;
372
340
 
373
- if (param.gpr_first) {
374
- *(gpr_ptr++) = buf[0];
375
- if (param.gpr_count == 2) {
376
- *(gpr_ptr++) = buf[1];
377
- } else if (param.xmm_count == 1) {
378
- *(xmm_ptr++) = buf[1];
379
- }
380
- } else {
381
- *(xmm_ptr++) = buf[0];
382
- if (param.xmm_count == 2) {
383
- *(xmm_ptr++) = buf[1];
384
- } else if (param.gpr_count == 1) {
385
- *(gpr_ptr++) = buf[1];
341
+ if (param.gpr_first) {
342
+ *(gpr_ptr++) = buf[0];
343
+ if (param.gpr_count == 2) {
344
+ *(gpr_ptr++) = buf[1];
345
+ } else if (param.xmm_count == 1) {
346
+ *(xmm_ptr++) = buf[1];
347
+ }
348
+ } else {
349
+ *(xmm_ptr++) = buf[0];
350
+ if (param.xmm_count == 2) {
351
+ *(xmm_ptr++) = buf[1];
352
+ } else if (param.gpr_count == 1) {
353
+ *(gpr_ptr++) = buf[1];
354
+ }
386
355
  }
356
+ } else if (param.use_memory) {
357
+ args_ptr = AlignUp(args_ptr, param.type->align);
358
+ if (!PushObject(obj, param.type, (uint8_t *)args_ptr))
359
+ return false;
360
+ args_ptr += (param.type->size + 7) / 8;
387
361
  }
388
- } else if (param.use_memory) {
389
- args_ptr = AlignUp(args_ptr, param.type->align);
390
- if (!PushObject(obj, param.type, (uint8_t *)args_ptr))
362
+ } break;
363
+ case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
364
+ case PrimitiveKind::Float32: {
365
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
366
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
391
367
  return false;
392
- args_ptr += (param.type->size + 7) / 8;
393
- }
394
- };
395
- CASE(Array) { K_UNREACHABLE(); };
396
-
397
- CASE(Float32) {
398
- const ParameterInfo &param = func->parameters[i];
399
- Napi::Value value = info[param.offset];
400
-
401
- float f;
402
- if (!TryNumber(value, &f)) [[unlikely]] {
403
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
404
- return false;
405
- }
406
-
407
- uint64_t *ptr = (param.xmm_count ? xmm_ptr : args_ptr)++;
408
-
409
- memset((uint8_t *)ptr + 4, 0, 4);
410
- *(float *)ptr = f;
411
- };
412
- CASE(Float64) {
413
- const ParameterInfo &param = func->parameters[i];
414
- Napi::Value value = info[param.offset];
415
-
416
- double d;
417
- if (!TryNumber(value, &d)) [[unlikely]] {
418
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
419
- return false;
420
- }
368
+ }
421
369
 
422
- *(double *)((param.xmm_count ? xmm_ptr : args_ptr)++) = d;
423
- };
370
+ float f = GetNumber<float>(value);
371
+ uint64_t *ptr = (param.xmm_count ? xmm_ptr : args_ptr)++;
424
372
 
425
- CASE(Callback) {
426
- const ParameterInfo &param = func->parameters[i];
427
- Napi::Value value = info[param.offset];
373
+ memset((uint8_t *)ptr + 4, 0, 4);
374
+ *(float *)ptr = f;
375
+ } break;
376
+ case PrimitiveKind::Float64: {
377
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
378
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
379
+ return false;
380
+ }
428
381
 
429
- void *ptr;
430
- if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
431
- return false;
382
+ double d = GetNumber<double>(value);
383
+ *(double *)((param.xmm_count ? xmm_ptr : args_ptr)++) = d;
384
+ } break;
385
+ case PrimitiveKind::Callback: {
386
+ void *ptr;
387
+ if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
388
+ return false;
432
389
 
433
- *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
434
- };
390
+ *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++) = ptr;
391
+ } break;
435
392
 
436
- CASE(Prototype) { /* End loop */ };
393
+ case PrimitiveKind::Prototype: { K_UNREACHABLE(); } break;
394
+ }
437
395
  }
438
396
 
439
397
  #undef PUSH_INTEGER_SWAP
440
398
  #undef PUSH_INTEGER
441
399
 
442
- #undef OR
443
- #undef CASE
444
- #undef LOOP
445
-
446
400
  new_sp = mem->stack.end();
447
401
 
448
402
  return true;
@@ -536,8 +490,17 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
536
490
  case PrimitiveKind::String: return result.ptr ? Napi::String::New(env, (const char *)result.ptr) : env.Null();
537
491
  case PrimitiveKind::String16: return result.ptr ? Napi::String::New(env, (const char16_t *)result.ptr) : env.Null();
538
492
  case PrimitiveKind::String32: return result.ptr ? MakeStringFromUTF32(env, (const char32_t *)result.ptr) : env.Null();
539
- case PrimitiveKind::Pointer: return result.ptr ? WrapPointer(env, func->ret.type->ref.type, result.ptr) : env.Null();
540
- case PrimitiveKind::Callback: return result.ptr ? WrapCallback(env, func->ret.type->ref.type, result.ptr) : env.Null();
493
+ case PrimitiveKind::Pointer:
494
+ case PrimitiveKind::Callback: {
495
+ if (result.ptr) {
496
+ Napi::External<void> external = Napi::External<void>::New(env, result.ptr);
497
+ SetValueTag(external, func->ret.type->ref.marker);
498
+
499
+ return external;
500
+ } else {
501
+ return env.Null();
502
+ }
503
+ } break;
541
504
  case PrimitiveKind::Record:
542
505
  case PrimitiveKind::Union: {
543
506
  const uint8_t *ptr = return_ptr ? (const uint8_t *)return_ptr
@@ -556,8 +519,12 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
556
519
  K_UNREACHABLE();
557
520
  }
558
521
 
559
- void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_stack, BackRegisters *out_reg)
522
+ void CallData::Relay(Size idx, uint8_t *sp)
560
523
  {
524
+ uint8_t *own_sp = sp;
525
+ uint8_t *caller_sp = sp + 160;
526
+ BackRegisters *out_reg = (BackRegisters *)(sp + 112);
527
+
561
528
  if (env.IsExceptionPending()) [[unlikely]]
562
529
  return;
563
530
 
@@ -712,21 +679,18 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
712
679
  Napi::Value arg = str32 ? MakeStringFromUTF32(env, str32) : env.Null();
713
680
  arguments.Append(arg);
714
681
  } break;
715
- case PrimitiveKind::Pointer: {
682
+ case PrimitiveKind::Pointer:
683
+ case PrimitiveKind::Callback: {
716
684
  void *ptr2 = *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++);
717
685
 
718
- Napi::Value p = ptr2 ? WrapPointer(env, param.type->ref.type, ptr2) : env.Null();
719
- arguments.Append(p);
686
+ if (ptr2) {
687
+ Napi::External<void> external = Napi::External<void>::New(env, ptr2);
688
+ SetValueTag(external, param.type->ref.marker);
720
689
 
721
- if (param.type->dispose) {
722
- param.type->dispose(env, param.type, ptr2);
690
+ arguments.Append(external);
691
+ } else {
692
+ arguments.Append(env.Null());
723
693
  }
724
- } break;
725
- case PrimitiveKind::Callback: {
726
- void *ptr2 = *(void **)((param.gpr_count ? gpr_ptr : args_ptr)++);
727
-
728
- Napi::Value p = ptr2 ? WrapCallback(env, param.type->ref.type, ptr2) : env.Null();
729
- arguments.Append(p);
730
694
 
731
695
  if (param.type->dispose) {
732
696
  param.type->dispose(env, param.type, ptr2);
@@ -786,37 +750,30 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
786
750
 
787
751
  const TypeInfo *type = proto->ret.type;
788
752
 
789
- // Make the call
790
- napi_value ret;
791
- if (switch_stack) {
792
- ret = CallSwitchStack(&func, (size_t)arguments.len, arguments.data, old_sp, &mem->stack,
793
- [](Napi::Function *func, size_t argc, napi_value *argv) { return (napi_value)func->Call(argv[0], argc - 1, argv + 1); });
794
- } else {
795
- ret = (napi_value)func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
796
- }
797
- Napi::Value value(env, ret);
753
+ // Make the call!
754
+ Napi::Value value = func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
798
755
 
799
756
  if (env.IsExceptionPending()) [[unlikely]]
800
757
  return;
801
758
 
802
759
  #define RETURN_INTEGER(CType) \
803
760
  do { \
804
- CType v; \
805
- if (!TryNumber(value, &v)) [[unlikely]] { \
761
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
806
762
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
807
763
  return; \
808
764
  } \
809
765
  \
766
+ CType v = GetNumber<CType>(value); \
810
767
  out_reg->rax = (uint64_t)v; \
811
768
  } while (false)
812
769
  #define RETURN_INTEGER_SWAP(CType) \
813
770
  do { \
814
- CType v; \
815
- if (!TryNumber(value, &v)) [[unlikely]] { \
771
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
816
772
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
817
773
  return; \
818
774
  } \
819
775
  \
776
+ CType v = GetNumber<CType>(value); \
820
777
  out_reg->rax = (uint64_t)ReverseBytes(v); \
821
778
  } while (false)
822
779
 
@@ -824,12 +781,12 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
824
781
  switch (type->primitive) {
825
782
  case PrimitiveKind::Void: {} break;
826
783
  case PrimitiveKind::Bool: {
827
- bool b;
828
- if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
784
+ if (!value.IsBoolean()) [[unlikely]] {
829
785
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
830
786
  return;
831
787
  }
832
788
 
789
+ bool b = value.As<Napi::Boolean>();
833
790
  out_reg->rax = (uint64_t)b;
834
791
  } break;
835
792
  case PrimitiveKind::Int8: { RETURN_INTEGER(int8_t); } break;
@@ -868,9 +825,24 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
868
825
  out_reg->rax = (uint64_t)str32;
869
826
  } break;
870
827
  case PrimitiveKind::Pointer: {
871
- void *ptr;
872
- if (!PushPointer(value, type, 1, &ptr)) [[unlikely]]
828
+ uint8_t *ptr;
829
+
830
+ if (CheckValueTag(value, type->ref.marker)) {
831
+ ptr = value.As<Napi::External<uint8_t>>().Data();
832
+ } else if (IsObject(value) && (type->ref.type->primitive == PrimitiveKind::Record ||
833
+ type->ref.type->primitive == PrimitiveKind::Union)) {
834
+ Napi::Object obj = value.As<Napi::Object>();
835
+
836
+ ptr = AllocHeap(type->ref.type->size, 16);
837
+
838
+ if (!PushObject(obj, type->ref.type, ptr))
839
+ return;
840
+ } else if (IsNullOrUndefined(value)) {
841
+ ptr = nullptr;
842
+ } else {
843
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
873
844
  return;
845
+ }
874
846
 
875
847
  out_reg->rax = (uint64_t)ptr;
876
848
  } break;
@@ -911,28 +883,42 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
911
883
  } break;
912
884
  case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
913
885
  case PrimitiveKind::Float32: {
914
- float f;
915
- if (!TryNumber(value, &f)) [[unlikely]] {
886
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
916
887
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
917
888
  return;
918
889
  }
919
890
 
891
+ float f = GetNumber<float>(value);
892
+
920
893
  memset((uint8_t *)&out_reg->xmm0 + 4, 0, 4);
921
894
  memcpy(&out_reg->xmm0, &f, 4);
922
895
  } break;
923
896
  case PrimitiveKind::Float64: {
924
- double d;
925
- if (!TryNumber(value, &d)) [[unlikely]] {
897
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
926
898
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
927
899
  return;
928
900
  }
929
901
 
902
+ double d = GetNumber<double>(value);
930
903
  out_reg->xmm0 = d;
931
904
  } break;
932
905
  case PrimitiveKind::Callback: {
933
906
  void *ptr;
934
- if (!PushCallback(value, type, &ptr)) [[unlikely]]
907
+
908
+ if (value.IsFunction()) {
909
+ Napi::Function func2 = value.As<Napi::Function>();
910
+
911
+ ptr = ReserveTrampoline(type->ref.proto, func2);
912
+ if (!ptr) [[unlikely]]
913
+ return;
914
+ } else if (CheckValueTag(value, type->ref.marker)) {
915
+ ptr = value.As<Napi::External<void>>().Data();
916
+ } else if (IsNullOrUndefined(value)) {
917
+ ptr = nullptr;
918
+ } else {
919
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
935
920
  return;
921
+ }
936
922
 
937
923
  out_reg->rax = (uint64_t)ptr;
938
924
  } break;
@@ -946,6 +932,16 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
946
932
  err_guard.Disable();
947
933
  }
948
934
 
935
+ void *FindTrampolineStart()
936
+ {
937
+ return &Trampoline0;
938
+ }
939
+
940
+ void *FindTrampolineEnd()
941
+ {
942
+ return &TrampolineEnd;
943
+ }
944
+
949
945
  }
950
946
 
951
947
  #endif