koffi 2.16.0-beta.2 → 2.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/build/koffi/darwin_arm64/koffi.node +0 -0
  3. package/build/koffi/darwin_x64/koffi.node +0 -0
  4. package/build/koffi/freebsd_arm64/koffi.node +0 -0
  5. package/build/koffi/freebsd_ia32/koffi.node +0 -0
  6. package/build/koffi/freebsd_x64/koffi.node +0 -0
  7. package/build/koffi/linux_arm64/koffi.node +0 -0
  8. package/build/koffi/linux_armhf/koffi.node +0 -0
  9. package/build/koffi/linux_ia32/koffi.node +0 -0
  10. package/build/koffi/linux_loong64/koffi.node +0 -0
  11. package/build/koffi/linux_riscv64d/koffi.node +0 -0
  12. package/build/koffi/linux_x64/koffi.node +0 -0
  13. package/build/koffi/musl_arm64/koffi.node +0 -0
  14. package/build/koffi/musl_x64/koffi.node +0 -0
  15. package/build/koffi/openbsd_ia32/koffi.node +0 -0
  16. package/build/koffi/openbsd_x64/koffi.node +0 -0
  17. package/build/koffi/win32_arm64/koffi.exp +0 -0
  18. package/build/koffi/win32_arm64/koffi.lib +0 -0
  19. package/build/koffi/win32_arm64/koffi.node +0 -0
  20. package/build/koffi/win32_ia32/koffi.exp +0 -0
  21. package/build/koffi/win32_ia32/koffi.lib +0 -0
  22. package/build/koffi/win32_ia32/koffi.node +0 -0
  23. package/build/koffi/win32_x64/koffi.exp +0 -0
  24. package/build/koffi/win32_x64/koffi.lib +0 -0
  25. package/build/koffi/win32_x64/koffi.node +0 -0
  26. package/index.d.ts +9 -11
  27. package/index.js +6 -9
  28. package/indirect.js +6 -9
  29. package/lib/native/base/base.cc +1 -6
  30. package/package.json +3 -3
  31. package/src/cnoke/assets/FindCNoke.cmake +27 -16
  32. package/src/cnoke/assets/toolchains.json +126 -0
  33. package/src/cnoke/cnoke.js +27 -33
  34. package/src/cnoke/src/builder.js +124 -63
  35. package/src/cnoke/src/tools.js +1 -5
  36. package/src/koffi/CMakeLists.txt +32 -21
  37. package/src/koffi/src/{abi/arm32.cc → abi_arm32.cc} +235 -246
  38. package/src/koffi/src/{abi/arm32_asm.S → abi_arm32_asm.S} +19 -15
  39. package/src/koffi/src/{abi/arm64.cc → abi_arm64.cc} +253 -300
  40. package/src/koffi/src/{abi/arm64_asm.S → abi_arm64_asm.S} +16 -10
  41. package/src/koffi/src/{abi/arm64_asm.asm → abi_arm64_asm.asm} +17 -10
  42. package/src/koffi/src/{abi/loong64_asm.S → abi_loong64_asm.S} +16 -10
  43. package/src/koffi/src/{abi/riscv64.cc → abi_riscv64.cc} +233 -244
  44. package/src/koffi/src/{abi/riscv64_asm.S → abi_riscv64_asm.S} +16 -10
  45. package/src/koffi/src/{abi/x64_sysv.cc → abi_x64_sysv.cc} +208 -220
  46. package/src/koffi/src/{abi/x64_sysv_asm.S → abi_x64_sysv_asm.S} +17 -10
  47. package/src/koffi/src/{abi/x64_win.cc → abi_x64_win.cc} +175 -230
  48. package/src/koffi/src/{abi/x64_win_asm.S → abi_x64_win_asm.S} +49 -27
  49. package/src/koffi/src/{abi/x64_win_asm.asm → abi_x64_win_asm.asm} +54 -27
  50. package/src/koffi/src/{abi/x86.cc → abi_x86.cc} +187 -252
  51. package/src/koffi/src/{abi/x86_asm.S → abi_x86_asm.S} +38 -21
  52. package/src/koffi/src/{abi/x86_asm.asm → abi_x86_asm.asm} +33 -16
  53. package/src/koffi/src/call.cc +475 -290
  54. package/src/koffi/src/call.hh +15 -18
  55. package/src/koffi/src/ffi.cc +195 -184
  56. package/src/koffi/src/ffi.hh +60 -16
  57. package/src/koffi/src/init.js +1 -0
  58. package/src/koffi/src/util.cc +113 -159
  59. package/src/koffi/src/util.hh +23 -74
  60. package/src/koffi/src/win32.cc +13 -0
  61. package/src/koffi/src/win32.hh +7 -0
  62. package/src/koffi/tools/write_trampolines.js +77 -0
  63. package/doc/README.md +0 -27
  64. package/doc/assets.ini +0 -24
  65. package/doc/build.sh +0 -9
  66. package/doc/develop.sh +0 -15
  67. package/doc/pages/404.md +0 -17
  68. package/doc/pages.ini +0 -86
  69. package/doc/static/highlight.js +0 -8
  70. package/doc/static/koffi.css +0 -11
  71. package/doc/static/koffi.png +0 -0
  72. package/doc/static/logo.webp +0 -0
  73. package/doc/static/perf_linux.png +0 -0
  74. package/doc/static/perf_windows.png +0 -0
  75. package/doc/static/print.css +0 -10
  76. package/doc/templates/code.html +0 -48
  77. package/doc/templates/page.html +0 -47
  78. package/src/koffi/cmake/raylib.cmake +0 -85
  79. package/src/koffi/cmake/sqlite3.cmake +0 -9
  80. package/src/koffi/examples/electron-builder/README.md +0 -11
  81. package/src/koffi/examples/electron-builder/package.json +0 -21
  82. package/src/koffi/examples/electron-builder/src/app.js +0 -20
  83. package/src/koffi/examples/electron-builder/src/index.html +0 -143
  84. package/src/koffi/examples/electron-builder/src/preload.js +0 -5
  85. package/src/koffi/examples/electron-forge/README.md +0 -25
  86. package/src/koffi/examples/electron-forge/forge.config.js +0 -63
  87. package/src/koffi/examples/electron-forge/package.json +0 -39
  88. package/src/koffi/examples/electron-forge/src/index.css +0 -7
  89. package/src/koffi/examples/electron-forge/src/index.html +0 -143
  90. package/src/koffi/examples/electron-forge/src/main.js +0 -52
  91. package/src/koffi/examples/electron-forge/src/preload.js +0 -5
  92. package/src/koffi/examples/electron-forge/src/renderer.js +0 -31
  93. package/src/koffi/examples/electron-forge/webpack.main.config.js +0 -11
  94. package/src/koffi/examples/electron-forge/webpack.renderer.config.js +0 -13
  95. package/src/koffi/examples/electron-forge/webpack.rules.js +0 -35
  96. package/src/koffi/examples/node-esbuild/README.md +0 -19
  97. package/src/koffi/examples/node-esbuild/index.js +0 -2
  98. package/src/koffi/examples/node-esbuild/package.json +0 -16
  99. package/src/koffi/examples/nwjs/README.md +0 -20
  100. package/src/koffi/examples/nwjs/package.json +0 -11
  101. package/src/koffi/examples/nwjs/src/index.html +0 -145
  102. package/src/koffi/examples/nwjs/src/package.json +0 -10
  103. package/src/koffi/examples/yao-pkg/README.md +0 -17
  104. package/src/koffi/examples/yao-pkg/index.js +0 -2
  105. package/src/koffi/examples/yao-pkg/package.json +0 -22
  106. package/src/koffi/src/primitives.inc +0 -39
  107. package/src/koffi/src/trampolines/armasm.inc +0 -32771
  108. package/src/koffi/src/trampolines/gnu.inc +0 -24577
  109. package/src/koffi/src/trampolines/masm32.inc +0 -32769
  110. package/src/koffi/src/trampolines/masm64.inc +0 -32769
  111. package/src/koffi/src/trampolines/prototypes.inc +0 -16388
  112. package/vendor/node-addon-api/CHANGELOG.md +0 -1272
  113. package/vendor/node-addon-api/CODE_OF_CONDUCT.md +0 -4
  114. package/vendor/node-addon-api/CONTRIBUTING.md +0 -203
  115. package/vendor/node-addon-api/appveyor.yml +0 -37
  116. package/vendor/node-addon-api/benchmark/README.md +0 -47
  117. package/vendor/node-addon-api/benchmark/binding.gyp +0 -25
  118. package/vendor/node-addon-api/benchmark/function_args.cc +0 -250
  119. package/vendor/node-addon-api/benchmark/function_args.js +0 -60
  120. package/vendor/node-addon-api/benchmark/index.js +0 -34
  121. package/vendor/node-addon-api/benchmark/property_descriptor.cc +0 -84
  122. package/vendor/node-addon-api/benchmark/property_descriptor.js +0 -38
  123. package/vendor/node-addon-api/common.gypi +0 -21
  124. package/vendor/node-addon-api/doc/README.md +0 -145
  125. package/vendor/node-addon-api/doc/addon.md +0 -163
  126. package/vendor/node-addon-api/doc/array.md +0 -81
  127. package/vendor/node-addon-api/doc/array_buffer.md +0 -165
  128. package/vendor/node-addon-api/doc/async_context.md +0 -86
  129. package/vendor/node-addon-api/doc/async_operations.md +0 -31
  130. package/vendor/node-addon-api/doc/async_worker.md +0 -428
  131. package/vendor/node-addon-api/doc/async_worker_variants.md +0 -578
  132. package/vendor/node-addon-api/doc/basic_env.md +0 -200
  133. package/vendor/node-addon-api/doc/bigint.md +0 -97
  134. package/vendor/node-addon-api/doc/boolean.md +0 -68
  135. package/vendor/node-addon-api/doc/buffer.md +0 -245
  136. package/vendor/node-addon-api/doc/callback_scope.md +0 -54
  137. package/vendor/node-addon-api/doc/callbackinfo.md +0 -97
  138. package/vendor/node-addon-api/doc/checker-tool.md +0 -32
  139. package/vendor/node-addon-api/doc/class_property_descriptor.md +0 -123
  140. package/vendor/node-addon-api/doc/cmake-js.md +0 -87
  141. package/vendor/node-addon-api/doc/contributing/creating_a_release.md +0 -95
  142. package/vendor/node-addon-api/doc/conversion-tool.md +0 -28
  143. package/vendor/node-addon-api/doc/dataview.md +0 -248
  144. package/vendor/node-addon-api/doc/date.md +0 -68
  145. package/vendor/node-addon-api/doc/env.md +0 -87
  146. package/vendor/node-addon-api/doc/error.md +0 -120
  147. package/vendor/node-addon-api/doc/error_handling.md +0 -266
  148. package/vendor/node-addon-api/doc/escapable_handle_scope.md +0 -80
  149. package/vendor/node-addon-api/doc/external.md +0 -79
  150. package/vendor/node-addon-api/doc/external_buffer.md +0 -18
  151. package/vendor/node-addon-api/doc/finalization.md +0 -153
  152. package/vendor/node-addon-api/doc/function.md +0 -402
  153. package/vendor/node-addon-api/doc/function_reference.md +0 -238
  154. package/vendor/node-addon-api/doc/generator.md +0 -13
  155. package/vendor/node-addon-api/doc/handle_scope.md +0 -77
  156. package/vendor/node-addon-api/doc/hierarchy.md +0 -95
  157. package/vendor/node-addon-api/doc/instance_wrap.md +0 -408
  158. package/vendor/node-addon-api/doc/maybe.md +0 -76
  159. package/vendor/node-addon-api/doc/memory_management.md +0 -27
  160. package/vendor/node-addon-api/doc/name.md +0 -29
  161. package/vendor/node-addon-api/doc/node-gyp.md +0 -82
  162. package/vendor/node-addon-api/doc/number.md +0 -163
  163. package/vendor/node-addon-api/doc/object.md +0 -411
  164. package/vendor/node-addon-api/doc/object_lifetime_management.md +0 -83
  165. package/vendor/node-addon-api/doc/object_reference.md +0 -117
  166. package/vendor/node-addon-api/doc/object_wrap.md +0 -604
  167. package/vendor/node-addon-api/doc/prebuild_tools.md +0 -16
  168. package/vendor/node-addon-api/doc/promises.md +0 -130
  169. package/vendor/node-addon-api/doc/property_descriptor.md +0 -286
  170. package/vendor/node-addon-api/doc/propertylvalue.md +0 -50
  171. package/vendor/node-addon-api/doc/range_error.md +0 -59
  172. package/vendor/node-addon-api/doc/reference.md +0 -113
  173. package/vendor/node-addon-api/doc/setup.md +0 -115
  174. package/vendor/node-addon-api/doc/string.md +0 -93
  175. package/vendor/node-addon-api/doc/symbol.md +0 -61
  176. package/vendor/node-addon-api/doc/syntax_error.md +0 -66
  177. package/vendor/node-addon-api/doc/threadsafe.md +0 -121
  178. package/vendor/node-addon-api/doc/threadsafe_function.md +0 -290
  179. package/vendor/node-addon-api/doc/type_error.md +0 -59
  180. package/vendor/node-addon-api/doc/type_taggable.md +0 -40
  181. package/vendor/node-addon-api/doc/typed_array.md +0 -78
  182. package/vendor/node-addon-api/doc/typed_array_of.md +0 -137
  183. package/vendor/node-addon-api/doc/typed_threadsafe_function.md +0 -306
  184. package/vendor/node-addon-api/doc/value.md +0 -368
  185. package/vendor/node-addon-api/doc/version_management.md +0 -43
  186. package/vendor/node-addon-api/eslint.config.js +0 -5
  187. package/vendor/node-addon-api/except.gypi +0 -25
  188. package/vendor/node-addon-api/index.js +0 -14
  189. package/vendor/node-addon-api/node_addon_api.gyp +0 -42
  190. package/vendor/node-addon-api/node_api.gyp +0 -9
  191. package/vendor/node-addon-api/noexcept.gypi +0 -26
  192. package/vendor/node-addon-api/nothing.c +0 -0
  193. package/vendor/node-addon-api/package-support.json +0 -21
  194. package/vendor/node-addon-api/package.json +0 -480
  195. package/vendor/node-addon-api/release-please-config.json +0 -15
  196. package/vendor/node-addon-api/test/README.md +0 -91
  197. package/vendor/node-addon-api/test/addon.cc +0 -44
  198. package/vendor/node-addon-api/test/addon.js +0 -7
  199. package/vendor/node-addon-api/test/addon_build/index.js +0 -49
  200. package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +0 -18
  201. package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +0 -63
  202. package/vendor/node-addon-api/test/addon_build/tpl/index.js +0 -9
  203. package/vendor/node-addon-api/test/addon_build/tpl/package.json +0 -11
  204. package/vendor/node-addon-api/test/addon_data.cc +0 -98
  205. package/vendor/node-addon-api/test/addon_data.js +0 -24
  206. package/vendor/node-addon-api/test/array_buffer.cc +0 -243
  207. package/vendor/node-addon-api/test/array_buffer.js +0 -70
  208. package/vendor/node-addon-api/test/async_context.cc +0 -36
  209. package/vendor/node-addon-api/test/async_context.js +0 -122
  210. package/vendor/node-addon-api/test/async_progress_queue_worker.cc +0 -248
  211. package/vendor/node-addon-api/test/async_progress_queue_worker.js +0 -180
  212. package/vendor/node-addon-api/test/async_progress_worker.cc +0 -357
  213. package/vendor/node-addon-api/test/async_progress_worker.js +0 -200
  214. package/vendor/node-addon-api/test/async_worker.cc +0 -341
  215. package/vendor/node-addon-api/test/async_worker.js +0 -264
  216. package/vendor/node-addon-api/test/async_worker_nocallback.js +0 -19
  217. package/vendor/node-addon-api/test/async_worker_persistent.cc +0 -63
  218. package/vendor/node-addon-api/test/async_worker_persistent.js +0 -24
  219. package/vendor/node-addon-api/test/basic_types/array.cc +0 -40
  220. package/vendor/node-addon-api/test/basic_types/array.js +0 -34
  221. package/vendor/node-addon-api/test/basic_types/boolean.cc +0 -40
  222. package/vendor/node-addon-api/test/basic_types/boolean.js +0 -34
  223. package/vendor/node-addon-api/test/basic_types/number.cc +0 -105
  224. package/vendor/node-addon-api/test/basic_types/number.js +0 -115
  225. package/vendor/node-addon-api/test/basic_types/value.cc +0 -177
  226. package/vendor/node-addon-api/test/basic_types/value.js +0 -173
  227. package/vendor/node-addon-api/test/bigint.cc +0 -91
  228. package/vendor/node-addon-api/test/bigint.js +0 -53
  229. package/vendor/node-addon-api/test/binding-swallowexcept.cc +0 -12
  230. package/vendor/node-addon-api/test/binding.cc +0 -200
  231. package/vendor/node-addon-api/test/binding.gyp +0 -160
  232. package/vendor/node-addon-api/test/buffer.cc +0 -185
  233. package/vendor/node-addon-api/test/buffer.h +0 -26
  234. package/vendor/node-addon-api/test/buffer.js +0 -150
  235. package/vendor/node-addon-api/test/buffer_new_or_copy-inl.h +0 -68
  236. package/vendor/node-addon-api/test/buffer_no_external.cc +0 -24
  237. package/vendor/node-addon-api/test/callbackInfo.cc +0 -27
  238. package/vendor/node-addon-api/test/callbackInfo.js +0 -9
  239. package/vendor/node-addon-api/test/callbackscope.cc +0 -39
  240. package/vendor/node-addon-api/test/callbackscope.js +0 -49
  241. package/vendor/node-addon-api/test/child_processes/addon.js +0 -11
  242. package/vendor/node-addon-api/test/child_processes/addon_data.js +0 -24
  243. package/vendor/node-addon-api/test/child_processes/objectwrap_function.js +0 -22
  244. package/vendor/node-addon-api/test/child_processes/threadsafe_function_exception.js +0 -33
  245. package/vendor/node-addon-api/test/child_processes/typed_threadsafe_function_exception.js +0 -19
  246. package/vendor/node-addon-api/test/common/index.js +0 -246
  247. package/vendor/node-addon-api/test/common/test_helper.h +0 -71
  248. package/vendor/node-addon-api/test/dataview/dataview.cc +0 -48
  249. package/vendor/node-addon-api/test/dataview/dataview.js +0 -35
  250. package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +0 -115
  251. package/vendor/node-addon-api/test/dataview/dataview_read_write.js +0 -92
  252. package/vendor/node-addon-api/test/date.cc +0 -45
  253. package/vendor/node-addon-api/test/date.js +0 -18
  254. package/vendor/node-addon-api/test/env_cleanup.cc +0 -100
  255. package/vendor/node-addon-api/test/env_cleanup.js +0 -55
  256. package/vendor/node-addon-api/test/env_misc.cc +0 -25
  257. package/vendor/node-addon-api/test/env_misc.js +0 -12
  258. package/vendor/node-addon-api/test/error.cc +0 -436
  259. package/vendor/node-addon-api/test/error.js +0 -111
  260. package/vendor/node-addon-api/test/error_handling_for_primitives.cc +0 -13
  261. package/vendor/node-addon-api/test/error_handling_for_primitives.js +0 -29
  262. package/vendor/node-addon-api/test/error_terminating_environment.js +0 -99
  263. package/vendor/node-addon-api/test/except_all.cc +0 -22
  264. package/vendor/node-addon-api/test/except_all.js +0 -14
  265. package/vendor/node-addon-api/test/exports.js +0 -19
  266. package/vendor/node-addon-api/test/external.cc +0 -85
  267. package/vendor/node-addon-api/test/external.js +0 -85
  268. package/vendor/node-addon-api/test/finalizer_order.cc +0 -152
  269. package/vendor/node-addon-api/test/finalizer_order.js +0 -98
  270. package/vendor/node-addon-api/test/function.cc +0 -338
  271. package/vendor/node-addon-api/test/function.js +0 -137
  272. package/vendor/node-addon-api/test/function_reference.cc +0 -204
  273. package/vendor/node-addon-api/test/function_reference.js +0 -157
  274. package/vendor/node-addon-api/test/globalObject/global_object.cc +0 -61
  275. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +0 -31
  276. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +0 -58
  277. package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +0 -40
  278. package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +0 -56
  279. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +0 -28
  280. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +0 -46
  281. package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +0 -31
  282. package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +0 -56
  283. package/vendor/node-addon-api/test/handlescope.cc +0 -86
  284. package/vendor/node-addon-api/test/handlescope.js +0 -16
  285. package/vendor/node-addon-api/test/index.js +0 -160
  286. package/vendor/node-addon-api/test/maybe/check.cc +0 -69
  287. package/vendor/node-addon-api/test/maybe/index.js +0 -50
  288. package/vendor/node-addon-api/test/memory_management.cc +0 -18
  289. package/vendor/node-addon-api/test/memory_management.js +0 -9
  290. package/vendor/node-addon-api/test/movable_callbacks.cc +0 -23
  291. package/vendor/node-addon-api/test/movable_callbacks.js +0 -21
  292. package/vendor/node-addon-api/test/name.cc +0 -110
  293. package/vendor/node-addon-api/test/name.js +0 -59
  294. package/vendor/node-addon-api/test/napi_child.js +0 -14
  295. package/vendor/node-addon-api/test/object/delete_property.cc +0 -38
  296. package/vendor/node-addon-api/test/object/delete_property.js +0 -41
  297. package/vendor/node-addon-api/test/object/finalizer.cc +0 -30
  298. package/vendor/node-addon-api/test/object/finalizer.js +0 -28
  299. package/vendor/node-addon-api/test/object/get_property.cc +0 -34
  300. package/vendor/node-addon-api/test/object/get_property.js +0 -40
  301. package/vendor/node-addon-api/test/object/has_own_property.cc +0 -34
  302. package/vendor/node-addon-api/test/object/has_own_property.js +0 -34
  303. package/vendor/node-addon-api/test/object/has_property.cc +0 -38
  304. package/vendor/node-addon-api/test/object/has_property.js +0 -37
  305. package/vendor/node-addon-api/test/object/object.cc +0 -430
  306. package/vendor/node-addon-api/test/object/object.js +0 -218
  307. package/vendor/node-addon-api/test/object/object_deprecated.cc +0 -70
  308. package/vendor/node-addon-api/test/object/object_deprecated.js +0 -42
  309. package/vendor/node-addon-api/test/object/object_freeze_seal.cc +0 -25
  310. package/vendor/node-addon-api/test/object/object_freeze_seal.js +0 -61
  311. package/vendor/node-addon-api/test/object/set_property.cc +0 -45
  312. package/vendor/node-addon-api/test/object/set_property.js +0 -30
  313. package/vendor/node-addon-api/test/object/subscript_operator.cc +0 -58
  314. package/vendor/node-addon-api/test/object/subscript_operator.js +0 -17
  315. package/vendor/node-addon-api/test/object_reference.cc +0 -417
  316. package/vendor/node-addon-api/test/object_reference.js +0 -262
  317. package/vendor/node-addon-api/test/objectwrap.cc +0 -295
  318. package/vendor/node-addon-api/test/objectwrap.js +0 -309
  319. package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +0 -26
  320. package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +0 -18
  321. package/vendor/node-addon-api/test/objectwrap_function.cc +0 -43
  322. package/vendor/node-addon-api/test/objectwrap_function.js +0 -6
  323. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +0 -30
  324. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +0 -13
  325. package/vendor/node-addon-api/test/objectwrap_removewrap.cc +0 -45
  326. package/vendor/node-addon-api/test/objectwrap_removewrap.js +0 -32
  327. package/vendor/node-addon-api/test/objectwrap_worker_thread.js +0 -20
  328. package/vendor/node-addon-api/test/promise.cc +0 -111
  329. package/vendor/node-addon-api/test/promise.js +0 -43
  330. package/vendor/node-addon-api/test/reference.cc +0 -78
  331. package/vendor/node-addon-api/test/reference.js +0 -20
  332. package/vendor/node-addon-api/test/require_basic_finalizers/index.js +0 -38
  333. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/addon.cc +0 -12
  334. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/binding.gyp +0 -48
  335. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/index.js +0 -3
  336. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/package.json +0 -11
  337. package/vendor/node-addon-api/test/run_script.cc +0 -56
  338. package/vendor/node-addon-api/test/run_script.js +0 -45
  339. package/vendor/node-addon-api/test/symbol.cc +0 -79
  340. package/vendor/node-addon-api/test/symbol.js +0 -66
  341. package/vendor/node-addon-api/test/testUtil.js +0 -54
  342. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +0 -230
  343. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +0 -225
  344. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +0 -155
  345. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +0 -13
  346. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_exception.cc +0 -50
  347. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_exception.js +0 -20
  348. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +0 -125
  349. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +0 -14
  350. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +0 -27
  351. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +0 -7
  352. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +0 -240
  353. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +0 -59
  354. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +0 -55
  355. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +0 -98
  356. package/vendor/node-addon-api/test/thunking_manual.cc +0 -127
  357. package/vendor/node-addon-api/test/thunking_manual.js +0 -16
  358. package/vendor/node-addon-api/test/type_taggable.cc +0 -66
  359. package/vendor/node-addon-api/test/type_taggable.js +0 -59
  360. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +0 -215
  361. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +0 -188
  362. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +0 -120
  363. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +0 -14
  364. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_exception.cc +0 -39
  365. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_exception.js +0 -13
  366. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +0 -127
  367. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +0 -14
  368. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +0 -32
  369. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +0 -8
  370. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +0 -237
  371. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +0 -59
  372. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +0 -67
  373. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +0 -98
  374. package/vendor/node-addon-api/test/typedarray-bigint.js +0 -58
  375. package/vendor/node-addon-api/test/typedarray.cc +0 -413
  376. package/vendor/node-addon-api/test/typedarray.js +0 -103
  377. package/vendor/node-addon-api/test/value_type_cast.cc +0 -60
  378. package/vendor/node-addon-api/test/value_type_cast.js +0 -106
  379. package/vendor/node-addon-api/test/version_management.cc +0 -28
  380. package/vendor/node-addon-api/test/version_management.js +0 -29
  381. package/vendor/node-addon-api/tools/README.md +0 -73
  382. package/vendor/node-addon-api/tools/check-napi.js +0 -99
  383. package/vendor/node-addon-api/tools/clang-format.js +0 -71
  384. package/vendor/node-addon-api/tools/conversion.js +0 -301
  385. package/vendor/node-addon-api/unit-test/README.md +0 -28
  386. package/vendor/node-addon-api/unit-test/binding-file-template.js +0 -39
  387. package/vendor/node-addon-api/unit-test/binding.gyp +0 -72
  388. package/vendor/node-addon-api/unit-test/exceptions.js +0 -32
  389. package/vendor/node-addon-api/unit-test/generate-binding-cc.js +0 -61
  390. package/vendor/node-addon-api/unit-test/injectTestParams.js +0 -101
  391. package/vendor/node-addon-api/unit-test/listOfTestModules.js +0 -88
  392. package/vendor/node-addon-api/unit-test/matchModules.js +0 -65
  393. package/vendor/node-addon-api/unit-test/setup.js +0 -13
  394. package/vendor/node-addon-api/unit-test/spawnTask.js +0 -26
  395. package/vendor/node-addon-api/unit-test/test.js +0 -30
  396. package/vendor/node-api-headers/CHANGELOG.md +0 -130
  397. package/vendor/node-api-headers/CODE_OF_CONDUCT.md +0 -4
  398. package/vendor/node-api-headers/CONTRIBUTING.md +0 -32
  399. package/vendor/node-api-headers/CREATING_A_RELEASE.md +0 -68
  400. package/vendor/node-api-headers/index.js +0 -17
  401. package/vendor/node-api-headers/lib/clang-utils.js +0 -50
  402. package/vendor/node-api-headers/lib/parse-utils.js +0 -92
  403. package/vendor/node-api-headers/package.json +0 -59
  404. package/vendor/node-api-headers/release-please-config.json +0 -12
  405. package/vendor/node-api-headers/scripts/update-headers.js +0 -246
  406. package/vendor/node-api-headers/scripts/write-symbols.js +0 -154
  407. package/vendor/node-api-headers/scripts/write-win32-def.js +0 -52
  408. package/vendor/node-api-headers/symbols.js +0 -257
  409. package/vendor/node-api-headers/test/parse-utils.js +0 -21
  410. /package/doc/{pages/benchmarks.md → benchmarks.md} +0 -0
  411. /package/doc/{pages/callbacks.md → callbacks.md} +0 -0
  412. /package/doc/{pages/contribute.md → contribute.md} +0 -0
  413. /package/doc/{pages/functions.md → functions.md} +0 -0
  414. /package/doc/{pages/index.md → index.md} +0 -0
  415. /package/doc/{pages/input.md → input.md} +0 -0
  416. /package/doc/{pages/migration.md → migration.md} +0 -0
  417. /package/doc/{pages/misc.md → misc.md} +0 -0
  418. /package/doc/{pages/output.md → output.md} +0 -0
  419. /package/doc/{pages/packaging.md → packaging.md} +0 -0
  420. /package/doc/{pages/platforms.md → platforms.md} +0 -0
  421. /package/doc/{pages/pointers.md → pointers.md} +0 -0
  422. /package/doc/{pages/start.md → start.md} +0 -0
  423. /package/doc/{pages/unions.md → unions.md} +0 -0
  424. /package/doc/{pages/variables.md → variables.md} +0 -0
  425. /package/src/koffi/src/{abi/loong64.cc → abi_loong64.cc} +0 -0
@@ -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,29 +325,14 @@ 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
  {
383
- if (env.IsExceptionPending()) [[unlikely]]
384
- return;
385
-
386
- TEB *teb = GetTEB();
387
-
388
- // Restore previous stack limits at the end
389
- K_DEFER_C(base = teb->StackBase,
390
- limit = teb->StackLimit,
391
- dealloc = teb->DeallocationStack) {
392
- teb->StackBase = base;
393
- teb->StackLimit = limit;
394
- teb->DeallocationStack = dealloc;
395
- };
396
-
397
- // Adjust stack limits so SEH works correctly
398
- teb->StackBase = instance->main_stack_max;
399
- teb->StackLimit = instance->main_stack_min;
400
- teb->DeallocationStack = instance->main_stack_min;
401
-
402
330
  const TrampolineInfo &trampoline = shared.trampolines[idx];
403
331
 
332
+ uint8_t *own_sp = sp;
333
+ uint8_t *caller_sp = sp + 128;
334
+ BackRegisters *out_reg = (BackRegisters *)(sp + 64);
335
+
404
336
  const FunctionInfo *proto = trampoline.proto;
405
337
  Napi::Function func = trampoline.func.Value();
406
338
 
@@ -412,11 +344,6 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
412
344
 
413
345
  K_DEFER_N(err_guard) { memset(out_reg, 0, K_SIZE(*out_reg)); };
414
346
 
415
- if (trampoline.generation >= 0 && trampoline.generation != (int32_t)mem->generation) [[unlikely]] {
416
- ThrowError<Napi::Error>(env, "Cannot use non-registered callback beyond FFI call");
417
- return;
418
- }
419
-
420
347
  LocalArray<napi_value, MaxParameters + 1> arguments;
421
348
 
422
349
  arguments.Append(!trampoline.recv.IsEmpty() ? trampoline.recv.Value() : env.Undefined());
@@ -567,23 +494,19 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
567
494
  Napi::Value arg = str32 ? MakeStringFromUTF32(env, str32) : env.Null();
568
495
  arguments.Append(arg);
569
496
  } break;
570
- case PrimitiveKind::Pointer: {
497
+ case PrimitiveKind::Pointer:
498
+ case PrimitiveKind::Callback: {
571
499
  void *ptr2 = *(void **)(j < 4 ? gpr_ptr + j : args_ptr);
572
500
  args_ptr += (j >= 4);
573
501
 
574
- Napi::Value p = ptr2 ? WrapPointer(env, param.type->ref.type, ptr2) : env.Null();
575
- arguments.Append(p);
502
+ if (ptr2) {
503
+ Napi::External<void> external = Napi::External<void>::New(env, ptr2);
504
+ SetValueTag(external, param.type->ref.marker);
576
505
 
577
- if (param.type->dispose) {
578
- param.type->dispose(env, param.type, ptr2);
506
+ arguments.Append(external);
507
+ } else {
508
+ arguments.Append(env.Null());
579
509
  }
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
510
 
588
511
  if (param.type->dispose) {
589
512
  param.type->dispose(env, param.type, ptr2);
@@ -624,49 +547,42 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
624
547
 
625
548
  const TypeInfo *type = proto->ret.type;
626
549
 
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);
550
+ // Make the call!
551
+ Napi::Value value = func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
636
552
 
637
553
  if (env.IsExceptionPending()) [[unlikely]]
638
554
  return;
639
555
 
640
556
  #define RETURN_INTEGER(CType) \
641
557
  do { \
642
- CType v; \
643
- if (!TryNumber(value, &v)) [[unlikely]] { \
558
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
644
559
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
645
560
  return; \
646
561
  } \
647
562
  \
563
+ CType v = GetNumber<CType>(value); \
648
564
  out_reg->rax = (uint64_t)v; \
649
565
  } while (false)
650
566
  #define RETURN_INTEGER_SWAP(CType) \
651
567
  do { \
652
- CType v; \
653
- if (!TryNumber(value, &v)) [[unlikely]] { \
568
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
654
569
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
655
570
  return; \
656
571
  } \
657
572
  \
573
+ CType v = GetNumber<CType>(value); \
658
574
  out_reg->rax = (uint64_t)ReverseBytes(v); \
659
575
  } while (false)
660
576
 
661
577
  switch (type->primitive) {
662
578
  case PrimitiveKind::Void: {} break;
663
579
  case PrimitiveKind::Bool: {
664
- bool b;
665
- if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
580
+ if (!value.IsBoolean()) [[unlikely]] {
666
581
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
667
582
  return;
668
583
  }
669
584
 
585
+ bool b = value.As<Napi::Boolean>();
670
586
  out_reg->rax = (uint64_t)b;
671
587
  } break;
672
588
  case PrimitiveKind::Int8: { RETURN_INTEGER(int8_t); } break;
@@ -705,9 +621,24 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
705
621
  out_reg->rax = (uint64_t)str32;
706
622
  } break;
707
623
  case PrimitiveKind::Pointer: {
708
- void *ptr;
709
- if (!PushPointer(value, type, 1, &ptr)) [[unlikely]]
624
+ uint8_t *ptr;
625
+
626
+ if (CheckValueTag(value, type->ref.marker)) {
627
+ ptr = value.As<Napi::External<uint8_t>>().Data();
628
+ } else if (IsObject(value) && (type->ref.type->primitive == PrimitiveKind::Record ||
629
+ type->ref.type->primitive == PrimitiveKind::Union)) {
630
+ Napi::Object obj = value.As<Napi::Object>();
631
+
632
+ ptr = AllocHeap(type->ref.type->size, 16);
633
+
634
+ if (!PushObject(obj, type->ref.type, ptr))
635
+ return;
636
+ } else if (IsNullOrUndefined(value)) {
637
+ ptr = nullptr;
638
+ } else {
639
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
710
640
  return;
641
+ }
711
642
 
712
643
  out_reg->rax = (uint64_t)ptr;
713
644
  } break;
@@ -730,28 +661,42 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, bool switch_
730
661
  } break;
731
662
  case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
732
663
  case PrimitiveKind::Float32: {
733
- float f;
734
- if (!TryNumber(value, &f)) [[unlikely]] {
664
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
735
665
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
736
666
  return;
737
667
  }
738
668
 
669
+ float f = GetNumber<float>(value);
670
+
739
671
  memset((uint8_t *)&out_reg->xmm0 + 4, 0, 4);
740
672
  memcpy(&out_reg->xmm0, &f, 4);
741
673
  } break;
742
674
  case PrimitiveKind::Float64: {
743
- double d;
744
- if (!TryNumber(value, &d)) [[unlikely]] {
675
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
745
676
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
746
677
  return;
747
678
  }
748
679
 
680
+ double d = GetNumber<double>(value);
749
681
  out_reg->xmm0 = d;
750
682
  } break;
751
683
  case PrimitiveKind::Callback: {
752
684
  void *ptr;
753
- if (!PushCallback(value, type, &ptr)) [[unlikely]]
685
+
686
+ if (value.IsFunction()) {
687
+ Napi::Function func2 = value.As<Napi::Function>();
688
+
689
+ ptr = ReserveTrampoline(type->ref.proto, func2);
690
+ if (!ptr) [[unlikely]]
691
+ return;
692
+ } else if (CheckValueTag(value, type->ref.marker)) {
693
+ ptr = value.As<Napi::External<void>>().Data();
694
+ } else if (IsNullOrUndefined(value)) {
695
+ ptr = nullptr;
696
+ } else {
697
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
754
698
  return;
699
+ }
755
700
 
756
701
  out_reg->rax = (uint64_t)ptr;
757
702
  } break;