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
@@ -146,7 +146,9 @@ SYMBOL(ForwardCallXDD):
146
146
  # ----------------------------
147
147
 
148
148
  .global SYMBOL(RelayCallback)
149
- .global SYMBOL(CallSwitchStack)
149
+ .global SYMBOL(SwitchAndRelay)
150
+ .global SYMBOL(RelayDirect)
151
+ .global SYMBOL(TrampolineEnd)
150
152
 
151
153
  # First, make a copy of argument registers.
152
154
  # Then call the C function RelayCallback with the following arguments:
@@ -157,6 +159,14 @@ SYMBOL(ForwardCallXDD):
157
159
  .cfi_startproc
158
160
  .cfi_def_cfa rsp, 8
159
161
  ENDBR64
162
+ movq $\id, %rax
163
+ jmp RelayTrampoline
164
+ .cfi_endproc
165
+ .endm
166
+
167
+ RelayTrampoline:
168
+ .cfi_startproc
169
+ .cfi_def_cfa rsp, 8
160
170
  subq $152, %rsp
161
171
  .cfi_def_cfa rsp, 160
162
172
  movq %rdi, 0(%rsp)
@@ -173,10 +183,8 @@ SYMBOL(ForwardCallXDD):
173
183
  movsd %xmm5, 88(%rsp)
174
184
  movsd %xmm6, 96(%rsp)
175
185
  movsd %xmm7, 104(%rsp)
176
- movq $\id, %rdi
186
+ movq %rax, %rdi
177
187
  movq %rsp, %rsi
178
- leaq 160(%rsp), %rdx
179
- leaq 112(%rsp), %rcx
180
188
  #if defined(__linux__)
181
189
  call *RelayCallback@GOTPCREL(%rip)
182
190
  #else
@@ -190,14 +198,13 @@ SYMBOL(ForwardCallXDD):
190
198
  .cfi_def_cfa rsp, 8
191
199
  ret
192
200
  .cfi_endproc
193
- .endm
194
201
 
195
202
  # When a callback is relayed, Koffi will call into Node.js and V8 to execute Javascript.
196
203
  # The problem is that we're still running on the separate Koffi stack, and V8 will
197
204
  # probably misdetect this as a "stack overflow". We have to restore the old
198
205
  # stack pointer, call Node.js/V8 and go back to ours.
199
206
  # The first three parameters (rdi, rsi, rdx) are passed through untouched.
200
- SYMBOL(CallSwitchStack):
207
+ SYMBOL(SwitchAndRelay):
201
208
  .cfi_startproc
202
209
  .cfi_def_cfa rsp, 8
203
210
  ENDBR64
@@ -210,7 +217,7 @@ SYMBOL(CallSwitchStack):
210
217
  movq %r10, 8(%r8)
211
218
  movq %rcx, %rsp
212
219
  .cfi_def_cfa rsp, 16
213
- call *%r9
220
+ call SYMBOL(RelayDirect)
214
221
  mov %rbp, %rsp
215
222
  .cfi_def_cfa rsp, 16
216
223
  pop %rbp
@@ -218,7 +225,7 @@ SYMBOL(CallSwitchStack):
218
225
  ret
219
226
  .cfi_endproc
220
227
 
221
- # Trampolines
222
- # ----------------------------
228
+ #include "gnu.inc"
223
229
 
224
- #include "../trampolines/gnu.inc"
230
+ SYMBOL(TrampolineEnd):
231
+ ret
@@ -4,10 +4,10 @@
4
4
  #if defined(_WIN32) && (defined(__x86_64__) || defined(_M_AMD64))
5
5
 
6
6
  #include "lib/native/base/base.hh"
7
- #include "../ffi.hh"
8
- #include "../call.hh"
9
- #include "../util.hh"
10
- #include "../win32.hh"
7
+ #include "ffi.hh"
8
+ #include "call.hh"
9
+ #include "util.hh"
10
+ #include "win32.hh"
11
11
 
12
12
  #include <napi.h>
13
13
 
@@ -25,10 +25,6 @@ extern "C" uint64_t ForwardCallXG(const void *func, uint8_t *sp, uint8_t **out_o
25
25
  extern "C" float ForwardCallXF(const void *func, uint8_t *sp, uint8_t **out_old_sp);
26
26
  extern "C" double ForwardCallXD(const void *func, uint8_t *sp, uint8_t **out_old_sp);
27
27
 
28
- extern "C" napi_value CallSwitchStack(Napi::Function *func, size_t argc, napi_value *argv,
29
- uint8_t *old_sp, Span<uint8_t> *new_stack,
30
- napi_value (*call)(Napi::Function *func, size_t argc, napi_value *argv));
31
-
32
28
  bool AnalyseFunction(Napi::Env, InstanceData *, FunctionInfo *func)
33
29
  {
34
30
  func->ret.regular = IsRegularSize(func->ret.type->size, 8);
@@ -45,212 +41,154 @@ bool AnalyseFunction(Napi::Env, InstanceData *, FunctionInfo *func)
45
41
 
46
42
  bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
47
43
  {
48
- uint64_t *args_ptr = AllocStack<uint64_t>(func->args_size);
44
+ uint64_t *args_ptr = nullptr;
49
45
 
50
- if (!args_ptr) [[unlikely]]
46
+ // Pass return value in register or through memory
47
+ if (!AllocStack(func->args_size, 16, &args_ptr)) [[unlikely]]
51
48
  return false;
52
49
  if (!func->ret.regular) {
53
50
  return_ptr = AllocHeap(func->ret.type->size, 16);
54
51
  *(uint8_t **)(args_ptr++) = return_ptr;
55
52
  }
56
53
 
57
- Size i = -1;
58
-
59
- #if defined(__GNUC__) || defined(__clang__)
60
- static const void *const DispatchTable[] = {
61
- #define PRIMITIVE(Name) && Name,
62
- #include "../primitives.inc"
63
- };
64
-
65
- #define LOOP
66
- #define CASE(Primitive) \
67
- do { \
68
- PrimitiveKind next = func->primitives[++i]; \
69
- goto *DispatchTable[(int)next]; \
70
- } while (false); \
71
- Primitive:
72
- #define OR(Primitive) \
73
- Primitive:
74
- #else
75
- #define LOOP \
76
- while (++i < func->parameters.len) \
77
- switch (func->primitives[i])
78
- #define CASE(Primitive) \
79
- break; \
80
- case PrimitiveKind::Primitive:
81
- #define OR(Primitive) \
82
- case PrimitiveKind::Primitive:
83
- #endif
84
-
85
54
  #define PUSH_INTEGER(CType) \
86
55
  do { \
87
- const ParameterInfo &param = func->parameters[i]; \
88
- Napi::Value value = info[param.offset]; \
89
- \
90
- CType v; \
91
- if (!TryNumber(value, &v)) [[unlikely]] { \
56
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
92
57
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
93
58
  return false; \
94
59
  } \
95
60
  \
61
+ CType v = GetNumber<CType>(value); \
96
62
  *(args_ptr++) = (uint64_t)v; \
97
63
  } while (false)
98
64
  #define PUSH_INTEGER_SWAP(CType) \
99
65
  do { \
100
- const ParameterInfo &param = func->parameters[i]; \
101
- Napi::Value value = info[param.offset]; \
102
- \
103
- CType v; \
104
- if (!TryNumber(value, &v)) [[unlikely]] { \
66
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
105
67
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
106
68
  return false; \
107
69
  } \
108
70
  \
71
+ CType v = GetNumber<CType>(value); \
109
72
  *(args_ptr++) = (uint64_t)ReverseBytes(v); \
110
73
  } while (false)
111
74
 
112
- LOOP {
113
- CASE(Void) { K_UNREACHABLE(); };
114
-
115
- CASE(Bool) {
116
- const ParameterInfo &param = func->parameters[i];
117
- Napi::Value value = info[param.offset];
118
-
119
- bool b;
120
- if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
121
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
122
- return false;
123
- }
124
-
125
- *(bool *)(args_ptr++) = b;
126
- };
127
-
128
- CASE(Int8) { PUSH_INTEGER(int8_t); };
129
- CASE(UInt8) { PUSH_INTEGER(uint8_t); };
130
- CASE(Int16) { PUSH_INTEGER(int16_t); };
131
- CASE(Int16S) { PUSH_INTEGER_SWAP(int16_t); };
132
- CASE(UInt16) { PUSH_INTEGER(uint16_t); };
133
- CASE(UInt16S) { PUSH_INTEGER_SWAP(uint16_t); };
134
- CASE(Int32) { PUSH_INTEGER(int32_t); };
135
- CASE(Int32S) { PUSH_INTEGER_SWAP(int32_t); };
136
- CASE(UInt32) { PUSH_INTEGER(uint32_t); };
137
- CASE(UInt32S) { PUSH_INTEGER_SWAP(uint32_t); };
138
- CASE(Int64) { PUSH_INTEGER(int64_t); };
139
- CASE(Int64S) { PUSH_INTEGER_SWAP(int64_t); };
140
- CASE(UInt64) { PUSH_INTEGER(uint64_t); };
141
- CASE(UInt64S) { PUSH_INTEGER_SWAP(uint64_t); };
142
-
143
- CASE(String) {
144
- const ParameterInfo &param = func->parameters[i];
145
- Napi::Value value = info[param.offset];
146
-
147
- const char *str;
148
- if (!PushString(value, param.directions, &str)) [[unlikely]]
149
- return false;
150
-
151
- *(const char **)(args_ptr++) = str;
152
- };
153
- CASE(String16) {
154
- const ParameterInfo &param = func->parameters[i];
155
- Napi::Value value = info[param.offset];
156
-
157
- const char16_t *str16;
158
- if (!PushString16(value, param.directions, &str16)) [[unlikely]]
159
- return false;
160
-
161
- *(const char16_t **)(args_ptr++) = str16;
162
- };
163
- CASE(String32) {
164
- const ParameterInfo &param = func->parameters[i];
165
- Napi::Value value = info[param.offset];
166
-
167
- const char32_t *str32;
168
- if (!PushString32(value, param.directions, &str32)) [[unlikely]]
169
- return false;
75
+ // Push arguments
76
+ for (Size i = 0; i < func->parameters.len; i++) {
77
+ const ParameterInfo &param = func->parameters[i];
78
+ K_ASSERT(param.directions >= 1 && param.directions <= 3);
170
79
 
171
- *(const char32_t **)(args_ptr++) = str32;
172
- };
80
+ Napi::Value value = info[param.offset];
173
81
 
174
- CASE(Pointer) {
175
- const ParameterInfo &param = func->parameters[i];
176
- Napi::Value value = info[param.offset];
82
+ switch (param.type->primitive) {
83
+ case PrimitiveKind::Void: { K_UNREACHABLE(); } break;
177
84
 
178
- void *ptr;
179
- if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
180
- return false;
85
+ case PrimitiveKind::Bool: {
86
+ if (!value.IsBoolean()) [[unlikely]] {
87
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
88
+ return false;
89
+ }
181
90
 
182
- *(void **)(args_ptr++) = ptr;
183
- };
91
+ bool b = value.As<Napi::Boolean>();
184
92
 
185
- CASE(Record) OR(Union) {
186
- const ParameterInfo &param = func->parameters[i];
187
- Napi::Value value = info[param.offset];
93
+ *(bool *)(args_ptr++) = b;
94
+ } break;
95
+ case PrimitiveKind::Int8: { PUSH_INTEGER(int8_t); } break;
96
+ case PrimitiveKind::UInt8: { PUSH_INTEGER(uint8_t); } break;
97
+ case PrimitiveKind::Int16: { PUSH_INTEGER(int16_t); } break;
98
+ case PrimitiveKind::Int16S: { PUSH_INTEGER_SWAP(int16_t); } break;
99
+ case PrimitiveKind::UInt16: { PUSH_INTEGER(uint16_t); } break;
100
+ case PrimitiveKind::UInt16S: { PUSH_INTEGER_SWAP(uint16_t); } break;
101
+ case PrimitiveKind::Int32: { PUSH_INTEGER(int32_t); } break;
102
+ case PrimitiveKind::Int32S: { PUSH_INTEGER_SWAP(int32_t); } break;
103
+ case PrimitiveKind::UInt32: { PUSH_INTEGER(uint32_t); } break;
104
+ case PrimitiveKind::UInt32S: { PUSH_INTEGER_SWAP(uint32_t); } break;
105
+ case PrimitiveKind::Int64: { PUSH_INTEGER(int64_t); } break;
106
+ case PrimitiveKind::Int64S: { PUSH_INTEGER_SWAP(int64_t); } break;
107
+ case PrimitiveKind::UInt64: { PUSH_INTEGER(uint64_t); } break;
108
+ case PrimitiveKind::UInt64S: { PUSH_INTEGER_SWAP(uint64_t); } break;
109
+ case PrimitiveKind::String: {
110
+ const char *str;
111
+ if (!PushString(value, param.directions, &str)) [[unlikely]]
112
+ return false;
188
113
 
189
- if (!IsObject(value)) [[unlikely]] {
190
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected object", GetValueType(instance, value));
191
- return false;
192
- }
114
+ *(const char **)(args_ptr++) = str;
115
+ } break;
116
+ case PrimitiveKind::String16: {
117
+ const char16_t *str16;
118
+ if (!PushString16(value, param.directions, &str16)) [[unlikely]]
119
+ return false;
193
120
 
194
- uint8_t *ptr;
195
- if (param.regular) {
196
- ptr = (uint8_t *)(args_ptr++);
197
- } else {
198
- ptr = AllocHeap(param.type->size, 16);
199
- *(uint8_t **)(args_ptr++) = ptr;
200
- }
121
+ *(const char16_t **)(args_ptr++) = str16;
122
+ } break;
123
+ case PrimitiveKind::String32: {
124
+ const char32_t *str32;
125
+ if (!PushString32(value, param.directions, &str32)) [[unlikely]]
126
+ return false;
201
127
 
202
- Napi::Object obj = value.As<Napi::Object>();
203
- if (!PushObject(obj, param.type, ptr))
204
- return false;
205
- };
206
- CASE(Array) { K_UNREACHABLE(); };
128
+ *(const char32_t **)(args_ptr++) = str32;
129
+ } break;
130
+ case PrimitiveKind::Pointer: {
131
+ void *ptr;
132
+ if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
133
+ return false;
207
134
 
208
- CASE(Float32) {
209
- const ParameterInfo &param = func->parameters[i];
210
- Napi::Value value = info[param.offset];
135
+ *(void **)(args_ptr++) = ptr;
136
+ } break;
137
+ case PrimitiveKind::Record:
138
+ case PrimitiveKind::Union: {
139
+ if (!IsObject(value)) [[unlikely]] {
140
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected object", GetValueType(instance, value));
141
+ return false;
142
+ }
211
143
 
212
- float f;
213
- if (!TryNumber(value, &f)) [[unlikely]] {
214
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
215
- return false;
216
- }
144
+ uint8_t *ptr;
145
+ if (param.regular) {
146
+ ptr = (uint8_t *)(args_ptr++);
147
+ } else {
148
+ ptr = AllocHeap(param.type->size, 16);
149
+ *(uint8_t **)(args_ptr++) = ptr;
150
+ }
217
151
 
218
- memset((uint8_t *)args_ptr + 4, 0, 4);
219
- *(float *)(args_ptr++) = f;
220
- };
221
- CASE(Float64) {
222
- const ParameterInfo &param = func->parameters[i];
223
- Napi::Value value = info[param.offset];
152
+ Napi::Object obj = value.As<Napi::Object>();
153
+ if (!PushObject(obj, param.type, ptr))
154
+ return false;
155
+ } break;
156
+ case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
157
+ case PrimitiveKind::Float32: {
158
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
159
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
160
+ return false;
161
+ }
224
162
 
225
- double d;
226
- if (!TryNumber(value, &d)) [[unlikely]] {
227
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
228
- return false;
229
- }
163
+ float f = GetNumber<float>(value);
230
164
 
231
- *(double *)(args_ptr++) = d;
232
- };
233
- CASE(Callback) {
234
- const ParameterInfo &param = func->parameters[i];
235
- Napi::Value value = info[param.offset];
165
+ memset((uint8_t *)args_ptr + 4, 0, 4);
166
+ *(float *)(args_ptr++) = f;
167
+ } break;
168
+ case PrimitiveKind::Float64: {
169
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
170
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
171
+ return false;
172
+ }
236
173
 
237
- void *ptr;
238
- if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
239
- return false;
174
+ double d = GetNumber<double>(value);
175
+ *(double *)(args_ptr++) = d;
176
+ } break;
177
+ case PrimitiveKind::Callback: {
178
+ void *ptr;
179
+ if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
180
+ return false;
240
181
 
241
- *(void **)(args_ptr++) = ptr;
242
- };
182
+ *(void **)(args_ptr++) = ptr;
183
+ } break;
243
184
 
244
- CASE(Prototype) { /* End loop */ };
185
+ case PrimitiveKind::Prototype: { K_UNREACHABLE(); } break;
186
+ }
245
187
  }
246
188
 
247
189
  #undef PUSH_INTEGER_SWAP
248
190
  #undef PUSH_INTEGER
249
191
 
250
- #undef OR
251
- #undef CASE
252
- #undef LOOP
253
-
254
192
  new_sp = mem->stack.end();
255
193
 
256
194
  return true;
@@ -358,8 +296,17 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
358
296
  case PrimitiveKind::String: return result.ptr ? Napi::String::New(env, (const char *)result.ptr) : env.Null();
359
297
  case PrimitiveKind::String16: return result.ptr ? Napi::String::New(env, (const char16_t *)result.ptr) : env.Null();
360
298
  case PrimitiveKind::String32: return result.ptr ? MakeStringFromUTF32(env, (const char32_t *)result.ptr) : env.Null();
361
- case PrimitiveKind::Pointer: return result.ptr ? WrapPointer(env, func->ret.type->ref.type, result.ptr) : env.Null();
362
- case PrimitiveKind::Callback: return result.ptr ? WrapCallback(env, func->ret.type->ref.type, result.ptr) : env.Null();
299
+ case PrimitiveKind::Pointer:
300
+ case PrimitiveKind::Callback: {
301
+ if (result.ptr) {
302
+ Napi::External<void> external = Napi::External<void>::New(env, result.ptr);
303
+ SetValueTag(external, func->ret.type->ref.marker);
304
+
305
+ return external;
306
+ } else {
307
+ return env.Null();
308
+ }
309
+ } break;
363
310
  case PrimitiveKind::Record:
364
311
  case PrimitiveKind::Union: {
365
312
  const uint8_t *ptr = return_ptr ? (const uint8_t *)return_ptr
@@ -378,8 +325,12 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
378
325
  K_UNREACHABLE();
379
326
  }
380
327
 
381
- void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_stack, BackRegisters *out_reg)
328
+ void CallData::Relay(Size idx, uint8_t *sp)
382
329
  {
330
+ uint8_t *own_sp = sp;
331
+ uint8_t *caller_sp = sp + 128;
332
+ BackRegisters *out_reg = (BackRegisters *)(sp + 64);
333
+
383
334
  if (env.IsExceptionPending()) [[unlikely]]
384
335
  return;
385
336
 
@@ -567,23 +518,19 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
567
518
  Napi::Value arg = str32 ? MakeStringFromUTF32(env, str32) : env.Null();
568
519
  arguments.Append(arg);
569
520
  } break;
570
- case PrimitiveKind::Pointer: {
521
+ case PrimitiveKind::Pointer:
522
+ case PrimitiveKind::Callback: {
571
523
  void *ptr2 = *(void **)(j < 4 ? gpr_ptr + j : args_ptr);
572
524
  args_ptr += (j >= 4);
573
525
 
574
- Napi::Value p = ptr2 ? WrapPointer(env, param.type->ref.type, ptr2) : env.Null();
575
- arguments.Append(p);
526
+ if (ptr2) {
527
+ Napi::External<void> external = Napi::External<void>::New(env, ptr2);
528
+ SetValueTag(external, param.type->ref.marker);
576
529
 
577
- if (param.type->dispose) {
578
- param.type->dispose(env, param.type, ptr2);
530
+ arguments.Append(external);
531
+ } else {
532
+ arguments.Append(env.Null());
579
533
  }
580
- } break;
581
- case PrimitiveKind::Callback: {
582
- void *ptr2 = *(void **)(j < 4 ? gpr_ptr + j : args_ptr);
583
- args_ptr += (j >= 4);
584
-
585
- Napi::Value p = ptr2 ? WrapCallback(env, param.type->ref.type, ptr2) : env.Null();
586
- arguments.Append(p);
587
534
 
588
535
  if (param.type->dispose) {
589
536
  param.type->dispose(env, param.type, ptr2);
@@ -624,49 +571,42 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
624
571
 
625
572
  const TypeInfo *type = proto->ret.type;
626
573
 
627
- // Make the call
628
- napi_value ret;
629
- if (switch_stack) {
630
- ret = CallSwitchStack(&func, (size_t)arguments.len, arguments.data, old_sp, &mem->stack,
631
- [](Napi::Function *func, size_t argc, napi_value *argv) { return (napi_value)func->Call(argv[0], argc - 1, argv + 1); });
632
- } else {
633
- ret = (napi_value)func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
634
- }
635
- Napi::Value value(env, ret);
574
+ // Make the call!
575
+ Napi::Value value = func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
636
576
 
637
577
  if (env.IsExceptionPending()) [[unlikely]]
638
578
  return;
639
579
 
640
580
  #define RETURN_INTEGER(CType) \
641
581
  do { \
642
- CType v; \
643
- if (!TryNumber(value, &v)) [[unlikely]] { \
582
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
644
583
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
645
584
  return; \
646
585
  } \
647
586
  \
587
+ CType v = GetNumber<CType>(value); \
648
588
  out_reg->rax = (uint64_t)v; \
649
589
  } while (false)
650
590
  #define RETURN_INTEGER_SWAP(CType) \
651
591
  do { \
652
- CType v; \
653
- if (!TryNumber(value, &v)) [[unlikely]] { \
592
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
654
593
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
655
594
  return; \
656
595
  } \
657
596
  \
597
+ CType v = GetNumber<CType>(value); \
658
598
  out_reg->rax = (uint64_t)ReverseBytes(v); \
659
599
  } while (false)
660
600
 
661
601
  switch (type->primitive) {
662
602
  case PrimitiveKind::Void: {} break;
663
603
  case PrimitiveKind::Bool: {
664
- bool b;
665
- if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
604
+ if (!value.IsBoolean()) [[unlikely]] {
666
605
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
667
606
  return;
668
607
  }
669
608
 
609
+ bool b = value.As<Napi::Boolean>();
670
610
  out_reg->rax = (uint64_t)b;
671
611
  } break;
672
612
  case PrimitiveKind::Int8: { RETURN_INTEGER(int8_t); } break;
@@ -705,9 +645,24 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
705
645
  out_reg->rax = (uint64_t)str32;
706
646
  } break;
707
647
  case PrimitiveKind::Pointer: {
708
- void *ptr;
709
- if (!PushPointer(value, type, 1, &ptr)) [[unlikely]]
648
+ uint8_t *ptr;
649
+
650
+ if (CheckValueTag(value, type->ref.marker)) {
651
+ ptr = value.As<Napi::External<uint8_t>>().Data();
652
+ } else if (IsObject(value) && (type->ref.type->primitive == PrimitiveKind::Record ||
653
+ type->ref.type->primitive == PrimitiveKind::Union)) {
654
+ Napi::Object obj = value.As<Napi::Object>();
655
+
656
+ ptr = AllocHeap(type->ref.type->size, 16);
657
+
658
+ if (!PushObject(obj, type->ref.type, ptr))
659
+ return;
660
+ } else if (IsNullOrUndefined(value)) {
661
+ ptr = nullptr;
662
+ } else {
663
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
710
664
  return;
665
+ }
711
666
 
712
667
  out_reg->rax = (uint64_t)ptr;
713
668
  } break;
@@ -730,28 +685,42 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
730
685
  } break;
731
686
  case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
732
687
  case PrimitiveKind::Float32: {
733
- float f;
734
- if (!TryNumber(value, &f)) [[unlikely]] {
688
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
735
689
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
736
690
  return;
737
691
  }
738
692
 
693
+ float f = GetNumber<float>(value);
694
+
739
695
  memset((uint8_t *)&out_reg->xmm0 + 4, 0, 4);
740
696
  memcpy(&out_reg->xmm0, &f, 4);
741
697
  } break;
742
698
  case PrimitiveKind::Float64: {
743
- double d;
744
- if (!TryNumber(value, &d)) [[unlikely]] {
699
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
745
700
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
746
701
  return;
747
702
  }
748
703
 
704
+ double d = GetNumber<double>(value);
749
705
  out_reg->xmm0 = d;
750
706
  } break;
751
707
  case PrimitiveKind::Callback: {
752
708
  void *ptr;
753
- if (!PushCallback(value, type, &ptr)) [[unlikely]]
709
+
710
+ if (value.IsFunction()) {
711
+ Napi::Function func2 = value.As<Napi::Function>();
712
+
713
+ ptr = ReserveTrampoline(type->ref.proto, func2);
714
+ if (!ptr) [[unlikely]]
715
+ return;
716
+ } else if (CheckValueTag(value, type->ref.marker)) {
717
+ ptr = value.As<Napi::External<void>>().Data();
718
+ } else if (IsNullOrUndefined(value)) {
719
+ ptr = nullptr;
720
+ } else {
721
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
754
722
  return;
723
+ }
755
724
 
756
725
  out_reg->rax = (uint64_t)ptr;
757
726
  } break;