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
@@ -22,18 +22,70 @@ static const Size MaxParameters = 64;
22
22
  static const Size MaxTrampolines = 8192;
23
23
 
24
24
  enum class PrimitiveKind {
25
- #define PRIMITIVE(Name) Name,
26
- #include "primitives.inc"
25
+ // Void is explictly not first so that it is not 0, for reasons related to N-API type tags.
26
+ // Look at TypeInfo definition for more information!
27
+ Bool,
28
+ Void,
29
+ Int8,
30
+ UInt8,
31
+ Int16,
32
+ Int16S, // Keep behind Int16
33
+ UInt16,
34
+ UInt16S, // Keep behind UInt16
35
+ Int32,
36
+ Int32S, // Keep behind Int32
37
+ UInt32,
38
+ UInt32S, // Keep behind UInt32
39
+ Int64,
40
+ Int64S, // Keep behind Int64
41
+ UInt64,
42
+ UInt64S, // Keep behind UInt64
43
+ String,
44
+ String16,
45
+ String32,
46
+ Pointer,
47
+ Record,
48
+ Union,
49
+ Array,
50
+ Float32,
51
+ Float64,
52
+ Prototype,
53
+ Callback
27
54
  };
28
55
  static const char *const PrimitiveKindNames[] = {
29
- #define PRIMITIVE(Name) K_STRINGIFY(Name),
30
- #include "primitives.inc"
56
+ "Bool",
57
+ "Void",
58
+ "Int8",
59
+ "UInt8",
60
+ "Int16",
61
+ "Int16S",
62
+ "UInt16",
63
+ "UInt16S",
64
+ "Int32",
65
+ "Int32S",
66
+ "UInt32",
67
+ "UInt32S",
68
+ "Int64",
69
+ "Int64S",
70
+ "UInt64",
71
+ "UInt64S",
72
+ "String",
73
+ "String16",
74
+ "String32",
75
+ "Pointer",
76
+ "Record",
77
+ "Union",
78
+ "Array",
79
+ "Float32",
80
+ "Float64",
81
+ "Prototype",
82
+ "Callback"
31
83
  };
32
84
 
33
85
  struct TypeInfo;
34
86
  struct RecordMember;
35
87
  struct FunctionInfo;
36
- class CallData;
88
+ struct CallData;
37
89
 
38
90
  typedef void DisposeFunc (Napi::Env env, const TypeInfo *type, const void *ptr);
39
91
 
@@ -57,7 +109,7 @@ static const char *const ArrayHintNames[] = {
57
109
  struct TypeInfo {
58
110
  const char *name;
59
111
 
60
- // Make sure primitive ends up as the upper N-API tag value when we cast TypeInfo pointers to
112
+ // Make sure primitie ends up as the upper N-API tag value when we cast TypeInfo pointers to
61
113
  // napi_type_tag pointers. Yes, I want to do this. We don't do strict aliasing here.
62
114
  // N.B. Some node versions don't like when one of the two tag values is 0, so make sure
63
115
  // this does not happen! It would happen if primitive is 0 and size is 0. To avoid this
@@ -72,6 +124,7 @@ struct TypeInfo {
72
124
 
73
125
  HeapArray<RecordMember> members; // Record only
74
126
  union {
127
+ const void *marker;
75
128
  const TypeInfo *type; // Pointer or array
76
129
  const FunctionInfo *proto; // Callback only
77
130
  } ref;
@@ -170,7 +223,6 @@ struct FunctionInfo {
170
223
 
171
224
  ParameterInfo ret;
172
225
  HeapArray<ParameterInfo> parameters;
173
- HeapArray<PrimitiveKind> primitives;
174
226
  int8_t required_parameters;
175
227
  int8_t out_parameters;
176
228
  bool variadic;
@@ -197,8 +249,6 @@ struct InstanceMemory {
197
249
  Span<uint8_t> stack0;
198
250
  Span<uint8_t> heap;
199
251
 
200
- uint16_t generation; // Can wrap without risk
201
-
202
252
  bool busy;
203
253
  bool temporary;
204
254
  int depth;
@@ -228,9 +278,6 @@ struct InstanceData {
228
278
  LocalArray<InstanceMemory *, 17> memories;
229
279
  int temporaries = 0;
230
280
 
231
- // Variadic cache
232
- FunctionInfo *variadic_func = nullptr;
233
-
234
281
  std::thread::id main_thread_id;
235
282
  napi_threadsafe_function broker = nullptr;
236
283
 
@@ -256,9 +303,6 @@ struct InstanceData {
256
303
  int resident_async_pools = DefaultResidentAsyncPools;
257
304
  int max_temporaries = DefaultMaxAsyncCalls - DefaultResidentAsyncPools;
258
305
  Size max_type_size = DefaultMaxTypeSize;
259
-
260
- bool fast_pointers = false;
261
- bool fast_callbacks = false;
262
306
  } config;
263
307
 
264
308
  struct {
@@ -276,7 +320,7 @@ struct TrampolineInfo {
276
320
  Napi::FunctionReference func;
277
321
  Napi::Reference<Napi::Value> recv;
278
322
 
279
- int32_t generation;
323
+ bool used;
280
324
  };
281
325
 
282
326
  struct SharedData {
@@ -38,6 +38,7 @@ function init(triplet, native) {
38
38
  }
39
39
 
40
40
  let filenames = roots.flatMap(root => triplets.flatMap(triplet => [
41
+ `${root}/koffi/build/koffi/${triplet}/koffi.node`,
41
42
  `${root}/build/koffi/${triplet}/koffi.node`,
42
43
  `${root}/koffi/${triplet}/koffi.node`,
43
44
  `${root}/node_modules/koffi/build/koffi/${triplet}/koffi.node`,
@@ -532,7 +532,7 @@ const char *GetValueType(const InstanceData *instance, Napi::Value value)
532
532
  if (CheckValueTag(value, &TypeInfoMarker))
533
533
  return "Type";
534
534
  for (const TypeInfo &type: instance->types) {
535
- if (type.ref.type && CheckValueTag(value, type.ref.type))
535
+ if (type.ref.marker && CheckValueTag(value, type.ref.marker))
536
536
  return type.name;
537
537
  }
538
538
 
@@ -857,7 +857,8 @@ void DecodeObject(Napi::Object obj, const uint8_t *origin, const TypeInfo *type)
857
857
  const char32_t *str32 = *(const char32_t **)src;
858
858
  obj.Set(member.name, str32 ? MakeStringFromUTF32(env, str32) : env.Null());
859
859
  } break;
860
- case PrimitiveKind::Pointer: {
860
+ case PrimitiveKind::Pointer:
861
+ case PrimitiveKind::Callback: {
861
862
  void *ptr2 = *(void **)src;
862
863
 
863
864
  if (member.countedby >= 0) {
@@ -866,20 +867,14 @@ void DecodeObject(Napi::Object obj, const uint8_t *origin, const TypeInfo *type)
866
867
 
867
868
  Napi::Value value = DecodeArray(env, (const uint8_t *)ptr2, member.type, len);
868
869
  obj.Set(member.name, value);
869
- } else {
870
- Napi::Value p = ptr2 ? WrapPointer(env, member.type->ref.type, ptr2) : env.Null();
871
- obj.Set(member.name, p);
872
- }
870
+ } else if (ptr2) {
871
+ Napi::External<void> external = Napi::External<void>::New(env, ptr2);
872
+ SetValueTag(external, member.type->ref.marker);
873
873
 
874
- if (member.type->dispose) {
875
- member.type->dispose(env, member.type, ptr2);
874
+ obj.Set(member.name, external);
875
+ } else {
876
+ obj.Set(member.name, env.Null());
876
877
  }
877
- } break;
878
- case PrimitiveKind::Callback: {
879
- void *ptr2 = *(void **)src;
880
-
881
- Napi::Value p = ptr2 ? WrapCallback(env, member.type->ref.type, ptr2) : env.Null();
882
- obj.Set(member.name, p);
883
878
 
884
879
  if (member.type->dispose) {
885
880
  member.type->dispose(env, member.type, ptr2);
@@ -941,8 +936,7 @@ Napi::Value DecodeArray(Napi::Env env, const uint8_t *origin, const TypeInfo *ty
941
936
  \
942
937
  return array; \
943
938
  } while (false)
944
-
945
- #define POP_NUMBERS(TypedArrayType, CType) \
939
+ #define POP_NUMBER_ARRAY(TypedArrayType, CType) \
946
940
  do { \
947
941
  if (type->hint == ArrayHint::Array) { \
948
942
  POP_ARRAY({ \
@@ -958,7 +952,7 @@ Napi::Value DecodeArray(Napi::Env env, const uint8_t *origin, const TypeInfo *ty
958
952
  return array; \
959
953
  } \
960
954
  } while (false)
961
- #define POP_NUMBERS_SWAP(TypedArrayType, CType) \
955
+ #define POP_NUMBER_ARRAY_SWAP(TypedArrayType, CType) \
962
956
  do { \
963
957
  if (type->hint == ArrayHint::Array) { \
964
958
  POP_ARRAY({ \
@@ -994,9 +988,9 @@ Napi::Value DecodeArray(Napi::Env env, const uint8_t *origin, const TypeInfo *ty
994
988
  return str;
995
989
  }
996
990
 
997
- POP_NUMBERS(Int8Array, int8_t);
991
+ POP_NUMBER_ARRAY(Int8Array, int8_t);
998
992
  } break;
999
- case PrimitiveKind::UInt8: { POP_NUMBERS(Uint8Array, uint8_t); } break;
993
+ case PrimitiveKind::UInt8: { POP_NUMBER_ARRAY(Uint8Array, uint8_t); } break;
1000
994
  case PrimitiveKind::Int16: {
1001
995
  if (type->hint == ArrayHint::String) {
1002
996
  const char16_t *ptr = (const char16_t *)origin;
@@ -1006,11 +1000,11 @@ Napi::Value DecodeArray(Napi::Env env, const uint8_t *origin, const TypeInfo *ty
1006
1000
  return str;
1007
1001
  }
1008
1002
 
1009
- POP_NUMBERS(Int16Array, int16_t);
1003
+ POP_NUMBER_ARRAY(Int16Array, int16_t);
1010
1004
  } break;
1011
- case PrimitiveKind::Int16S: { POP_NUMBERS_SWAP(Int16Array, int16_t); } break;
1012
- case PrimitiveKind::UInt16: { POP_NUMBERS(Uint16Array, uint16_t); } break;
1013
- case PrimitiveKind::UInt16S: { POP_NUMBERS_SWAP(Uint16Array, uint16_t); } break;
1005
+ case PrimitiveKind::Int16S: { POP_NUMBER_ARRAY_SWAP(Int16Array, int16_t); } break;
1006
+ case PrimitiveKind::UInt16: { POP_NUMBER_ARRAY(Uint16Array, uint16_t); } break;
1007
+ case PrimitiveKind::UInt16S: { POP_NUMBER_ARRAY_SWAP(Uint16Array, uint16_t); } break;
1014
1008
  case PrimitiveKind::Int32: {
1015
1009
  if (type->hint == ArrayHint::String) {
1016
1010
  const char32_t *ptr = (const char32_t *)origin;
@@ -1020,11 +1014,11 @@ Napi::Value DecodeArray(Napi::Env env, const uint8_t *origin, const TypeInfo *ty
1020
1014
  return str;
1021
1015
  }
1022
1016
 
1023
- POP_NUMBERS(Int32Array, int32_t);
1017
+ POP_NUMBER_ARRAY(Int32Array, int32_t);
1024
1018
  } break;
1025
- case PrimitiveKind::Int32S: { POP_NUMBERS_SWAP(Int32Array, int32_t); } break;
1026
- case PrimitiveKind::UInt32: { POP_NUMBERS(Uint32Array, uint32_t); } break;
1027
- case PrimitiveKind::UInt32S: { POP_NUMBERS_SWAP(Uint32Array, uint32_t); } break;
1019
+ case PrimitiveKind::Int32S: { POP_NUMBER_ARRAY_SWAP(Int32Array, int32_t); } break;
1020
+ case PrimitiveKind::UInt32: { POP_NUMBER_ARRAY(Uint32Array, uint32_t); } break;
1021
+ case PrimitiveKind::UInt32S: { POP_NUMBER_ARRAY_SWAP(Uint32Array, uint32_t); } break;
1028
1022
  case PrimitiveKind::Int64: {
1029
1023
  POP_ARRAY({
1030
1024
  int64_t v = *(int64_t *)src;
@@ -1067,20 +1061,19 @@ Napi::Value DecodeArray(Napi::Env env, const uint8_t *origin, const TypeInfo *ty
1067
1061
  array.Set(i, str32 ? MakeStringFromUTF32(env, str32) : env.Null());
1068
1062
  });
1069
1063
  } break;
1070
- case PrimitiveKind::Pointer: {
1071
- POP_ARRAY({
1072
- void *ptr2 = *(void **)src;
1073
-
1074
- Napi::Value p = ptr2 ? WrapPointer(env, type->ref.type->ref.type, ptr2) : env.Null();
1075
- array.Set(i, p);
1076
- });
1077
- } break;
1064
+ case PrimitiveKind::Pointer:
1078
1065
  case PrimitiveKind::Callback: {
1079
1066
  POP_ARRAY({
1080
1067
  void *ptr2 = *(void **)src;
1081
1068
 
1082
- Napi::Value p = ptr2 ? WrapCallback(env, type->ref.type->ref.type, ptr2) : env.Null();
1083
- array.Set(i, p);
1069
+ if (ptr2) {
1070
+ Napi::External<void> external = Napi::External<void>::New(env, ptr2);
1071
+ SetValueTag(external, type->ref.type->ref.marker);
1072
+
1073
+ array.Set(i, external);
1074
+ } else {
1075
+ array.Set(i, env.Null());
1076
+ }
1084
1077
  });
1085
1078
  } break;
1086
1079
  case PrimitiveKind::Record:
@@ -1096,15 +1089,14 @@ Napi::Value DecodeArray(Napi::Env env, const uint8_t *origin, const TypeInfo *ty
1096
1089
  array.Set(i, value);
1097
1090
  });
1098
1091
  } break;
1099
- case PrimitiveKind::Float32: { POP_NUMBERS(Float32Array, float); } break;
1100
- case PrimitiveKind::Float64: { POP_NUMBERS(Float64Array, double); } break;
1092
+ case PrimitiveKind::Float32: { POP_NUMBER_ARRAY(Float32Array, float); } break;
1093
+ case PrimitiveKind::Float64: { POP_NUMBER_ARRAY(Float64Array, double); } break;
1101
1094
 
1102
1095
  case PrimitiveKind::Prototype: { K_UNREACHABLE(); } break;
1103
1096
  }
1104
1097
 
1105
- #undef POP_NUMBERS_SWAP
1106
- #undef POP_NUMBERS
1107
-
1098
+ #undef POP_NUMBER_ARRAY_SWAP
1099
+ #undef POP_NUMBER_ARRAY
1108
1100
  #undef POP_ARRAY
1109
1101
 
1110
1102
  K_UNREACHABLE();
@@ -1139,15 +1131,14 @@ void DecodeNormalArray(Napi::Array array, const uint8_t *origin, const TypeInfo
1139
1131
  offset += ref->size; \
1140
1132
  } \
1141
1133
  } while (false)
1142
-
1143
- #define POP_NUMBERS(CType) \
1134
+ #define POP_NUMBER_ARRAY(CType) \
1144
1135
  do { \
1145
1136
  POP_ARRAY({ \
1146
1137
  double d = (double)*(CType *)src; \
1147
1138
  array.Set(i, Napi::Number::New(env, d)); \
1148
1139
  }); \
1149
1140
  } while (false)
1150
- #define POP_NUMBERS_SWAP(CType) \
1141
+ #define POP_NUMBER_ARRAY_SWAP(CType) \
1151
1142
  do { \
1152
1143
  POP_ARRAY({ \
1153
1144
  CType v = *(CType *)src; \
@@ -1165,16 +1156,16 @@ void DecodeNormalArray(Napi::Array array, const uint8_t *origin, const TypeInfo
1165
1156
  array.Set(i, Napi::Boolean::New(env, b));
1166
1157
  });
1167
1158
  } break;
1168
- case PrimitiveKind::Int8: { POP_NUMBERS(int8_t); } break;
1169
- case PrimitiveKind::UInt8: { POP_NUMBERS(uint8_t); } break;
1170
- case PrimitiveKind::Int16: { POP_NUMBERS(int16_t); } break;
1171
- case PrimitiveKind::Int16S: { POP_NUMBERS_SWAP(int16_t); } break;
1172
- case PrimitiveKind::UInt16: { POP_NUMBERS(uint16_t); } break;
1173
- case PrimitiveKind::UInt16S: { POP_NUMBERS_SWAP(uint16_t); } break;
1174
- case PrimitiveKind::Int32: { POP_NUMBERS(int32_t); } break;
1175
- case PrimitiveKind::Int32S: { POP_NUMBERS_SWAP(int32_t); } break;
1176
- case PrimitiveKind::UInt32: { POP_NUMBERS(uint32_t); } break;
1177
- case PrimitiveKind::UInt32S: { POP_NUMBERS_SWAP(uint32_t); } break;
1159
+ case PrimitiveKind::Int8: { POP_NUMBER_ARRAY(int8_t); } break;
1160
+ case PrimitiveKind::UInt8: { POP_NUMBER_ARRAY(uint8_t); } break;
1161
+ case PrimitiveKind::Int16: { POP_NUMBER_ARRAY(int16_t); } break;
1162
+ case PrimitiveKind::Int16S: { POP_NUMBER_ARRAY_SWAP(int16_t); } break;
1163
+ case PrimitiveKind::UInt16: { POP_NUMBER_ARRAY(uint16_t); } break;
1164
+ case PrimitiveKind::UInt16S: { POP_NUMBER_ARRAY_SWAP(uint16_t); } break;
1165
+ case PrimitiveKind::Int32: { POP_NUMBER_ARRAY(int32_t); } break;
1166
+ case PrimitiveKind::Int32S: { POP_NUMBER_ARRAY_SWAP(int32_t); } break;
1167
+ case PrimitiveKind::UInt32: { POP_NUMBER_ARRAY(uint32_t); } break;
1168
+ case PrimitiveKind::UInt32S: { POP_NUMBER_ARRAY_SWAP(uint32_t); } break;
1178
1169
  case PrimitiveKind::Int64: {
1179
1170
  POP_ARRAY({
1180
1171
  int64_t v = *(int64_t *)src;
@@ -1229,24 +1220,19 @@ void DecodeNormalArray(Napi::Array array, const uint8_t *origin, const TypeInfo
1229
1220
  }
1230
1221
  });
1231
1222
  } break;
1232
- case PrimitiveKind::Pointer: {
1223
+ case PrimitiveKind::Pointer:
1224
+ case PrimitiveKind::Callback: {
1233
1225
  POP_ARRAY({
1234
1226
  void *ptr2 = *(void **)src;
1235
1227
 
1236
- Napi::Value p = ptr2 ? WrapPointer(env, ref->ref.type, ptr2) : env.Null();
1237
- array.Set(i, p);
1228
+ if (ptr2) {
1229
+ Napi::External<void> external = Napi::External<void>::New(env, ptr2);
1230
+ SetValueTag(external, ref->ref.marker);
1238
1231
 
1239
- if (ref->dispose) {
1240
- ref->dispose(env, ref, ptr2);
1232
+ array.Set(i, external);
1233
+ } else {
1234
+ array.Set(i, env.Null());
1241
1235
  }
1242
- });
1243
- } break;
1244
- case PrimitiveKind::Callback: {
1245
- POP_ARRAY({
1246
- void *ptr2 = *(void **)src;
1247
-
1248
- Napi::Value p = ptr2 ? WrapCallback(env, ref->ref.type, ptr2) : env.Null();
1249
- array.Set(i, p);
1250
1236
 
1251
1237
  if (ref->dispose) {
1252
1238
  ref->dispose(env, ref, ptr2);
@@ -1266,15 +1252,14 @@ void DecodeNormalArray(Napi::Array array, const uint8_t *origin, const TypeInfo
1266
1252
  array.Set(i, value);
1267
1253
  });
1268
1254
  } break;
1269
- case PrimitiveKind::Float32: { POP_NUMBERS(float); } break;
1270
- case PrimitiveKind::Float64: { POP_NUMBERS(double); } break;
1255
+ case PrimitiveKind::Float32: { POP_NUMBER_ARRAY(float); } break;
1256
+ case PrimitiveKind::Float64: { POP_NUMBER_ARRAY(double); } break;
1271
1257
 
1272
1258
  case PrimitiveKind::Prototype: { K_UNREACHABLE(); } break;
1273
1259
  }
1274
1260
 
1275
- #undef POP_NUMBERS_SWAP
1276
- #undef POP_NUMBERS
1277
-
1261
+ #undef POP_NUMBER_ARRAY_SWAP
1262
+ #undef POP_NUMBER_ARRAY
1278
1263
  #undef POP_ARRAY
1279
1264
  }
1280
1265
 
@@ -1309,9 +1294,14 @@ Napi::Value Decode(Napi::Value value, Size offset, const TypeInfo *type, const S
1309
1294
  Napi::Env env = value.Env();
1310
1295
  InstanceData *instance = env.GetInstanceData<InstanceData>();
1311
1296
 
1312
- const uint8_t *src = nullptr;
1297
+ const uint8_t *ptr = nullptr;
1298
+
1299
+ if (value.IsExternal()) {
1300
+ Napi::External<void> external = value.As<Napi::External<void>>();
1301
+ ptr = (const uint8_t *)external.Data();
1302
+ } else if (IsRawBuffer(value)) {
1303
+ Span<uint8_t> buffer = GetRawBuffer(value);
1313
1304
 
1314
- if (Span<uint8_t> buffer = {}; TryBuffer(value, &buffer)) {
1315
1305
  if (offset < 0) [[unlikely]] {
1316
1306
  ThrowError<Napi::Error>(env, "Offset must be >= 0");
1317
1307
  return env.Null();
@@ -1322,19 +1312,17 @@ Napi::Value Decode(Napi::Value value, Size offset, const TypeInfo *type, const S
1322
1312
  return env.Null();
1323
1313
  }
1324
1314
 
1325
- src = (const uint8_t *)buffer.ptr;
1326
- } else if (void *ptr = nullptr; TryPointer(value, &ptr)) {
1327
- src = (const uint8_t *)ptr;
1315
+ ptr = (const uint8_t *)buffer.ptr;
1328
1316
  } else {
1329
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value for variable, expected pointer", GetValueType(instance, value));
1317
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value for variable, expected external or TypedArray", GetValueType(instance, value));
1330
1318
  return env.Null();
1331
1319
  }
1332
1320
 
1333
- if (!src)
1321
+ if (!ptr)
1334
1322
  return env.Null();
1335
- src += offset;
1323
+ ptr += offset;
1336
1324
 
1337
- Napi::Value ret = Decode(env, src, type, len);
1325
+ Napi::Value ret = Decode(env, ptr, type, len);
1338
1326
  return ret;
1339
1327
  }
1340
1328
 
@@ -1441,13 +1429,10 @@ Napi::Value Decode(Napi::Env env, const uint8_t *ptr, const TypeInfo *type, cons
1441
1429
  return str32 ? MakeStringFromUTF32(env, str32) : env.Null();
1442
1430
  }
1443
1431
  } break;
1444
- case PrimitiveKind::Pointer: {
1445
- void *ptr2 = *(void **)ptr;
1446
- return ptr2 ? WrapPointer(env, type->ref.type, ptr2) : env.Null();
1447
- } break;
1432
+ case PrimitiveKind::Pointer:
1448
1433
  case PrimitiveKind::Callback: {
1449
1434
  void *ptr2 = *(void **)ptr;
1450
- return ptr2 ? WrapCallback(env, type->ref.type, ptr2) : env.Null();
1435
+ return ptr2 ? Napi::External<void>::New(env, ptr2, [](Napi::Env, void *) {}) : env.Null();
1451
1436
  } break;
1452
1437
  case PrimitiveKind::Record:
1453
1438
  case PrimitiveKind::Union: {
@@ -1477,12 +1462,10 @@ Napi::Value Decode(Napi::Env env, const uint8_t *ptr, const TypeInfo *type, cons
1477
1462
 
1478
1463
  memcpy((void *)func, proto, K_SIZE(*proto));
1479
1464
  memset((void *)&func->parameters, 0, K_SIZE(func->parameters));
1480
- memset((void *)&func->primitives, 0, K_SIZE(func->primitives));
1465
+ func->parameters = proto->parameters;
1481
1466
 
1482
1467
  func->name = "<anonymous>";
1483
1468
  func->native = (void *)ptr;
1484
- func->parameters = proto->parameters;
1485
- func->primitives = proto->primitives;
1486
1469
 
1487
1470
  // Fix back parameter offset
1488
1471
  for (ParameterInfo &param: func->parameters) {
@@ -1506,9 +1489,14 @@ bool Encode(Napi::Value ref, Size offset, Napi::Value value, const TypeInfo *typ
1506
1489
  Napi::Env env = ref.Env();
1507
1490
  InstanceData *instance = env.GetInstanceData<InstanceData>();
1508
1491
 
1509
- uint8_t *dest = nullptr;
1492
+ uint8_t *ptr = nullptr;
1493
+
1494
+ if (ref.IsExternal()) {
1495
+ Napi::External<void> external = ref.As<Napi::External<void>>();
1496
+ ptr = (uint8_t *)external.Data();
1497
+ } else if (IsRawBuffer(ref)) {
1498
+ Span<uint8_t> buffer = GetRawBuffer(ref);
1510
1499
 
1511
- if (Span<uint8_t> buffer = {}; TryBuffer(ref, &buffer)) {
1512
1500
  if (offset < 0) [[unlikely]] {
1513
1501
  ThrowError<Napi::Error>(env, "Offset must be >= 0");
1514
1502
  return env.Null();
@@ -1519,21 +1507,19 @@ bool Encode(Napi::Value ref, Size offset, Napi::Value value, const TypeInfo *typ
1519
1507
  return env.Null();
1520
1508
  }
1521
1509
 
1522
- dest = (uint8_t *)buffer.ptr;
1523
- } else if (void *ptr = nullptr; TryPointer(ref, &ptr)) {
1524
- dest = (uint8_t *)ptr;
1510
+ ptr = (uint8_t *)buffer.ptr;
1525
1511
  } else {
1526
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value for reference, expected pointer", GetValueType(instance, ref));
1512
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value for reference, expected external or TypedArray", GetValueType(instance, ref));
1527
1513
  return env.Null();
1528
1514
  }
1529
1515
 
1530
- if (!dest) [[unlikely]] {
1516
+ if (!ptr) [[unlikely]] {
1531
1517
  ThrowError<Napi::Error>(env, "Cannot encode data in NULL pointer");
1532
1518
  return env.Null();
1533
1519
  }
1534
- dest += offset;
1520
+ ptr += offset;
1535
1521
 
1536
- return Encode(env, dest, value, type, len);
1522
+ return Encode(env, ptr, value, type, len);
1537
1523
  }
1538
1524
 
1539
1525
  bool Encode(Napi::Env env, uint8_t *origin, Napi::Value value, const TypeInfo *type, const Size *len)
@@ -1557,24 +1543,22 @@ bool Encode(Napi::Env env, uint8_t *origin, Napi::Value value, const TypeInfo *t
1557
1543
 
1558
1544
  #define PUSH_INTEGER(CType) \
1559
1545
  do { \
1560
- CType v; \
1561
- \
1562
- if (!TryNumber(value, &v)) [[unlikely]] { \
1546
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
1563
1547
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
1564
1548
  return false; \
1565
1549
  } \
1566
1550
  \
1551
+ CType v = GetNumber<CType>(value); \
1567
1552
  *(CType *)origin = v; \
1568
1553
  } while (false)
1569
1554
  #define PUSH_INTEGER_SWAP(CType) \
1570
1555
  do { \
1571
- CType v; \
1572
- \
1573
- if (!TryNumber(value, &v)) [[unlikely]] { \
1556
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] { \
1574
1557
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value)); \
1575
1558
  return false; \
1576
1559
  } \
1577
1560
  \
1561
+ CType v = GetNumber<CType>(value); \
1578
1562
  *(CType *)origin = ReverseBytes(v); \
1579
1563
  } while (false)
1580
1564
 
@@ -1582,14 +1566,12 @@ bool Encode(Napi::Env env, uint8_t *origin, Napi::Value value, const TypeInfo *t
1582
1566
  case PrimitiveKind::Void: { K_UNREACHABLE(); } break;
1583
1567
 
1584
1568
  case PrimitiveKind::Bool: {
1585
- bool b;
1586
- napi_status status = napi_get_value_bool(env, value, &b);
1587
-
1588
- if (status != napi_ok) [[unlikely]] {
1569
+ if (!value.IsBoolean()) [[unlikely]] {
1589
1570
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected boolean", GetValueType(instance, value));
1590
1571
  return false;
1591
1572
  }
1592
1573
 
1574
+ bool b = value.As<Napi::Boolean>();
1593
1575
  *(bool *)origin = b;
1594
1576
  } break;
1595
1577
  case PrimitiveKind::Int8: { PUSH_INTEGER(int8_t); } break;
@@ -1647,7 +1629,8 @@ bool Encode(Napi::Env env, uint8_t *origin, Napi::Value value, const TypeInfo *t
1647
1629
  Napi::Array array = value.As<Napi::Array>();
1648
1630
  if (!call.PushNormalArray(array, type, type->size, origin))
1649
1631
  return false;
1650
- } else if (Span<uint8_t> buffer = {}; TryBuffer(value, &buffer)) {
1632
+ } else if (IsRawBuffer(value)) {
1633
+ Span<const uint8_t> buffer = GetRawBuffer(value);
1651
1634
  call.PushBuffer(buffer, type, origin);
1652
1635
  } else if (value.IsString()) {
1653
1636
  if (!call.PushStringArray(value, type, origin))
@@ -1658,34 +1641,35 @@ bool Encode(Napi::Env env, uint8_t *origin, Napi::Value value, const TypeInfo *t
1658
1641
  }
1659
1642
  } break;
1660
1643
  case PrimitiveKind::Float32: {
1661
- float f;
1662
-
1663
- if (!TryNumber(value, &f)) [[unlikely]] {
1644
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
1664
1645
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
1665
1646
  return false;
1666
1647
  }
1667
1648
 
1649
+ float f = GetNumber<float>(value);
1668
1650
  *(float *)origin = f;
1669
1651
  } break;
1670
1652
  case PrimitiveKind::Float64: {
1671
- double d;
1672
-
1673
- if (!TryNumber(value, &d)) [[unlikely]] {
1653
+ if (!value.IsNumber() && !value.IsBigInt()) [[unlikely]] {
1674
1654
  ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected number", GetValueType(instance, value));
1675
1655
  return false;
1676
1656
  }
1677
1657
 
1658
+ double d = GetNumber<double>(value);
1678
1659
  *(double *)origin = d;
1679
1660
  } break;
1680
1661
  case PrimitiveKind::Callback: {
1681
1662
  void *ptr;
1682
1663
 
1683
- if (!TryPointer(value, &ptr)) [[unlikely]] {
1684
- if (value.IsFunction()) {
1685
- ThrowError<Napi::Error>(env, "Cannot encode non-registered callback");
1686
- } else {
1687
- ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
1688
- }
1664
+ if (value.IsFunction()) {
1665
+ ThrowError<Napi::Error>(env, "Cannot encode non-registered callback");
1666
+ return false;
1667
+ } else if (CheckValueTag(value, type->ref.marker)) {
1668
+ ptr = value.As<Napi::External<void>>().Data();
1669
+ } else if (IsNullOrUndefined(value)) {
1670
+ ptr = nullptr;
1671
+ } else {
1672
+ ThrowError<Napi::TypeError>(env, "Unexpected %1 value, expected %2", GetValueType(instance, value), type->name);
1689
1673
  return false;
1690
1674
  }
1691
1675
 
@@ -1699,19 +1683,15 @@ bool Encode(Napi::Env env, uint8_t *origin, Napi::Value value, const TypeInfo *t
1699
1683
  #undef PUSH_INTEGER
1700
1684
 
1701
1685
  // Keep memory around if any was allocated
1702
- {
1703
- BlockAllocator *alloc = call.GetAllocator();
1704
-
1705
- if (alloc->IsUsed()) {
1706
- BlockAllocator *copy = instance->encode_map.FindValue(origin, nullptr);
1686
+ if (call.alloc.IsUsed()) {
1687
+ BlockAllocator *copy = instance->encode_map.FindValue(origin, nullptr);
1707
1688
 
1708
- if (!copy) {
1709
- copy = instance->encode_allocators.AppendDefault();
1710
- instance->encode_map.Set(origin, copy);
1711
- }
1712
-
1713
- std::swap(*alloc, *copy);
1689
+ if (!copy) {
1690
+ copy = instance->encode_allocators.AppendDefault();
1691
+ instance->encode_map.Set(origin, copy);
1714
1692
  }
1693
+
1694
+ std::swap(call.alloc, *copy);
1715
1695
  }
1716
1696
 
1717
1697
  return true;
@@ -1757,32 +1737,6 @@ Napi::Function WrapFunction(Napi::Env env, const FunctionInfo *func)
1757
1737
  return wrapper;
1758
1738
  }
1759
1739
 
1760
- Napi::Value WrapPointer(Napi::Env env, const TypeInfo *ref, void *ptr)
1761
- {
1762
- InstanceData *instance = env.GetInstanceData<InstanceData>();
1763
-
1764
- if (instance->config.fast_pointers) {
1765
- Napi::BigInt big = Napi::BigInt::New(env, (uint64_t)(uintptr_t)ptr);
1766
- return big;
1767
- } else {
1768
- Napi::External<void> external = Napi::External<void>::New(env, ptr);
1769
- return external;
1770
- }
1771
- }
1772
-
1773
- Napi::Value WrapCallback(Napi::Env env, const TypeInfo *ref, void *ptr)
1774
- {
1775
- InstanceData *instance = env.GetInstanceData<InstanceData>();
1776
-
1777
- if (instance->config.fast_callbacks) {
1778
- Napi::BigInt big = Napi::BigInt::New(env, (uint64_t)(uintptr_t)ptr);
1779
- return big;
1780
- } else {
1781
- Napi::External<void> external = Napi::External<void>::New(env, ptr);
1782
- return external;
1783
- }
1784
- }
1785
-
1786
1740
  bool DetectCallConvention(Span<const char> name, CallConvention *out_convention)
1787
1741
  {
1788
1742
  if (name == "__cdecl") {