koffi 2.16.0-beta.2 → 2.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/build/koffi/darwin_arm64/koffi.node +0 -0
  3. package/build/koffi/darwin_x64/koffi.node +0 -0
  4. package/build/koffi/freebsd_arm64/koffi.node +0 -0
  5. package/build/koffi/freebsd_ia32/koffi.node +0 -0
  6. package/build/koffi/freebsd_x64/koffi.node +0 -0
  7. package/build/koffi/linux_arm64/koffi.node +0 -0
  8. package/build/koffi/linux_armhf/koffi.node +0 -0
  9. package/build/koffi/linux_ia32/koffi.node +0 -0
  10. package/build/koffi/linux_loong64/koffi.node +0 -0
  11. package/build/koffi/linux_riscv64d/koffi.node +0 -0
  12. package/build/koffi/linux_x64/koffi.node +0 -0
  13. package/build/koffi/musl_arm64/koffi.node +0 -0
  14. package/build/koffi/musl_x64/koffi.node +0 -0
  15. package/build/koffi/openbsd_ia32/koffi.node +0 -0
  16. package/build/koffi/openbsd_x64/koffi.node +0 -0
  17. package/build/koffi/win32_arm64/koffi.exp +0 -0
  18. package/build/koffi/win32_arm64/koffi.lib +0 -0
  19. package/build/koffi/win32_arm64/koffi.node +0 -0
  20. package/build/koffi/win32_ia32/koffi.exp +0 -0
  21. package/build/koffi/win32_ia32/koffi.lib +0 -0
  22. package/build/koffi/win32_ia32/koffi.node +0 -0
  23. package/build/koffi/win32_x64/koffi.exp +0 -0
  24. package/build/koffi/win32_x64/koffi.lib +0 -0
  25. package/build/koffi/win32_x64/koffi.node +0 -0
  26. package/index.d.ts +9 -11
  27. package/index.js +6 -9
  28. package/indirect.js +6 -9
  29. package/lib/native/base/base.cc +1 -6
  30. package/package.json +3 -3
  31. package/src/cnoke/assets/FindCNoke.cmake +27 -16
  32. package/src/cnoke/assets/toolchains.json +126 -0
  33. package/src/cnoke/cnoke.js +27 -33
  34. package/src/cnoke/src/builder.js +124 -63
  35. package/src/cnoke/src/tools.js +1 -5
  36. package/src/koffi/CMakeLists.txt +32 -21
  37. package/src/koffi/src/{abi/arm32.cc → abi_arm32.cc} +235 -238
  38. package/src/koffi/src/{abi/arm32_asm.S → abi_arm32_asm.S} +19 -15
  39. package/src/koffi/src/{abi/arm64.cc → abi_arm64.cc} +253 -274
  40. package/src/koffi/src/{abi/arm64_asm.S → abi_arm64_asm.S} +16 -10
  41. package/src/koffi/src/{abi/arm64_asm.asm → abi_arm64_asm.asm} +17 -10
  42. package/src/koffi/src/{abi/loong64_asm.S → abi_loong64_asm.S} +16 -10
  43. package/src/koffi/src/{abi/riscv64.cc → abi_riscv64.cc} +233 -236
  44. package/src/koffi/src/{abi/riscv64_asm.S → abi_riscv64_asm.S} +16 -10
  45. package/src/koffi/src/{abi/x64_sysv.cc → abi_x64_sysv.cc} +208 -212
  46. package/src/koffi/src/{abi/x64_sysv_asm.S → abi_x64_sysv_asm.S} +17 -10
  47. package/src/koffi/src/{abi/x64_win.cc → abi_x64_win.cc} +175 -206
  48. package/src/koffi/src/{abi/x64_win_asm.S → abi_x64_win_asm.S} +49 -27
  49. package/src/koffi/src/{abi/x64_win_asm.asm → abi_x64_win_asm.asm} +54 -27
  50. package/src/koffi/src/{abi/x86.cc → abi_x86.cc} +187 -226
  51. package/src/koffi/src/{abi/x86_asm.S → abi_x86_asm.S} +36 -21
  52. package/src/koffi/src/{abi/x86_asm.asm → abi_x86_asm.asm} +31 -16
  53. package/src/koffi/src/call.cc +473 -287
  54. package/src/koffi/src/call.hh +15 -18
  55. package/src/koffi/src/ffi.cc +167 -183
  56. package/src/koffi/src/ffi.hh +59 -13
  57. package/src/koffi/src/init.js +1 -0
  58. package/src/koffi/src/util.cc +113 -159
  59. package/src/koffi/src/util.hh +23 -74
  60. package/src/koffi/src/win32.cc +13 -0
  61. package/src/koffi/src/win32.hh +7 -0
  62. package/src/koffi/tools/write_trampolines.js +77 -0
  63. package/doc/README.md +0 -27
  64. package/doc/assets.ini +0 -24
  65. package/doc/build.sh +0 -9
  66. package/doc/develop.sh +0 -15
  67. package/doc/pages/404.md +0 -17
  68. package/doc/pages.ini +0 -86
  69. package/doc/static/highlight.js +0 -8
  70. package/doc/static/koffi.css +0 -11
  71. package/doc/static/koffi.png +0 -0
  72. package/doc/static/logo.webp +0 -0
  73. package/doc/static/perf_linux.png +0 -0
  74. package/doc/static/perf_windows.png +0 -0
  75. package/doc/static/print.css +0 -10
  76. package/doc/templates/code.html +0 -48
  77. package/doc/templates/page.html +0 -47
  78. package/src/koffi/cmake/raylib.cmake +0 -85
  79. package/src/koffi/cmake/sqlite3.cmake +0 -9
  80. package/src/koffi/examples/electron-builder/README.md +0 -11
  81. package/src/koffi/examples/electron-builder/package.json +0 -21
  82. package/src/koffi/examples/electron-builder/src/app.js +0 -20
  83. package/src/koffi/examples/electron-builder/src/index.html +0 -143
  84. package/src/koffi/examples/electron-builder/src/preload.js +0 -5
  85. package/src/koffi/examples/electron-forge/README.md +0 -25
  86. package/src/koffi/examples/electron-forge/forge.config.js +0 -63
  87. package/src/koffi/examples/electron-forge/package.json +0 -39
  88. package/src/koffi/examples/electron-forge/src/index.css +0 -7
  89. package/src/koffi/examples/electron-forge/src/index.html +0 -143
  90. package/src/koffi/examples/electron-forge/src/main.js +0 -52
  91. package/src/koffi/examples/electron-forge/src/preload.js +0 -5
  92. package/src/koffi/examples/electron-forge/src/renderer.js +0 -31
  93. package/src/koffi/examples/electron-forge/webpack.main.config.js +0 -11
  94. package/src/koffi/examples/electron-forge/webpack.renderer.config.js +0 -13
  95. package/src/koffi/examples/electron-forge/webpack.rules.js +0 -35
  96. package/src/koffi/examples/node-esbuild/README.md +0 -19
  97. package/src/koffi/examples/node-esbuild/index.js +0 -2
  98. package/src/koffi/examples/node-esbuild/package.json +0 -16
  99. package/src/koffi/examples/nwjs/README.md +0 -20
  100. package/src/koffi/examples/nwjs/package.json +0 -11
  101. package/src/koffi/examples/nwjs/src/index.html +0 -145
  102. package/src/koffi/examples/nwjs/src/package.json +0 -10
  103. package/src/koffi/examples/yao-pkg/README.md +0 -17
  104. package/src/koffi/examples/yao-pkg/index.js +0 -2
  105. package/src/koffi/examples/yao-pkg/package.json +0 -22
  106. package/src/koffi/src/primitives.inc +0 -39
  107. package/src/koffi/src/trampolines/armasm.inc +0 -32771
  108. package/src/koffi/src/trampolines/gnu.inc +0 -24577
  109. package/src/koffi/src/trampolines/masm32.inc +0 -32769
  110. package/src/koffi/src/trampolines/masm64.inc +0 -32769
  111. package/src/koffi/src/trampolines/prototypes.inc +0 -16388
  112. package/vendor/node-addon-api/CHANGELOG.md +0 -1272
  113. package/vendor/node-addon-api/CODE_OF_CONDUCT.md +0 -4
  114. package/vendor/node-addon-api/CONTRIBUTING.md +0 -203
  115. package/vendor/node-addon-api/appveyor.yml +0 -37
  116. package/vendor/node-addon-api/benchmark/README.md +0 -47
  117. package/vendor/node-addon-api/benchmark/binding.gyp +0 -25
  118. package/vendor/node-addon-api/benchmark/function_args.cc +0 -250
  119. package/vendor/node-addon-api/benchmark/function_args.js +0 -60
  120. package/vendor/node-addon-api/benchmark/index.js +0 -34
  121. package/vendor/node-addon-api/benchmark/property_descriptor.cc +0 -84
  122. package/vendor/node-addon-api/benchmark/property_descriptor.js +0 -38
  123. package/vendor/node-addon-api/common.gypi +0 -21
  124. package/vendor/node-addon-api/doc/README.md +0 -145
  125. package/vendor/node-addon-api/doc/addon.md +0 -163
  126. package/vendor/node-addon-api/doc/array.md +0 -81
  127. package/vendor/node-addon-api/doc/array_buffer.md +0 -165
  128. package/vendor/node-addon-api/doc/async_context.md +0 -86
  129. package/vendor/node-addon-api/doc/async_operations.md +0 -31
  130. package/vendor/node-addon-api/doc/async_worker.md +0 -428
  131. package/vendor/node-addon-api/doc/async_worker_variants.md +0 -578
  132. package/vendor/node-addon-api/doc/basic_env.md +0 -200
  133. package/vendor/node-addon-api/doc/bigint.md +0 -97
  134. package/vendor/node-addon-api/doc/boolean.md +0 -68
  135. package/vendor/node-addon-api/doc/buffer.md +0 -245
  136. package/vendor/node-addon-api/doc/callback_scope.md +0 -54
  137. package/vendor/node-addon-api/doc/callbackinfo.md +0 -97
  138. package/vendor/node-addon-api/doc/checker-tool.md +0 -32
  139. package/vendor/node-addon-api/doc/class_property_descriptor.md +0 -123
  140. package/vendor/node-addon-api/doc/cmake-js.md +0 -87
  141. package/vendor/node-addon-api/doc/contributing/creating_a_release.md +0 -95
  142. package/vendor/node-addon-api/doc/conversion-tool.md +0 -28
  143. package/vendor/node-addon-api/doc/dataview.md +0 -248
  144. package/vendor/node-addon-api/doc/date.md +0 -68
  145. package/vendor/node-addon-api/doc/env.md +0 -87
  146. package/vendor/node-addon-api/doc/error.md +0 -120
  147. package/vendor/node-addon-api/doc/error_handling.md +0 -266
  148. package/vendor/node-addon-api/doc/escapable_handle_scope.md +0 -80
  149. package/vendor/node-addon-api/doc/external.md +0 -79
  150. package/vendor/node-addon-api/doc/external_buffer.md +0 -18
  151. package/vendor/node-addon-api/doc/finalization.md +0 -153
  152. package/vendor/node-addon-api/doc/function.md +0 -402
  153. package/vendor/node-addon-api/doc/function_reference.md +0 -238
  154. package/vendor/node-addon-api/doc/generator.md +0 -13
  155. package/vendor/node-addon-api/doc/handle_scope.md +0 -77
  156. package/vendor/node-addon-api/doc/hierarchy.md +0 -95
  157. package/vendor/node-addon-api/doc/instance_wrap.md +0 -408
  158. package/vendor/node-addon-api/doc/maybe.md +0 -76
  159. package/vendor/node-addon-api/doc/memory_management.md +0 -27
  160. package/vendor/node-addon-api/doc/name.md +0 -29
  161. package/vendor/node-addon-api/doc/node-gyp.md +0 -82
  162. package/vendor/node-addon-api/doc/number.md +0 -163
  163. package/vendor/node-addon-api/doc/object.md +0 -411
  164. package/vendor/node-addon-api/doc/object_lifetime_management.md +0 -83
  165. package/vendor/node-addon-api/doc/object_reference.md +0 -117
  166. package/vendor/node-addon-api/doc/object_wrap.md +0 -604
  167. package/vendor/node-addon-api/doc/prebuild_tools.md +0 -16
  168. package/vendor/node-addon-api/doc/promises.md +0 -130
  169. package/vendor/node-addon-api/doc/property_descriptor.md +0 -286
  170. package/vendor/node-addon-api/doc/propertylvalue.md +0 -50
  171. package/vendor/node-addon-api/doc/range_error.md +0 -59
  172. package/vendor/node-addon-api/doc/reference.md +0 -113
  173. package/vendor/node-addon-api/doc/setup.md +0 -115
  174. package/vendor/node-addon-api/doc/string.md +0 -93
  175. package/vendor/node-addon-api/doc/symbol.md +0 -61
  176. package/vendor/node-addon-api/doc/syntax_error.md +0 -66
  177. package/vendor/node-addon-api/doc/threadsafe.md +0 -121
  178. package/vendor/node-addon-api/doc/threadsafe_function.md +0 -290
  179. package/vendor/node-addon-api/doc/type_error.md +0 -59
  180. package/vendor/node-addon-api/doc/type_taggable.md +0 -40
  181. package/vendor/node-addon-api/doc/typed_array.md +0 -78
  182. package/vendor/node-addon-api/doc/typed_array_of.md +0 -137
  183. package/vendor/node-addon-api/doc/typed_threadsafe_function.md +0 -306
  184. package/vendor/node-addon-api/doc/value.md +0 -368
  185. package/vendor/node-addon-api/doc/version_management.md +0 -43
  186. package/vendor/node-addon-api/eslint.config.js +0 -5
  187. package/vendor/node-addon-api/except.gypi +0 -25
  188. package/vendor/node-addon-api/index.js +0 -14
  189. package/vendor/node-addon-api/node_addon_api.gyp +0 -42
  190. package/vendor/node-addon-api/node_api.gyp +0 -9
  191. package/vendor/node-addon-api/noexcept.gypi +0 -26
  192. package/vendor/node-addon-api/nothing.c +0 -0
  193. package/vendor/node-addon-api/package-support.json +0 -21
  194. package/vendor/node-addon-api/package.json +0 -480
  195. package/vendor/node-addon-api/release-please-config.json +0 -15
  196. package/vendor/node-addon-api/test/README.md +0 -91
  197. package/vendor/node-addon-api/test/addon.cc +0 -44
  198. package/vendor/node-addon-api/test/addon.js +0 -7
  199. package/vendor/node-addon-api/test/addon_build/index.js +0 -49
  200. package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +0 -18
  201. package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +0 -63
  202. package/vendor/node-addon-api/test/addon_build/tpl/index.js +0 -9
  203. package/vendor/node-addon-api/test/addon_build/tpl/package.json +0 -11
  204. package/vendor/node-addon-api/test/addon_data.cc +0 -98
  205. package/vendor/node-addon-api/test/addon_data.js +0 -24
  206. package/vendor/node-addon-api/test/array_buffer.cc +0 -243
  207. package/vendor/node-addon-api/test/array_buffer.js +0 -70
  208. package/vendor/node-addon-api/test/async_context.cc +0 -36
  209. package/vendor/node-addon-api/test/async_context.js +0 -122
  210. package/vendor/node-addon-api/test/async_progress_queue_worker.cc +0 -248
  211. package/vendor/node-addon-api/test/async_progress_queue_worker.js +0 -180
  212. package/vendor/node-addon-api/test/async_progress_worker.cc +0 -357
  213. package/vendor/node-addon-api/test/async_progress_worker.js +0 -200
  214. package/vendor/node-addon-api/test/async_worker.cc +0 -341
  215. package/vendor/node-addon-api/test/async_worker.js +0 -264
  216. package/vendor/node-addon-api/test/async_worker_nocallback.js +0 -19
  217. package/vendor/node-addon-api/test/async_worker_persistent.cc +0 -63
  218. package/vendor/node-addon-api/test/async_worker_persistent.js +0 -24
  219. package/vendor/node-addon-api/test/basic_types/array.cc +0 -40
  220. package/vendor/node-addon-api/test/basic_types/array.js +0 -34
  221. package/vendor/node-addon-api/test/basic_types/boolean.cc +0 -40
  222. package/vendor/node-addon-api/test/basic_types/boolean.js +0 -34
  223. package/vendor/node-addon-api/test/basic_types/number.cc +0 -105
  224. package/vendor/node-addon-api/test/basic_types/number.js +0 -115
  225. package/vendor/node-addon-api/test/basic_types/value.cc +0 -177
  226. package/vendor/node-addon-api/test/basic_types/value.js +0 -173
  227. package/vendor/node-addon-api/test/bigint.cc +0 -91
  228. package/vendor/node-addon-api/test/bigint.js +0 -53
  229. package/vendor/node-addon-api/test/binding-swallowexcept.cc +0 -12
  230. package/vendor/node-addon-api/test/binding.cc +0 -200
  231. package/vendor/node-addon-api/test/binding.gyp +0 -160
  232. package/vendor/node-addon-api/test/buffer.cc +0 -185
  233. package/vendor/node-addon-api/test/buffer.h +0 -26
  234. package/vendor/node-addon-api/test/buffer.js +0 -150
  235. package/vendor/node-addon-api/test/buffer_new_or_copy-inl.h +0 -68
  236. package/vendor/node-addon-api/test/buffer_no_external.cc +0 -24
  237. package/vendor/node-addon-api/test/callbackInfo.cc +0 -27
  238. package/vendor/node-addon-api/test/callbackInfo.js +0 -9
  239. package/vendor/node-addon-api/test/callbackscope.cc +0 -39
  240. package/vendor/node-addon-api/test/callbackscope.js +0 -49
  241. package/vendor/node-addon-api/test/child_processes/addon.js +0 -11
  242. package/vendor/node-addon-api/test/child_processes/addon_data.js +0 -24
  243. package/vendor/node-addon-api/test/child_processes/objectwrap_function.js +0 -22
  244. package/vendor/node-addon-api/test/child_processes/threadsafe_function_exception.js +0 -33
  245. package/vendor/node-addon-api/test/child_processes/typed_threadsafe_function_exception.js +0 -19
  246. package/vendor/node-addon-api/test/common/index.js +0 -246
  247. package/vendor/node-addon-api/test/common/test_helper.h +0 -71
  248. package/vendor/node-addon-api/test/dataview/dataview.cc +0 -48
  249. package/vendor/node-addon-api/test/dataview/dataview.js +0 -35
  250. package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +0 -115
  251. package/vendor/node-addon-api/test/dataview/dataview_read_write.js +0 -92
  252. package/vendor/node-addon-api/test/date.cc +0 -45
  253. package/vendor/node-addon-api/test/date.js +0 -18
  254. package/vendor/node-addon-api/test/env_cleanup.cc +0 -100
  255. package/vendor/node-addon-api/test/env_cleanup.js +0 -55
  256. package/vendor/node-addon-api/test/env_misc.cc +0 -25
  257. package/vendor/node-addon-api/test/env_misc.js +0 -12
  258. package/vendor/node-addon-api/test/error.cc +0 -436
  259. package/vendor/node-addon-api/test/error.js +0 -111
  260. package/vendor/node-addon-api/test/error_handling_for_primitives.cc +0 -13
  261. package/vendor/node-addon-api/test/error_handling_for_primitives.js +0 -29
  262. package/vendor/node-addon-api/test/error_terminating_environment.js +0 -99
  263. package/vendor/node-addon-api/test/except_all.cc +0 -22
  264. package/vendor/node-addon-api/test/except_all.js +0 -14
  265. package/vendor/node-addon-api/test/exports.js +0 -19
  266. package/vendor/node-addon-api/test/external.cc +0 -85
  267. package/vendor/node-addon-api/test/external.js +0 -85
  268. package/vendor/node-addon-api/test/finalizer_order.cc +0 -152
  269. package/vendor/node-addon-api/test/finalizer_order.js +0 -98
  270. package/vendor/node-addon-api/test/function.cc +0 -338
  271. package/vendor/node-addon-api/test/function.js +0 -137
  272. package/vendor/node-addon-api/test/function_reference.cc +0 -204
  273. package/vendor/node-addon-api/test/function_reference.js +0 -157
  274. package/vendor/node-addon-api/test/globalObject/global_object.cc +0 -61
  275. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +0 -31
  276. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +0 -58
  277. package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +0 -40
  278. package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +0 -56
  279. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +0 -28
  280. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +0 -46
  281. package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +0 -31
  282. package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +0 -56
  283. package/vendor/node-addon-api/test/handlescope.cc +0 -86
  284. package/vendor/node-addon-api/test/handlescope.js +0 -16
  285. package/vendor/node-addon-api/test/index.js +0 -160
  286. package/vendor/node-addon-api/test/maybe/check.cc +0 -69
  287. package/vendor/node-addon-api/test/maybe/index.js +0 -50
  288. package/vendor/node-addon-api/test/memory_management.cc +0 -18
  289. package/vendor/node-addon-api/test/memory_management.js +0 -9
  290. package/vendor/node-addon-api/test/movable_callbacks.cc +0 -23
  291. package/vendor/node-addon-api/test/movable_callbacks.js +0 -21
  292. package/vendor/node-addon-api/test/name.cc +0 -110
  293. package/vendor/node-addon-api/test/name.js +0 -59
  294. package/vendor/node-addon-api/test/napi_child.js +0 -14
  295. package/vendor/node-addon-api/test/object/delete_property.cc +0 -38
  296. package/vendor/node-addon-api/test/object/delete_property.js +0 -41
  297. package/vendor/node-addon-api/test/object/finalizer.cc +0 -30
  298. package/vendor/node-addon-api/test/object/finalizer.js +0 -28
  299. package/vendor/node-addon-api/test/object/get_property.cc +0 -34
  300. package/vendor/node-addon-api/test/object/get_property.js +0 -40
  301. package/vendor/node-addon-api/test/object/has_own_property.cc +0 -34
  302. package/vendor/node-addon-api/test/object/has_own_property.js +0 -34
  303. package/vendor/node-addon-api/test/object/has_property.cc +0 -38
  304. package/vendor/node-addon-api/test/object/has_property.js +0 -37
  305. package/vendor/node-addon-api/test/object/object.cc +0 -430
  306. package/vendor/node-addon-api/test/object/object.js +0 -218
  307. package/vendor/node-addon-api/test/object/object_deprecated.cc +0 -70
  308. package/vendor/node-addon-api/test/object/object_deprecated.js +0 -42
  309. package/vendor/node-addon-api/test/object/object_freeze_seal.cc +0 -25
  310. package/vendor/node-addon-api/test/object/object_freeze_seal.js +0 -61
  311. package/vendor/node-addon-api/test/object/set_property.cc +0 -45
  312. package/vendor/node-addon-api/test/object/set_property.js +0 -30
  313. package/vendor/node-addon-api/test/object/subscript_operator.cc +0 -58
  314. package/vendor/node-addon-api/test/object/subscript_operator.js +0 -17
  315. package/vendor/node-addon-api/test/object_reference.cc +0 -417
  316. package/vendor/node-addon-api/test/object_reference.js +0 -262
  317. package/vendor/node-addon-api/test/objectwrap.cc +0 -295
  318. package/vendor/node-addon-api/test/objectwrap.js +0 -309
  319. package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +0 -26
  320. package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +0 -18
  321. package/vendor/node-addon-api/test/objectwrap_function.cc +0 -43
  322. package/vendor/node-addon-api/test/objectwrap_function.js +0 -6
  323. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +0 -30
  324. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +0 -13
  325. package/vendor/node-addon-api/test/objectwrap_removewrap.cc +0 -45
  326. package/vendor/node-addon-api/test/objectwrap_removewrap.js +0 -32
  327. package/vendor/node-addon-api/test/objectwrap_worker_thread.js +0 -20
  328. package/vendor/node-addon-api/test/promise.cc +0 -111
  329. package/vendor/node-addon-api/test/promise.js +0 -43
  330. package/vendor/node-addon-api/test/reference.cc +0 -78
  331. package/vendor/node-addon-api/test/reference.js +0 -20
  332. package/vendor/node-addon-api/test/require_basic_finalizers/index.js +0 -38
  333. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/addon.cc +0 -12
  334. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/binding.gyp +0 -48
  335. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/index.js +0 -3
  336. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/package.json +0 -11
  337. package/vendor/node-addon-api/test/run_script.cc +0 -56
  338. package/vendor/node-addon-api/test/run_script.js +0 -45
  339. package/vendor/node-addon-api/test/symbol.cc +0 -79
  340. package/vendor/node-addon-api/test/symbol.js +0 -66
  341. package/vendor/node-addon-api/test/testUtil.js +0 -54
  342. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +0 -230
  343. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +0 -225
  344. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +0 -155
  345. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +0 -13
  346. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_exception.cc +0 -50
  347. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_exception.js +0 -20
  348. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +0 -125
  349. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +0 -14
  350. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +0 -27
  351. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +0 -7
  352. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +0 -240
  353. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +0 -59
  354. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +0 -55
  355. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +0 -98
  356. package/vendor/node-addon-api/test/thunking_manual.cc +0 -127
  357. package/vendor/node-addon-api/test/thunking_manual.js +0 -16
  358. package/vendor/node-addon-api/test/type_taggable.cc +0 -66
  359. package/vendor/node-addon-api/test/type_taggable.js +0 -59
  360. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +0 -215
  361. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +0 -188
  362. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +0 -120
  363. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +0 -14
  364. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_exception.cc +0 -39
  365. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_exception.js +0 -13
  366. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +0 -127
  367. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +0 -14
  368. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +0 -32
  369. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +0 -8
  370. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +0 -237
  371. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +0 -59
  372. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +0 -67
  373. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +0 -98
  374. package/vendor/node-addon-api/test/typedarray-bigint.js +0 -58
  375. package/vendor/node-addon-api/test/typedarray.cc +0 -413
  376. package/vendor/node-addon-api/test/typedarray.js +0 -103
  377. package/vendor/node-addon-api/test/value_type_cast.cc +0 -60
  378. package/vendor/node-addon-api/test/value_type_cast.js +0 -106
  379. package/vendor/node-addon-api/test/version_management.cc +0 -28
  380. package/vendor/node-addon-api/test/version_management.js +0 -29
  381. package/vendor/node-addon-api/tools/README.md +0 -73
  382. package/vendor/node-addon-api/tools/check-napi.js +0 -99
  383. package/vendor/node-addon-api/tools/clang-format.js +0 -71
  384. package/vendor/node-addon-api/tools/conversion.js +0 -301
  385. package/vendor/node-addon-api/unit-test/README.md +0 -28
  386. package/vendor/node-addon-api/unit-test/binding-file-template.js +0 -39
  387. package/vendor/node-addon-api/unit-test/binding.gyp +0 -72
  388. package/vendor/node-addon-api/unit-test/exceptions.js +0 -32
  389. package/vendor/node-addon-api/unit-test/generate-binding-cc.js +0 -61
  390. package/vendor/node-addon-api/unit-test/injectTestParams.js +0 -101
  391. package/vendor/node-addon-api/unit-test/listOfTestModules.js +0 -88
  392. package/vendor/node-addon-api/unit-test/matchModules.js +0 -65
  393. package/vendor/node-addon-api/unit-test/setup.js +0 -13
  394. package/vendor/node-addon-api/unit-test/spawnTask.js +0 -26
  395. package/vendor/node-addon-api/unit-test/test.js +0 -30
  396. package/vendor/node-api-headers/CHANGELOG.md +0 -130
  397. package/vendor/node-api-headers/CODE_OF_CONDUCT.md +0 -4
  398. package/vendor/node-api-headers/CONTRIBUTING.md +0 -32
  399. package/vendor/node-api-headers/CREATING_A_RELEASE.md +0 -68
  400. package/vendor/node-api-headers/index.js +0 -17
  401. package/vendor/node-api-headers/lib/clang-utils.js +0 -50
  402. package/vendor/node-api-headers/lib/parse-utils.js +0 -92
  403. package/vendor/node-api-headers/package.json +0 -59
  404. package/vendor/node-api-headers/release-please-config.json +0 -12
  405. package/vendor/node-api-headers/scripts/update-headers.js +0 -246
  406. package/vendor/node-api-headers/scripts/write-symbols.js +0 -154
  407. package/vendor/node-api-headers/scripts/write-win32-def.js +0 -52
  408. package/vendor/node-api-headers/symbols.js +0 -257
  409. package/vendor/node-api-headers/test/parse-utils.js +0 -21
  410. /package/doc/{pages/benchmarks.md → benchmarks.md} +0 -0
  411. /package/doc/{pages/callbacks.md → callbacks.md} +0 -0
  412. /package/doc/{pages/contribute.md → contribute.md} +0 -0
  413. /package/doc/{pages/functions.md → functions.md} +0 -0
  414. /package/doc/{pages/index.md → index.md} +0 -0
  415. /package/doc/{pages/input.md → input.md} +0 -0
  416. /package/doc/{pages/migration.md → migration.md} +0 -0
  417. /package/doc/{pages/misc.md → misc.md} +0 -0
  418. /package/doc/{pages/output.md → output.md} +0 -0
  419. /package/doc/{pages/packaging.md → packaging.md} +0 -0
  420. /package/doc/{pages/platforms.md → platforms.md} +0 -0
  421. /package/doc/{pages/pointers.md → pointers.md} +0 -0
  422. /package/doc/{pages/start.md → start.md} +0 -0
  423. /package/doc/{pages/unions.md → unions.md} +0 -0
  424. /package/doc/{pages/variables.md → variables.md} +0 -0
  425. /package/src/koffi/src/{abi/loong64.cc → abi_loong64.cc} +0 -0
@@ -4,11 +4,11 @@
4
4
  #if defined(__i386__) || defined(_M_IX86)
5
5
 
6
6
  #include "lib/native/base/base.hh"
7
- #include "../ffi.hh"
8
- #include "../call.hh"
9
- #include "../util.hh"
7
+ #include "ffi.hh"
8
+ #include "call.hh"
9
+ #include "util.hh"
10
10
  #if defined(_WIN32)
11
- #include "../win32.hh"
11
+ #include "win32.hh"
12
12
  #endif
13
13
 
14
14
  #include <napi.h>
@@ -33,10 +33,6 @@ extern "C" uint64_t ForwardCallRG(const void *func, uint8_t *sp, uint8_t **out_o
33
33
  extern "C" float ForwardCallRF(const void *func, uint8_t *sp, uint8_t **out_old_sp);
34
34
  extern "C" double ForwardCallRD(const void *func, uint8_t *sp, uint8_t **out_old_sp);
35
35
 
36
- extern "C" napi_value CallSwitchStack(Napi::Function *func, size_t argc, napi_value *argv,
37
- uint8_t *old_sp, Span<uint8_t> *new_stack,
38
- napi_value (*call)(Napi::Function *func, size_t argc, napi_value *argv));
39
-
40
36
  bool AnalyseFunction(Napi::Env env, InstanceData *instance, FunctionInfo *func)
41
37
  {
42
38
  if (!func->lib && func->convention != CallConvention::Cdecl &&
@@ -111,10 +107,11 @@ bool AnalyseFunction(Napi::Env env, InstanceData *instance, FunctionInfo *func)
111
107
 
112
108
  bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
113
109
  {
114
- uint32_t *args_ptr = AllocStack<uint32_t>(func->args_size);
110
+ uint32_t *args_ptr = nullptr;
115
111
  uint32_t *fast_ptr = nullptr;
116
112
 
117
- if (!args_ptr) [[unlikely]]
113
+ // Pass return value in register or through memory
114
+ if (!AllocStack(func->args_size, 16, &args_ptr)) [[unlikely]]
118
115
  return false;
119
116
  if (func->fast) {
120
117
  fast_ptr = args_ptr;
@@ -125,224 +122,162 @@ bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
125
122
  *((func->ret.fast ? fast_ptr : args_ptr)++) = (uint32_t)return_ptr;
126
123
  }
127
124
 
128
- Size i = -1;
129
-
130
- #if defined(__GNUC__) || defined(__clang__)
131
- static const void *const DispatchTable[] = {
132
- #define PRIMITIVE(Name) && Name,
133
- #include "../primitives.inc"
134
- };
135
-
136
- #define LOOP
137
- #define CASE(Primitive) \
138
- do { \
139
- PrimitiveKind next = func->primitives[++i]; \
140
- goto *DispatchTable[(int)next]; \
141
- } while (false); \
142
- Primitive:
143
- #define OR(Primitive) \
144
- Primitive:
145
- #else
146
- #define LOOP \
147
- while (++i < func->parameters.len) \
148
- switch (func->primitives[i])
149
- #define CASE(Primitive) \
150
- break; \
151
- case PrimitiveKind::Primitive:
152
- #define OR(Primitive) \
153
- case PrimitiveKind::Primitive:
154
- #endif
155
-
156
125
  #define PUSH_INTEGER_32(CType) \
157
126
  do { \
158
- const ParameterInfo &param = func->parameters[i]; \
159
- Napi::Value value = info[param.offset]; \
160
- \
161
- CType v; \
162
- if (!TryNumber(value, &v)) [[unlikely]] { \
127
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
163
128
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
164
129
  return false; \
165
130
  } \
166
131
  \
132
+ CType v = GetNumber<CType>(value); \
167
133
  *((param.fast ? fast_ptr : args_ptr)++) = (uint32_t)v; \
168
134
  } while (false)
169
135
  #define PUSH_INTEGER_32_SWAP(CType) \
170
136
  do { \
171
- const ParameterInfo &param = func->parameters[i]; \
172
- Napi::Value value = info[param.offset]; \
173
- \
174
- CType v; \
175
- if (!TryNumber(value, &v)) [[unlikely]] { \
137
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
176
138
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
177
139
  return false; \
178
140
  } \
179
141
  \
142
+ CType v = GetNumber<CType>(value); \
180
143
  *((param.fast ? fast_ptr : args_ptr)++) = (uint32_t)ReverseBytes(v); \
181
144
  } while (false)
182
145
  #define PUSH_INTEGER_64(CType) \
183
146
  do { \
184
- const ParameterInfo &param = func->parameters[i]; \
185
- Napi::Value value = info[param.offset]; \
186
- \
187
- CType v; \
188
- if (!TryNumber(value, &v)) [[unlikely]] { \
147
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
189
148
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
190
149
  return false; \
191
150
  } \
192
151
  \
152
+ CType v = GetNumber<CType>(value); \
153
+ \
193
154
  *(uint64_t *)args_ptr = (uint64_t)v; \
194
155
  args_ptr += 2; \
195
156
  } while (false)
196
157
  #define PUSH_INTEGER_64_SWAP(CType) \
197
158
  do { \
198
- const ParameterInfo &param = func->parameters[i]; \
199
- Napi::Value value = info[param.offset]; \
200
- \
201
- CType v; \
202
- if (!TryNumber(value, &v)) [[unlikely]] { \
159
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
203
160
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
204
161
  return false; \
205
162
  } \
206
163
  \
164
+ CType v = GetNumber<CType>(value); \
165
+ \
207
166
  *(uint64_t *)args_ptr = (uint64_t)ReverseBytes(v); \
208
167
  args_ptr += 2; \
209
168
  } while (false)
210
169
 
211
- LOOP {
212
- CASE(Void) { K_UNREACHABLE(); };
213
-
214
- CASE(Bool) {
215
- const ParameterInfo &param = func->parameters[i];
216
- Napi::Value value = info[param.offset];
217
-
218
- bool b;
219
- if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
220
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
221
- return false;
222
- }
223
-
224
- *(bool *)((param.fast ? fast_ptr : args_ptr)++) = b;
225
- };
226
-
227
- CASE(Int8) { PUSH_INTEGER_32(int8_t); };
228
- CASE(UInt8) { PUSH_INTEGER_32(uint8_t); };
229
- CASE(Int16) { PUSH_INTEGER_32(int16_t); };
230
- CASE(Int16S) { PUSH_INTEGER_32_SWAP(int16_t); };
231
- CASE(UInt16) { PUSH_INTEGER_32(uint16_t); };
232
- CASE(UInt16S) { PUSH_INTEGER_32_SWAP(uint16_t); };
233
- CASE(Int32) { PUSH_INTEGER_32(int32_t); };
234
- CASE(Int32S) { PUSH_INTEGER_32_SWAP(int32_t); };
235
- CASE(UInt32) { PUSH_INTEGER_32(uint32_t); };
236
- CASE(UInt32S) { PUSH_INTEGER_32_SWAP(uint32_t); };
237
- CASE(Int64) { PUSH_INTEGER_64(int64_t); };
238
- CASE(Int64S) { PUSH_INTEGER_64_SWAP(int64_t); };
239
- CASE(UInt64) { PUSH_INTEGER_64(uint64_t); };
240
- CASE(UInt64S) { PUSH_INTEGER_64_SWAP(uint64_t); };
241
-
242
- CASE(String) {
243
- const ParameterInfo &param = func->parameters[i];
244
- Napi::Value value = info[param.offset];
245
-
246
- const char *str;
247
- if (!PushString(value, param.directions, &str)) [[unlikely]]
248
- return false;
249
-
250
- *(const char **)((param.fast ? fast_ptr : args_ptr)++) = str;
251
- };
252
- CASE(String16) {
253
- const ParameterInfo &param = func->parameters[i];
254
- Napi::Value value = info[param.offset];
255
-
256
- const char16_t *str16;
257
- if (!PushString16(value, param.directions, &str16)) [[unlikely]]
258
- return false;
259
-
260
- *(const char16_t **)((param.fast ? fast_ptr : args_ptr)++) = str16;
261
- };
262
- CASE(String32) {
263
- const ParameterInfo &param = func->parameters[i];
264
- Napi::Value value = info[param.offset];
265
-
266
- const char32_t *str32;
267
- if (!PushString32(value, param.directions, &str32)) [[unlikely]]
268
- return false;
269
-
270
- *(const char32_t **)((param.fast ? fast_ptr : args_ptr)++) = str32;
271
- };
272
-
273
- CASE(Pointer) {
274
- const ParameterInfo &param = func->parameters[i];
275
- Napi::Value value = info[param.offset];
276
-
277
- void *ptr;
278
- if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
279
- return false;
280
-
281
- *(void **)((param.fast ? fast_ptr : args_ptr)++) = ptr;
282
- };
283
-
284
- CASE(Record) OR(Union) {
285
- const ParameterInfo &param = func->parameters[i];
286
- Napi::Value value = info[param.offset];
170
+ // Push arguments
171
+ for (Size i = 0; i < func->parameters.len; i++) {
172
+ const ParameterInfo &param = func->parameters[i];
173
+ K_ASSERT(param.directions >= 1 && param.directions <= 3);
287
174
 
288
- if (!IsObject(value)) [[unlikely]] {
289
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected object", GetValueType(instance, value));
290
- return false;
291
- }
175
+ Napi::Value value = info[param.offset];
292
176
 
293
- Napi::Object obj = value.As<Napi::Object>();
177
+ switch (param.type->primitive) {
178
+ case PrimitiveKind::Void: { K_UNREACHABLE(); } break;
294
179
 
295
- if (param.fast) {
296
- uint8_t *ptr = (uint8_t *)(fast_ptr++);
297
- if (!PushObject(obj, param.type, ptr))
180
+ case PrimitiveKind::Bool: {
181
+ if (!value.IsBoolean()) [[unlikely]] {
182
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
298
183
  return false;
299
- } else {
300
- uint8_t *ptr = (uint8_t *)args_ptr;
301
- if (!PushObject(obj, param.type, ptr))
184
+ }
185
+
186
+ bool b = value.As<Napi::Boolean>();
187
+ *(bool *)((param.fast ? fast_ptr : args_ptr)++) = b;
188
+ } break;
189
+ case PrimitiveKind::Int8: { PUSH_INTEGER_32(int8_t); } break;
190
+ case PrimitiveKind::UInt8: { PUSH_INTEGER_32(uint8_t); } break;
191
+ case PrimitiveKind::Int16: { PUSH_INTEGER_32(int16_t); } break;
192
+ case PrimitiveKind::Int16S: { PUSH_INTEGER_32_SWAP(int16_t); } break;
193
+ case PrimitiveKind::UInt16: { PUSH_INTEGER_32(uint16_t); } break;
194
+ case PrimitiveKind::UInt16S: { PUSH_INTEGER_32_SWAP(uint16_t); } break;
195
+ case PrimitiveKind::Int32: { PUSH_INTEGER_32(int32_t); } break;
196
+ case PrimitiveKind::Int32S: { PUSH_INTEGER_32_SWAP(int32_t); } break;
197
+ case PrimitiveKind::UInt32: { PUSH_INTEGER_32(uint32_t); } break;
198
+ case PrimitiveKind::UInt32S: { PUSH_INTEGER_32_SWAP(uint32_t); } break;
199
+ case PrimitiveKind::Int64: { PUSH_INTEGER_64(int64_t); } break;
200
+ case PrimitiveKind::Int64S: { PUSH_INTEGER_64_SWAP(int64_t); } break;
201
+ case PrimitiveKind::UInt64: { PUSH_INTEGER_64(uint64_t); } break;
202
+ case PrimitiveKind::UInt64S: { PUSH_INTEGER_64_SWAP(uint64_t); } break;
203
+ case PrimitiveKind::String: {
204
+ const char *str;
205
+ if (!PushString(value, param.directions, &str)) [[unlikely]]
302
206
  return false;
303
- args_ptr = (uint32_t *)AlignUp(ptr + param.type->size, 4);
304
- }
305
- };
306
- CASE(Array) { K_UNREACHABLE(); };
307
207
 
308
- CASE(Float32) {
309
- const ParameterInfo &param = func->parameters[i];
310
- Napi::Value value = info[param.offset];
208
+ *(const char **)((param.fast ? fast_ptr : args_ptr)++) = str;
209
+ } break;
210
+ case PrimitiveKind::String16: {
211
+ const char16_t *str16;
212
+ if (!PushString16(value, param.directions, &str16)) [[unlikely]]
213
+ return false;
311
214
 
312
- float f;
313
- if (!TryNumber(value, &f)) [[unlikely]] {
314
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
315
- return false;
316
- }
215
+ *(const char16_t **)((param.fast ? fast_ptr : args_ptr)++) = str16;
216
+ } break;
217
+ case PrimitiveKind::String32: {
218
+ const char32_t *str32;
219
+ if (!PushString32(value, param.directions, &str32)) [[unlikely]]
220
+ return false;
317
221
 
318
- *(float *)((param.fast ? fast_ptr : args_ptr)++) = f;
319
- };
320
- CASE(Float64) {
321
- const ParameterInfo &param = func->parameters[i];
322
- Napi::Value value = info[param.offset];
222
+ *(const char32_t **)((param.fast ? fast_ptr : args_ptr)++) = str32;
223
+ } break;
224
+ case PrimitiveKind::Pointer: {
225
+ void *ptr;
226
+ if (!PushPointer(value, param.type, param.directions, &ptr)) [[unlikely]]
227
+ return false;
323
228
 
324
- double d;
325
- if (!TryNumber(value, &d)) [[unlikely]] {
326
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
327
- return false;
328
- }
229
+ *(void **)((param.fast ? fast_ptr : args_ptr)++) = ptr;
230
+ } break;
231
+ case PrimitiveKind::Record:
232
+ case PrimitiveKind::Union: {
233
+ if (!IsObject(value)) [[unlikely]] {
234
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected object", GetValueType(instance, value));
235
+ return false;
236
+ }
329
237
 
330
- *(double *)args_ptr = d;
331
- args_ptr += 2;
332
- };
238
+ Napi::Object obj = value.As<Napi::Object>();
239
+
240
+ if (param.fast) {
241
+ uint8_t *ptr = (uint8_t *)(fast_ptr++);
242
+ if (!PushObject(obj, param.type, ptr))
243
+ return false;
244
+ } else {
245
+ uint8_t *ptr = (uint8_t *)args_ptr;
246
+ if (!PushObject(obj, param.type, ptr))
247
+ return false;
248
+ args_ptr = (uint32_t *)AlignUp(ptr + param.type->size, 4);
249
+ }
250
+ } break;
251
+ case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
252
+ case PrimitiveKind::Float32: {
253
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
254
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
255
+ return false;
256
+ }
333
257
 
334
- CASE(Callback) {
335
- const ParameterInfo &param = func->parameters[i];
336
- Napi::Value value = info[param.offset];
258
+ float f = GetNumber<float>(value);
259
+ *(float *)((param.fast ? fast_ptr : args_ptr)++) = f;
260
+ } break;
261
+ case PrimitiveKind::Float64: {
262
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
263
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
264
+ return false;
265
+ }
337
266
 
338
- void *ptr;
339
- if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
340
- return false;
267
+ double d = GetNumber<double>(value);
268
+ *(double *)args_ptr = d;
269
+ args_ptr += 2;
270
+ } break;
271
+ case PrimitiveKind::Callback: {
272
+ void *ptr;
273
+ if (!PushCallback(value, param.type, &ptr)) [[unlikely]]
274
+ return false;
341
275
 
342
- *(void **)((param.fast ? fast_ptr : args_ptr)++) = ptr;
343
- };
276
+ *(void **)((param.fast ? fast_ptr : args_ptr)++) = ptr;
277
+ } break;
344
278
 
345
- CASE(Prototype) { /* End loop */ };
279
+ case PrimitiveKind::Prototype: { K_UNREACHABLE(); } break;
280
+ }
346
281
  }
347
282
 
348
283
  #undef PUSH_INTEGER_64_SWAP
@@ -350,10 +285,6 @@ bool CallData::Prepare(const FunctionInfo *func, const Napi::CallbackInfo &info)
350
285
  #undef PUSH_INTEGER_32_SWAP
351
286
  #undef PUSH_INTEGER_32
352
287
 
353
- #undef OR
354
- #undef CASE
355
- #undef LOOP
356
-
357
288
  new_sp = mem->stack.end();
358
289
 
359
290
  return true;
@@ -382,7 +313,7 @@ void CallData::Execute(const FunctionInfo *func, void *native)
382
313
  };
383
314
 
384
315
  // Adjust stack limits so SEH works correctly
385
- teb->ExceptionList = (void *)-1; // EXCEPTION_CHAIN_END
316
+ teb->ExceptionList = mem->stack0.end() - K_SIZE(SehFrame);
386
317
  teb->StackBase = mem->stack0.end();
387
318
  teb->StackLimit = mem->stack0.ptr;
388
319
  teb->DeallocationStack = mem->stack0.ptr;
@@ -479,8 +410,17 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
479
410
  case PrimitiveKind::String: return result.ptr ? Napi::String::New(env, (const char *)result.ptr) : env.Null();
480
411
  case PrimitiveKind::String16: return result.ptr ? Napi::String::New(env, (const char16_t *)result.ptr) : env.Null();
481
412
  case PrimitiveKind::String32: return result.ptr ? MakeStringFromUTF32(env, (const char32_t *)result.ptr) : env.Null();
482
- case PrimitiveKind::Pointer: return result.ptr ? WrapPointer(env, func->ret.type->ref.type, result.ptr) : env.Null();
483
- case PrimitiveKind::Callback: return result.ptr ? WrapCallback(env, func->ret.type->ref.type, result.ptr) : env.Null();
413
+ case PrimitiveKind::Pointer:
414
+ case PrimitiveKind::Callback: {
415
+ if (result.ptr) {
416
+ Napi::External<void> external = Napi::External<void>::New(env, result.ptr);
417
+ SetValueTag(external, func->ret.type->ref.marker);
418
+
419
+ return external;
420
+ } else {
421
+ return env.Null();
422
+ }
423
+ } break;
484
424
  case PrimitiveKind::Record:
485
425
  case PrimitiveKind::Union: {
486
426
  const uint8_t *ptr = return_ptr ? (const uint8_t *)return_ptr
@@ -499,8 +439,11 @@ Napi::Value CallData::Complete(const FunctionInfo *func)
499
439
  K_UNREACHABLE();
500
440
  }
501
441
 
502
- void CallData::Relay(Size idx, uint8_t *, uint8_t *caller_sp, bool switch_stack, BackRegisters *out_reg)
442
+ void CallData::Relay(Size idx, uint8_t *sp)
503
443
  {
444
+ uint8_t *caller_sp = sp + 48;
445
+ BackRegisters *out_reg = (BackRegisters *)(sp + 16);
446
+
504
447
  if (env.IsExceptionPending()) [[unlikely]]
505
448
  return;
506
449
 
@@ -690,21 +633,18 @@ void CallData::Relay(Size idx, uint8_t *, uint8_t *caller_sp, bool switch_stack,
690
633
  Napi::Value arg = str32 ? MakeStringFromUTF32(env, str32) : env.Null();
691
634
  arguments.Append(arg);
692
635
  } break;
693
- case PrimitiveKind::Pointer: {
636
+ case PrimitiveKind::Pointer:
637
+ case PrimitiveKind::Callback: {
694
638
  void *ptr2 = *(void **)(args_ptr++);
695
639
 
696
- Napi::Value p = ptr2 ? WrapPointer(env, param.type->ref.type, ptr2) : env.Null();
697
- arguments.Append(p);
640
+ if (ptr2) {
641
+ Napi::External<void> external = Napi::External<void>::New(env, ptr2);
642
+ SetValueTag(external, param.type->ref.marker);
698
643
 
699
- if (param.type->dispose) {
700
- param.type->dispose(env, param.type, ptr2);
644
+ arguments.Append(external);
645
+ } else {
646
+ arguments.Append(env.Null());
701
647
  }
702
- } break;
703
- case PrimitiveKind::Callback: {
704
- void *ptr2 = *(void **)(args_ptr++);
705
-
706
- Napi::Value p = ptr2 ? WrapCallback(env, param.type->ref.type, ptr2) : env.Null();
707
- arguments.Append(p);
708
648
 
709
649
  if (param.type->dispose) {
710
650
  param.type->dispose(env, param.type, ptr2);
@@ -742,61 +682,56 @@ void CallData::Relay(Size idx, uint8_t *, uint8_t *caller_sp, bool switch_stack,
742
682
 
743
683
  const TypeInfo *type = proto->ret.type;
744
684
 
745
- // Make the call
746
- napi_value ret;
747
- if (switch_stack) {
748
- ret = CallSwitchStack(&func, (size_t)arguments.len, arguments.data, old_sp, &mem->stack,
749
- [](Napi::Function *func, size_t argc, napi_value *argv) { return (napi_value)func->Call(argv[0], argc - 1, argv + 1); });
750
- } else {
751
- ret = (napi_value)func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
752
- }
753
- Napi::Value value(env, ret);
685
+ // Make the call!
686
+ Napi::Value value = func.Call(arguments[0], arguments.len - 1, arguments.data + 1);
754
687
 
755
688
  if (env.IsExceptionPending()) [[unlikely]]
756
689
  return;
757
690
 
758
691
  #define RETURN_INTEGER_32(CType) \
759
692
  do { \
760
- CType v; \
761
- if (!TryNumber(value, &v)) [[unlikely]] { \
693
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
762
694
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
763
695
  return; \
764
696
  } \
765
697
  \
698
+ CType v = GetNumber<CType>(value); \
766
699
  out_reg->eax = (uint32_t)v; \
767
700
  out_reg->ret_type = 0; \
768
701
  } while (false)
769
702
  #define RETURN_INTEGER_32_SWAP(CType) \
770
703
  do { \
771
- CType v; \
772
- if (!TryNumber(value, &v)) [[unlikely]] { \
704
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
773
705
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
774
706
  return; \
775
707
  } \
776
708
  \
709
+ CType v = GetNumber<CType>(value); \
777
710
  out_reg->eax = (uint32_t)ReverseBytes(v); \
778
711
  out_reg->ret_type = 0; \
779
712
  } while (false)
780
713
  #define RETURN_INTEGER_64(CType) \
781
714
  do { \
782
- CType v; \
783
- if (!TryNumber(value, &v)) [[unlikely]] { \
715
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
784
716
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
785
717
  return; \
786
718
  } \
787
719
  \
720
+ CType v = GetNumber<CType>(value); \
721
+ \
788
722
  out_reg->eax = (uint32_t)((uint64_t)v >> 32); \
789
723
  out_reg->edx = (uint32_t)((uint64_t)v & 0xFFFFFFFFu); \
790
724
  out_reg->ret_type = 0; \
791
725
  } while (false)
792
726
  #define RETURN_INTEGER_64_SWAP(CType) \
793
727
  do { \
794
- CType v; \
795
- if (!TryNumber(value, &v)) [[unlikely]] { \
728
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
796
729
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
797
730
  return; \
798
731
  } \
799
732
  \
733
+ CType v = ReverseBytes(GetNumber<CType>(value)); \
734
+ \
800
735
  out_reg->eax = (uint32_t)((uint64_t)v >> 32); \
801
736
  out_reg->edx = (uint32_t)((uint64_t)v & 0xFFFFFFFFu); \
802
737
  out_reg->ret_type = 0; \
@@ -805,12 +740,12 @@ void CallData::Relay(Size idx, uint8_t *, uint8_t *caller_sp, bool switch_stack,
805
740
  switch (type->primitive) {
806
741
  case PrimitiveKind::Void: { out_reg->ret_type = 0; } break;
807
742
  case PrimitiveKind::Bool: {
808
- bool b;
809
- if (napi_get_value_bool(env, value, &b) != napi_ok) [[unlikely]] {
743
+ if (!value.IsBoolean()) [[unlikely]] {
810
744
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
811
745
  return;
812
746
  }
813
747
 
748
+ bool b = value.As<Napi::Boolean>();
814
749
  out_reg->eax = (uint32_t)b;
815
750
  out_reg->ret_type = 0;
816
751
  } break;
@@ -853,9 +788,24 @@ void CallData::Relay(Size idx, uint8_t *, uint8_t *caller_sp, bool switch_stack,
853
788
  out_reg->ret_type = 0;
854
789
  } break;
855
790
  case PrimitiveKind::Pointer: {
856
- void *ptr;
857
- if (!PushPointer(value, type, 1, &ptr)) [[unlikely]]
791
+ uint8_t *ptr;
792
+
793
+ if (CheckValueTag(value, type->ref.marker)) {
794
+ ptr = value.As<Napi::External<uint8_t>>().Data();
795
+ } else if (IsObject(value) && (type->ref.type->primitive == PrimitiveKind::Record ||
796
+ type->ref.type->primitive == PrimitiveKind::Union)) {
797
+ Napi::Object obj = value.As<Napi::Object>();
798
+
799
+ ptr = AllocHeap(type->ref.type->size, 16);
800
+
801
+ if (!PushObject(obj, type->ref.type, ptr))
802
+ return;
803
+ } else if (IsNullOrUndefined(value)) {
804
+ ptr = nullptr;
805
+ } else {
806
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
858
807
  return;
808
+ }
859
809
 
860
810
  out_reg->eax = (uint32_t)ptr;
861
811
  out_reg->ret_type = 0;
@@ -881,29 +831,40 @@ void CallData::Relay(Size idx, uint8_t *, uint8_t *caller_sp, bool switch_stack,
881
831
  } break;
882
832
  case PrimitiveKind::Array: { K_UNREACHABLE(); } break;
883
833
  case PrimitiveKind::Float32: {
884
- float f;
885
- if (!TryNumber(value, &f)) [[unlikely]] {
834
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
886
835
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
887
836
  return;
888
837
  }
889
838
 
890
- out_reg->x87.f = f;
839
+ out_reg->x87.f = GetNumber<float>(value);
891
840
  out_reg->ret_type = 1;
892
841
  } break;
893
842
  case PrimitiveKind::Float64: {
894
- double d;
895
- if (!TryNumber(value, &d)) [[unlikely]] {
843
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
896
844
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
897
845
  return;
898
846
  }
899
847
 
900
- out_reg->x87.d = d;
848
+ out_reg->x87.d = GetNumber<double>(value);
901
849
  out_reg->ret_type = 2;
902
850
  } break;
903
851
  case PrimitiveKind::Callback: {
904
852
  void *ptr;
905
- if (!PushCallback(value, type, &ptr)) [[unlikely]]
853
+
854
+ if (value.IsFunction()) {
855
+ Napi::Function func2 = value.As<Napi::Function>();
856
+
857
+ ptr = ReserveTrampoline(type->ref.proto, func2);
858
+ if (!ptr) [[unlikely]]
859
+ return;
860
+ } else if (CheckValueTag(value, type->ref.marker)) {
861
+ ptr = value.As<Napi::External<void>>().Data();
862
+ } else if (IsNullOrUndefined(value)) {
863
+ ptr = nullptr;
864
+ } else {
865
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
906
866
  return;
867
+ }
907
868
 
908
869
  out_reg->eax = (uint32_t)ptr;
909
870
  out_reg->ret_type = 0;