koffi 1.0.4 → 1.1.0-beta.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 (268) hide show
  1. package/README.md +51 -22
  2. package/build/qemu/1.1.0-beta.1/koffi_darwin_x64.tar.gz +0 -0
  3. package/build/qemu/1.1.0-beta.1/koffi_freebsd_arm64.tar.gz +0 -0
  4. package/build/qemu/1.1.0-beta.1/koffi_freebsd_ia32.tar.gz +0 -0
  5. package/build/qemu/1.1.0-beta.1/koffi_freebsd_x64.tar.gz +0 -0
  6. package/build/qemu/1.1.0-beta.1/koffi_linux_arm.tar.gz +0 -0
  7. package/build/qemu/1.1.0-beta.1/koffi_linux_arm64.tar.gz +0 -0
  8. package/build/qemu/1.1.0-beta.1/koffi_linux_ia32.tar.gz +0 -0
  9. package/build/qemu/1.1.0-beta.1/koffi_linux_x64.tar.gz +0 -0
  10. package/build/qemu/1.1.0-beta.1/koffi_win32_ia32.tar.gz +0 -0
  11. package/build/qemu/1.1.0-beta.1/koffi_win32_x64.tar.gz +0 -0
  12. package/package.json +1 -1
  13. package/qemu/qemu.js +11 -5
  14. package/qemu/registry/machines.json +20 -10
  15. package/src/abi_arm32.cc +13 -6
  16. package/src/abi_arm64.cc +13 -6
  17. package/src/abi_x64_sysv.cc +13 -6
  18. package/src/abi_x64_win.cc +13 -6
  19. package/src/abi_x86.cc +13 -6
  20. package/src/call.cc +25 -26
  21. package/src/call.hh +27 -41
  22. package/src/ffi.cc +152 -17
  23. package/src/ffi.hh +24 -10
  24. package/test/misc.c +2 -2
  25. package/build/qemu/1.0.4/koffi_darwin_x64.tar.gz +0 -0
  26. package/build/qemu/1.0.4/koffi_freebsd_arm64.tar.gz +0 -0
  27. package/build/qemu/1.0.4/koffi_freebsd_ia32.tar.gz +0 -0
  28. package/build/qemu/1.0.4/koffi_freebsd_x64.tar.gz +0 -0
  29. package/build/qemu/1.0.4/koffi_linux_arm.tar.gz +0 -0
  30. package/build/qemu/1.0.4/koffi_linux_arm64.tar.gz +0 -0
  31. package/build/qemu/1.0.4/koffi_linux_ia32.tar.gz +0 -0
  32. package/build/qemu/1.0.4/koffi_linux_x64.tar.gz +0 -0
  33. package/build/qemu/1.0.4/koffi_win32_ia32.tar.gz +0 -0
  34. package/build/qemu/1.0.4/koffi_win32_x64.tar.gz +0 -0
  35. package/test/misc.js +0 -227
  36. package/vendor/node-addon-api/CODE_OF_CONDUCT.md +0 -4
  37. package/vendor/node-addon-api/CONTRIBUTING.md +0 -93
  38. package/vendor/node-addon-api/appveyor.yml +0 -37
  39. package/vendor/node-addon-api/benchmark/README.md +0 -47
  40. package/vendor/node-addon-api/benchmark/binding.gyp +0 -25
  41. package/vendor/node-addon-api/benchmark/function_args.cc +0 -217
  42. package/vendor/node-addon-api/benchmark/function_args.js +0 -60
  43. package/vendor/node-addon-api/benchmark/index.js +0 -34
  44. package/vendor/node-addon-api/benchmark/property_descriptor.cc +0 -91
  45. package/vendor/node-addon-api/benchmark/property_descriptor.js +0 -37
  46. package/vendor/node-addon-api/doc/addon.md +0 -163
  47. package/vendor/node-addon-api/doc/array.md +0 -81
  48. package/vendor/node-addon-api/doc/array_buffer.md +0 -155
  49. package/vendor/node-addon-api/doc/async_context.md +0 -86
  50. package/vendor/node-addon-api/doc/async_operations.md +0 -31
  51. package/vendor/node-addon-api/doc/async_worker.md +0 -427
  52. package/vendor/node-addon-api/doc/async_worker_variants.md +0 -557
  53. package/vendor/node-addon-api/doc/bigint.md +0 -97
  54. package/vendor/node-addon-api/doc/boolean.md +0 -68
  55. package/vendor/node-addon-api/doc/buffer.md +0 -150
  56. package/vendor/node-addon-api/doc/callback_scope.md +0 -54
  57. package/vendor/node-addon-api/doc/callbackinfo.md +0 -97
  58. package/vendor/node-addon-api/doc/checker-tool.md +0 -32
  59. package/vendor/node-addon-api/doc/class_property_descriptor.md +0 -123
  60. package/vendor/node-addon-api/doc/cmake-js.md +0 -68
  61. package/vendor/node-addon-api/doc/conversion-tool.md +0 -28
  62. package/vendor/node-addon-api/doc/creating_a_release.md +0 -62
  63. package/vendor/node-addon-api/doc/dataview.md +0 -248
  64. package/vendor/node-addon-api/doc/date.md +0 -68
  65. package/vendor/node-addon-api/doc/env.md +0 -196
  66. package/vendor/node-addon-api/doc/error.md +0 -120
  67. package/vendor/node-addon-api/doc/error_handling.md +0 -254
  68. package/vendor/node-addon-api/doc/escapable_handle_scope.md +0 -80
  69. package/vendor/node-addon-api/doc/external.md +0 -63
  70. package/vendor/node-addon-api/doc/function.md +0 -402
  71. package/vendor/node-addon-api/doc/function_reference.md +0 -238
  72. package/vendor/node-addon-api/doc/generator.md +0 -13
  73. package/vendor/node-addon-api/doc/handle_scope.md +0 -63
  74. package/vendor/node-addon-api/doc/hierarchy.md +0 -91
  75. package/vendor/node-addon-api/doc/instance_wrap.md +0 -408
  76. package/vendor/node-addon-api/doc/maybe.md +0 -76
  77. package/vendor/node-addon-api/doc/memory_management.md +0 -27
  78. package/vendor/node-addon-api/doc/name.md +0 -29
  79. package/vendor/node-addon-api/doc/node-gyp.md +0 -82
  80. package/vendor/node-addon-api/doc/number.md +0 -163
  81. package/vendor/node-addon-api/doc/object.md +0 -411
  82. package/vendor/node-addon-api/doc/object_lifetime_management.md +0 -83
  83. package/vendor/node-addon-api/doc/object_reference.md +0 -117
  84. package/vendor/node-addon-api/doc/object_wrap.md +0 -588
  85. package/vendor/node-addon-api/doc/prebuild_tools.md +0 -16
  86. package/vendor/node-addon-api/doc/promises.md +0 -79
  87. package/vendor/node-addon-api/doc/property_descriptor.md +0 -286
  88. package/vendor/node-addon-api/doc/propertylvalue.md +0 -50
  89. package/vendor/node-addon-api/doc/range_error.md +0 -59
  90. package/vendor/node-addon-api/doc/reference.md +0 -113
  91. package/vendor/node-addon-api/doc/setup.md +0 -110
  92. package/vendor/node-addon-api/doc/string.md +0 -93
  93. package/vendor/node-addon-api/doc/symbol.md +0 -61
  94. package/vendor/node-addon-api/doc/threadsafe.md +0 -121
  95. package/vendor/node-addon-api/doc/threadsafe_function.md +0 -290
  96. package/vendor/node-addon-api/doc/type_error.md +0 -59
  97. package/vendor/node-addon-api/doc/typed_array.md +0 -78
  98. package/vendor/node-addon-api/doc/typed_array_of.md +0 -137
  99. package/vendor/node-addon-api/doc/typed_threadsafe_function.md +0 -306
  100. package/vendor/node-addon-api/doc/value.md +0 -340
  101. package/vendor/node-addon-api/doc/version_management.md +0 -43
  102. package/vendor/node-addon-api/package.json +0 -415
  103. package/vendor/node-addon-api/test/README.md +0 -91
  104. package/vendor/node-addon-api/test/addon.cc +0 -36
  105. package/vendor/node-addon-api/test/addon.js +0 -11
  106. package/vendor/node-addon-api/test/addon_build/index.js +0 -49
  107. package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +0 -17
  108. package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +0 -62
  109. package/vendor/node-addon-api/test/addon_build/tpl/index.js +0 -9
  110. package/vendor/node-addon-api/test/addon_build/tpl/package.json +0 -11
  111. package/vendor/node-addon-api/test/addon_data.cc +0 -99
  112. package/vendor/node-addon-api/test/addon_data.js +0 -46
  113. package/vendor/node-addon-api/test/array_buffer.cc +0 -243
  114. package/vendor/node-addon-api/test/array_buffer.js +0 -69
  115. package/vendor/node-addon-api/test/async_context.cc +0 -36
  116. package/vendor/node-addon-api/test/async_context.js +0 -122
  117. package/vendor/node-addon-api/test/async_progress_queue_worker.cc +0 -83
  118. package/vendor/node-addon-api/test/async_progress_queue_worker.js +0 -46
  119. package/vendor/node-addon-api/test/async_progress_worker.cc +0 -134
  120. package/vendor/node-addon-api/test/async_progress_worker.js +0 -61
  121. package/vendor/node-addon-api/test/async_worker.cc +0 -106
  122. package/vendor/node-addon-api/test/async_worker.js +0 -179
  123. package/vendor/node-addon-api/test/async_worker_nocallback.js +0 -13
  124. package/vendor/node-addon-api/test/async_worker_persistent.cc +0 -63
  125. package/vendor/node-addon-api/test/async_worker_persistent.js +0 -24
  126. package/vendor/node-addon-api/test/basic_types/array.cc +0 -40
  127. package/vendor/node-addon-api/test/basic_types/array.js +0 -35
  128. package/vendor/node-addon-api/test/basic_types/boolean.cc +0 -38
  129. package/vendor/node-addon-api/test/basic_types/boolean.js +0 -35
  130. package/vendor/node-addon-api/test/basic_types/number.cc +0 -99
  131. package/vendor/node-addon-api/test/basic_types/number.js +0 -114
  132. package/vendor/node-addon-api/test/basic_types/value.cc +0 -120
  133. package/vendor/node-addon-api/test/basic_types/value.js +0 -133
  134. package/vendor/node-addon-api/test/bigint.cc +0 -91
  135. package/vendor/node-addon-api/test/bigint.js +0 -53
  136. package/vendor/node-addon-api/test/binding-swallowexcept.cc +0 -12
  137. package/vendor/node-addon-api/test/binding.cc +0 -173
  138. package/vendor/node-addon-api/test/binding.gyp +0 -124
  139. package/vendor/node-addon-api/test/buffer.cc +0 -183
  140. package/vendor/node-addon-api/test/buffer.js +0 -69
  141. package/vendor/node-addon-api/test/callbackscope.cc +0 -22
  142. package/vendor/node-addon-api/test/callbackscope.js +0 -49
  143. package/vendor/node-addon-api/test/common/index.js +0 -114
  144. package/vendor/node-addon-api/test/common/test_helper.h +0 -71
  145. package/vendor/node-addon-api/test/dataview/dataview.cc +0 -48
  146. package/vendor/node-addon-api/test/dataview/dataview.js +0 -35
  147. package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +0 -115
  148. package/vendor/node-addon-api/test/dataview/dataview_read_write.js +0 -90
  149. package/vendor/node-addon-api/test/date.cc +0 -44
  150. package/vendor/node-addon-api/test/date.js +0 -18
  151. package/vendor/node-addon-api/test/env_cleanup.cc +0 -88
  152. package/vendor/node-addon-api/test/env_cleanup.js +0 -56
  153. package/vendor/node-addon-api/test/error.cc +0 -287
  154. package/vendor/node-addon-api/test/error.js +0 -81
  155. package/vendor/node-addon-api/test/error_handling_for_primitives.cc +0 -13
  156. package/vendor/node-addon-api/test/error_handling_for_primitives.js +0 -29
  157. package/vendor/node-addon-api/test/error_terminating_environment.js +0 -95
  158. package/vendor/node-addon-api/test/external.cc +0 -81
  159. package/vendor/node-addon-api/test/external.js +0 -88
  160. package/vendor/node-addon-api/test/function.cc +0 -324
  161. package/vendor/node-addon-api/test/function.js +0 -133
  162. package/vendor/node-addon-api/test/function_reference.cc +0 -202
  163. package/vendor/node-addon-api/test/function_reference.js +0 -157
  164. package/vendor/node-addon-api/test/globalObject/global_object.cc +0 -61
  165. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +0 -31
  166. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +0 -61
  167. package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +0 -40
  168. package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +0 -57
  169. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +0 -28
  170. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +0 -48
  171. package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +0 -31
  172. package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +0 -58
  173. package/vendor/node-addon-api/test/handlescope.cc +0 -60
  174. package/vendor/node-addon-api/test/handlescope.js +0 -14
  175. package/vendor/node-addon-api/test/index.js +0 -159
  176. package/vendor/node-addon-api/test/maybe/check.cc +0 -23
  177. package/vendor/node-addon-api/test/maybe/index.js +0 -38
  178. package/vendor/node-addon-api/test/memory_management.cc +0 -17
  179. package/vendor/node-addon-api/test/memory_management.js +0 -9
  180. package/vendor/node-addon-api/test/movable_callbacks.cc +0 -23
  181. package/vendor/node-addon-api/test/movable_callbacks.js +0 -21
  182. package/vendor/node-addon-api/test/name.cc +0 -108
  183. package/vendor/node-addon-api/test/name.js +0 -59
  184. package/vendor/node-addon-api/test/napi_child.js +0 -14
  185. package/vendor/node-addon-api/test/object/delete_property.cc +0 -38
  186. package/vendor/node-addon-api/test/object/delete_property.js +0 -41
  187. package/vendor/node-addon-api/test/object/finalizer.cc +0 -29
  188. package/vendor/node-addon-api/test/object/finalizer.js +0 -28
  189. package/vendor/node-addon-api/test/object/get_property.cc +0 -34
  190. package/vendor/node-addon-api/test/object/get_property.js +0 -40
  191. package/vendor/node-addon-api/test/object/has_own_property.cc +0 -34
  192. package/vendor/node-addon-api/test/object/has_own_property.js +0 -34
  193. package/vendor/node-addon-api/test/object/has_property.cc +0 -38
  194. package/vendor/node-addon-api/test/object/has_property.js +0 -37
  195. package/vendor/node-addon-api/test/object/object.cc +0 -350
  196. package/vendor/node-addon-api/test/object/object.js +0 -217
  197. package/vendor/node-addon-api/test/object/object_deprecated.cc +0 -66
  198. package/vendor/node-addon-api/test/object/object_deprecated.js +0 -47
  199. package/vendor/node-addon-api/test/object/object_freeze_seal.cc +0 -25
  200. package/vendor/node-addon-api/test/object/object_freeze_seal.js +0 -61
  201. package/vendor/node-addon-api/test/object/set_property.cc +0 -45
  202. package/vendor/node-addon-api/test/object/set_property.js +0 -30
  203. package/vendor/node-addon-api/test/object/subscript_operator.cc +0 -58
  204. package/vendor/node-addon-api/test/object/subscript_operator.js +0 -17
  205. package/vendor/node-addon-api/test/object_reference.cc +0 -219
  206. package/vendor/node-addon-api/test/object_reference.js +0 -259
  207. package/vendor/node-addon-api/test/objectwrap.cc +0 -268
  208. package/vendor/node-addon-api/test/objectwrap.js +0 -284
  209. package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +0 -26
  210. package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +0 -18
  211. package/vendor/node-addon-api/test/objectwrap_function.cc +0 -45
  212. package/vendor/node-addon-api/test/objectwrap_function.js +0 -22
  213. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +0 -30
  214. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +0 -13
  215. package/vendor/node-addon-api/test/objectwrap_removewrap.cc +0 -45
  216. package/vendor/node-addon-api/test/objectwrap_removewrap.js +0 -40
  217. package/vendor/node-addon-api/test/objectwrap_worker_thread.js +0 -19
  218. package/vendor/node-addon-api/test/promise.cc +0 -29
  219. package/vendor/node-addon-api/test/promise.js +0 -18
  220. package/vendor/node-addon-api/test/reference.cc +0 -24
  221. package/vendor/node-addon-api/test/reference.js +0 -14
  222. package/vendor/node-addon-api/test/run_script.cc +0 -56
  223. package/vendor/node-addon-api/test/run_script.js +0 -45
  224. package/vendor/node-addon-api/test/symbol.cc +0 -79
  225. package/vendor/node-addon-api/test/symbol.js +0 -73
  226. package/vendor/node-addon-api/test/testUtil.js +0 -54
  227. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +0 -195
  228. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +0 -188
  229. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +0 -63
  230. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +0 -12
  231. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +0 -115
  232. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +0 -14
  233. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +0 -26
  234. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +0 -7
  235. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +0 -225
  236. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +0 -59
  237. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +0 -42
  238. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +0 -53
  239. package/vendor/node-addon-api/test/thunking_manual.cc +0 -140
  240. package/vendor/node-addon-api/test/thunking_manual.js +0 -17
  241. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +0 -215
  242. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +0 -188
  243. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +0 -68
  244. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +0 -12
  245. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +0 -127
  246. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +0 -14
  247. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +0 -28
  248. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +0 -7
  249. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +0 -237
  250. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +0 -59
  251. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +0 -53
  252. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +0 -53
  253. package/vendor/node-addon-api/test/typedarray-bigint.js +0 -58
  254. package/vendor/node-addon-api/test/typedarray.cc +0 -216
  255. package/vendor/node-addon-api/test/typedarray.js +0 -69
  256. package/vendor/node-addon-api/test/version_management.cc +0 -27
  257. package/vendor/node-addon-api/test/version_management.js +0 -31
  258. package/vendor/node-addon-api/unit-test/README.md +0 -28
  259. package/vendor/node-addon-api/unit-test/binding-file-template.js +0 -39
  260. package/vendor/node-addon-api/unit-test/binding.gyp +0 -72
  261. package/vendor/node-addon-api/unit-test/exceptions.js +0 -32
  262. package/vendor/node-addon-api/unit-test/generate-binding-cc.js +0 -61
  263. package/vendor/node-addon-api/unit-test/injectTestParams.js +0 -101
  264. package/vendor/node-addon-api/unit-test/listOfTestModules.js +0 -88
  265. package/vendor/node-addon-api/unit-test/matchModules.js +0 -65
  266. package/vendor/node-addon-api/unit-test/setup.js +0 -13
  267. package/vendor/node-addon-api/unit-test/spawnTask.js +0 -26
  268. package/vendor/node-addon-api/unit-test/test.js +0 -30
package/README.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  - [Introduction](#introduction)
4
4
  - [Get started](#get-started)
5
+ - [Extra features](#extra-features)
6
+ * [Variadic functions](#variadic-functions)
7
+ * [Asynchronous calls](#asynchronous-calls)
8
+ * [Callbacks](#callbacks)
5
9
  - [Benchmarks](#benchmarks)
6
10
  * [atoi results](#atoi-results)
7
11
  * [Raylib results](#raylib-results)
@@ -17,36 +21,36 @@ Koffi is a fast and easy-to-use FFI module for Node.js, with support for primiti
17
21
  After the release of version 1.0, the following features are planned:
18
22
 
19
23
  * 1.1: Asynchronous calls
20
- * 1.2: C to JS callbacks
21
- * 1.3: Unions and (fixed size) array types
24
+ * 1.2: Fixed-size array types
25
+ * 1.3: C to JS callbacks
22
26
 
23
27
  The following platforms __are officially supported and tested__ at the moment:
24
28
 
25
- Platoform | Architecture | JS to C | C to JS (callback) | Pre-built binary
26
- --------- | -------------------------------- | -------- | ------------------ | ----------------
27
- Windows | x86 (cdecl, stdcall, fastcall) | 🟩 Yes | 🟥 No | 🟩 Yes
28
- Windows | x86_64 | 🟩 Yes | 🟥 No | 🟩 Yes
29
- Linux | x86 | 🟩 Yes | 🟥 No | 🟩 Yes
30
- Linux | x86_64 | 🟩 Yes | 🟥 No | 🟩 Yes
31
- Linux | ARM32+VFP Little Endian | 🟩 Yes | 🟥 No | 🟩 Yes
32
- Linux | ARM64 Little Endian | 🟩 Yes | 🟥 No | 🟩 Yes
33
- FreeBSD | x86 | 🟩 Yes | 🟥 No | 🟩 Yes
34
- FreeBSD | x86_64 | 🟩 Yes | 🟥 No | 🟩 Yes
35
- FreeBSD | ARM64 Little Endian | 🟩 Yes | 🟥 No | 🟩 Yes
36
- macOS | x86_64 | 🟩 Yes | 🟥 No | 🟩 Yes
37
- macOS | ARM64 (M1) Little Endian | 🟩 Yes | 🟥 No | 🟥 No
38
- OpenBSD | x86_64 | 🟧 Maybe | 🟥 No | 🟥 No
39
- OpenBSD | x86 | 🟧 Maybe | 🟥 No | 🟥 No
40
- OpenBSD | ARM64 Little Endian | 🟧 Maybe | 🟥 No | 🟥 No
41
- NetBSD | x86_64 | 🟧 Maybe | 🟥 No | 🟥 No
42
- NetBSD | x86 | 🟧 Maybe | 🟥 No | 🟥 No
43
- NetBSD | ARM64 Little Endian | 🟧 Maybe | 🟥 No | 🟥 No
29
+ Platform | Architecture | Sync calls | Async calls | Callbacks | Pre-built binary
30
+ --------- | -------------------------------- | ---------- | ----------- | --------- | ----------------
31
+ Windows | x86 (cdecl, stdcall, fastcall) | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
32
+ Windows | x86_64 | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
33
+ Linux | x86 | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
34
+ Linux | x86_64 | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
35
+ Linux | ARM32+VFP Little Endian | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
36
+ Linux | ARM64 Little Endian | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
37
+ FreeBSD | x86 | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
38
+ FreeBSD | x86_64 | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
39
+ FreeBSD | ARM64 Little Endian | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
40
+ macOS | x86_64 | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
41
+ macOS | ARM64 (M1) Little Endian | 🟩 Yes | 🟩 Yes | 🟥 No | 🟥 No
42
+ OpenBSD | x86_64 | 🟧 Maybe | 🟧 Maybe | 🟥 No | 🟥 No
43
+ OpenBSD | x86 | 🟧 Maybe | 🟧 Maybe | 🟥 No | 🟥 No
44
+ OpenBSD | ARM64 Little Endian | 🟧 Maybe | 🟧 Maybe | 🟥 No | 🟥 No
45
+ NetBSD | x86_64 | 🟧 Maybe | 🟧 Maybe | 🟥 No | 🟥 No
46
+ NetBSD | x86 | 🟧 Maybe | 🟧 Maybe | 🟥 No | 🟥 No
47
+ NetBSD | ARM64 Little Endian | 🟧 Maybe | 🟧 Maybe | 🟥 No | 🟥 No
44
48
 
45
49
  🟩 Tested, fully operational
46
50
  🟧 May work, but not actively tested
47
51
  🟥 Does not work yet
48
52
 
49
- This is still in development, bugs are to expected. More tests will come in the near future.
53
+ This is still in development, bugs are to be expected. More tests will come in the near future.
50
54
 
51
55
  # Get started
52
56
 
@@ -227,6 +231,31 @@ const printf = lib.func('printf', 'int', ['string', '...']);
227
231
  printf('Integer %d, double %g, string %s', 'int', 6, 'double', 8.5, 'string', 'THE END');
228
232
  ```
229
233
 
234
+ ## Asynchronous calls
235
+
236
+ You can issue asynchronous calls by calling the function through its async member.
237
+ In this case, you need to provide a callback function as the last argument, with
238
+ `(err, res)` parameters.
239
+
240
+ ```js
241
+ const koffi = require('koffi');
242
+ const lib = koffi.load('libc.so.6');
243
+
244
+ const atoi = lib.func('int atoi(const char *str)');
245
+
246
+ atoi.async('1257', (err, res) => {
247
+ console.log('Result:', res);
248
+ })
249
+ console.log('Hello World!');
250
+
251
+ // This program will print "Hello World!", and then "Result: 1257"
252
+ ```
253
+
254
+ You can easily convert this callback-style async function with `util.promisify()` from the
255
+ Node.js standard library.
256
+
257
+ Variadic functions do not support async.
258
+
230
259
  ## Callbacks
231
260
 
232
261
  Koffi does not yet support passing JS functions as callbacks. This is planned for version 1.1.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "koffi",
3
- "version": "1.0.4",
3
+ "version": "1.1.0-beta.1",
4
4
  "description": "Fast and simple FFI (foreign function interface) for Node.js",
5
5
  "keywords": [
6
6
  "foreign",
package/qemu/qemu.js CHANGED
@@ -430,16 +430,22 @@ async function copy(func) {
430
430
  let copied = true;
431
431
 
432
432
  for (let directory of func(machine)) {
433
- try {
434
- await machine.ssh.exec('rm', ['-rf', directory]);
435
- } catch (err) {
436
- // Fails often on Windows (busy directory or whatever), but rarely a problem
433
+ for (let i = 0; i < 10; i++) {
434
+ try {
435
+ await machine.ssh.exec('rm', ['-rf', directory]);
436
+ break;
437
+ } catch (err) {
438
+ // Fails often on Windows (busy directory or whatever), but rarely a problem
439
+
440
+ await wait(1000);
441
+ continue;
442
+ }
437
443
  }
438
444
 
439
445
  try {
440
446
  await machine.ssh.putDirectory(snapshot_dir, directory, {
441
447
  recursive: true,
442
- concurrency: 4
448
+ concurrency: (process.platform != 'win32') ? 4 : 1
443
449
  });
444
450
  } catch (err) {
445
451
  ignore.add(machine);
@@ -35,8 +35,9 @@
35
35
  "Build": "node ../cnoke/cnoke.js -C test"
36
36
  },
37
37
  "commands": {
38
+ "Test Sync": "node test/sync.js",
39
+ "Test Async": "node test/async.js",
38
40
  "Test Raylib": "xvfb-run node test/raylib.js",
39
- "Test Misc": "node test/misc.js",
40
41
  "Test SQLite": "node test/sqlite.js"
41
42
  }
42
43
  }
@@ -79,8 +80,9 @@
79
80
  "Build": "node ../cnoke/cnoke.js -C test"
80
81
  },
81
82
  "commands": {
83
+ "Test Sync": "node test/sync.js",
84
+ "Test Async": "node test/async.js",
82
85
  "Test Raylib": "xvfb-run node test/raylib.js",
83
- "Test Misc": "node test/misc.js",
84
86
  "Test SQLite": "node test/sqlite.js"
85
87
  }
86
88
  }
@@ -123,8 +125,9 @@
123
125
  "Build": "node ../cnoke/cnoke.js -C test"
124
126
  },
125
127
  "commands": {
128
+ "Test Sync": "node test/sync.js",
129
+ "Test Async": "node test/async.js",
126
130
  "Test Raylib": "xvfb-run node test/raylib.js",
127
- "Test Misc": "node test/misc.js",
128
131
  "Test SQLite": "node test/sqlite.js"
129
132
  }
130
133
  }
@@ -167,8 +170,9 @@
167
170
  "Build": "node ../cnoke/cnoke.js -C test"
168
171
  },
169
172
  "commands": {
173
+ "Test Sync": "node test/sync.js",
174
+ "Test Async": "node test/async.js",
170
175
  "Test Raylib": "xvfb-run node test/raylib.js",
171
- "Test Misc": "node test/misc.js",
172
176
  "Test SQLite": "node test/sqlite.js"
173
177
  }
174
178
  }
@@ -218,8 +222,9 @@
218
222
  "Build": "C:\\Node32\\node32.cmd node ../cnoke/cnoke.js -C test"
219
223
  },
220
224
  "commands": {
225
+ "Test Sync": "C:\\Node32\\node32.cmd node test/sync.js",
226
+ "Test Async": "C:\\Node32\\node32.cmd node test/async.js",
221
227
  "Test Raylib": "seatsh C:\\Node32\\node32.cmd node test/raylib.js",
222
- "Test Misc": "C:\\Node32\\node32.cmd node test/misc.js",
223
228
  "Test SQLite": "C:\\Node32\\node32.cmd node test/sqlite.js"
224
229
  }
225
230
  },
@@ -230,8 +235,9 @@
230
235
  "Build": "C:\\Node64\\node64.cmd node ../cnoke/cnoke.js -C test"
231
236
  },
232
237
  "commands": {
238
+ "Test Sync": "C:\\Node64\\node64.cmd node test/sync.js",
239
+ "Test Async": "C:\\Node64\\node64.cmd node test/async.js",
233
240
  "Test Raylib": "seatsh C:\\Node64\\node64.cmd node test/raylib.js",
234
- "Test Misc": "C:\\Node64\\node64.cmd node test/misc.js",
235
241
  "Test SQLite": "C:\\Node64\\node64.cmd node test/sqlite.js"
236
242
  }
237
243
  }
@@ -274,8 +280,9 @@
274
280
  "Build": "node ../cnoke/cnoke.js -C test"
275
281
  },
276
282
  "commands": {
283
+ "Test Sync": "node test/sync.js",
284
+ "Test Async": "node test/async.js",
277
285
  "Test Raylib": "xvfb-run node test/raylib.js",
278
- "Test Misc": "node test/misc.js",
279
286
  "Test SQLite": "node test/sqlite.js"
280
287
  }
281
288
  }
@@ -318,8 +325,9 @@
318
325
  "Build": "node ../cnoke/cnoke.js -C test"
319
326
  },
320
327
  "commands": {
328
+ "Test Sync": "node test/sync.js",
329
+ "Test Async": "node test/async.js",
321
330
  "Test Raylib": "xvfb-run node test/raylib.js",
322
- "Test Misc": "node test/misc.js",
323
331
  "Test SQLite": "node test/sqlite.js"
324
332
  }
325
333
  }
@@ -362,8 +370,9 @@
362
370
  "Build": "node ../cnoke/cnoke.js -C test"
363
371
  },
364
372
  "commands": {
373
+ "Test Sync": "node test/sync.js",
374
+ "Test Async": "node test/async.js",
365
375
  "Test Raylib": "xvfb-run node test/raylib.js",
366
- "Test Misc": "node test/misc.js",
367
376
  "Test SQLite": "node test/sqlite.js"
368
377
  }
369
378
  }
@@ -406,7 +415,8 @@
406
415
  "Build": "PATH=/usr/local/bin:/usr/bin:/bin SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk node ../cnoke/cnoke.js -C test"
407
416
  },
408
417
  "commands": {
409
- "Test Misc": "PATH=/usr/local/bin:/usr/bin:/bin node test/misc.js",
418
+ "Test Sync": "PATH=/usr/local/bin:/usr/bin:/bin node test/sync.js",
419
+ "Test Async": "PATH=/usr/local/bin:/usr/bin:/bin node test/async.js",
410
420
  "Test SQLite": "PATH=/usr/local/bin:/usr/bin:/bin node test/sqlite.js"
411
421
  }
412
422
  }
package/src/abi_arm32.cc CHANGED
@@ -305,8 +305,11 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
305
305
  memset(ptr, 0, param.type->size);
306
306
  }
307
307
  if (param.directions & 2) {
308
- OutObject out = {obj, ptr, param.type->ref};
309
- out_objects.Append(out);
308
+ OutObject *out = out_objects.AppendDefault();
309
+
310
+ out->ref.Reset(obj, 1);
311
+ out->ptr = ptr;
312
+ out->type = param.type->ref;
310
313
  }
311
314
  } else if (IsNullOrUndefined(value)) {
312
315
  ptr = nullptr;
@@ -391,6 +394,9 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
391
394
  }
392
395
  }
393
396
 
397
+ stack = MakeSpan(mem->stack.end(), old_stack_mem.end() - mem->stack.end());
398
+ heap = MakeSpan(old_heap_mem.ptr, mem->heap.ptr - old_heap_mem.ptr);
399
+
394
400
  return true;
395
401
  }
396
402
 
@@ -398,8 +404,8 @@ void CallData::Execute()
398
404
  {
399
405
  #define PERFORM_CALL(Suffix) \
400
406
  ([&]() { \
401
- auto ret = (func->forward_fp ? ForwardCallX ## Suffix(func->func, GetSP()) \
402
- : ForwardCall ## Suffix(func->func, GetSP())); \
407
+ auto ret = (func->forward_fp ? ForwardCallX ## Suffix(func->func, stack.ptr) \
408
+ : ForwardCall ## Suffix(func->func, stack.ptr)); \
403
409
  return ret; \
404
410
  })()
405
411
 
@@ -435,8 +441,9 @@ void CallData::Execute()
435
441
 
436
442
  Napi::Value CallData::Complete()
437
443
  {
438
- for (const OutObject &obj: out_objects) {
439
- PopObject(obj.obj, obj.ptr, obj.type);
444
+ for (const OutObject &out: out_objects) {
445
+ Napi::Object obj = out.ref.Value().As<Napi::Object>();
446
+ PopObject(obj, out.ptr, out.type);
440
447
  }
441
448
 
442
449
  switch (func->ret.type->primitive) {
package/src/abi_arm64.cc CHANGED
@@ -384,8 +384,11 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
384
384
  memset(ptr, 0, param.type->size);
385
385
  }
386
386
  if (param.directions & 2) {
387
- OutObject out = {obj, ptr, param.type->ref};
388
- out_objects.Append(out);
387
+ OutObject *out = out_objects.AppendDefault();
388
+
389
+ out->ref.Reset(obj, 1);
390
+ out->ptr = ptr;
391
+ out->type = param.type->ref;
389
392
  }
390
393
  } else if (IsNullOrUndefined(value)) {
391
394
  ptr = nullptr;
@@ -451,6 +454,9 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
451
454
  }
452
455
  }
453
456
 
457
+ stack = MakeSpan(mem->stack.end(), old_stack_mem.end() - mem->stack.end());
458
+ heap = MakeSpan(old_heap_mem.ptr, mem->heap.ptr - old_heap_mem.ptr);
459
+
454
460
  return true;
455
461
  }
456
462
 
@@ -458,8 +464,8 @@ void CallData::Execute()
458
464
  {
459
465
  #define PERFORM_CALL(Suffix) \
460
466
  ([&]() { \
461
- auto ret = (func->forward_fp ? ForwardCallX ## Suffix(func->func, GetSP()) \
462
- : ForwardCall ## Suffix(func->func, GetSP())); \
467
+ auto ret = (func->forward_fp ? ForwardCallX ## Suffix(func->func, stack.ptr) \
468
+ : ForwardCall ## Suffix(func->func, stack.ptr)); \
463
469
  return ret; \
464
470
  })()
465
471
 
@@ -498,8 +504,9 @@ void CallData::Execute()
498
504
 
499
505
  Napi::Value CallData::Complete()
500
506
  {
501
- for (const OutObject &obj: out_objects) {
502
- PopObject(obj.obj, obj.ptr, obj.type);
507
+ for (const OutObject &out: out_objects) {
508
+ Napi::Object obj = out.ref.Value().As<Napi::Object>();
509
+ PopObject(obj, out.ptr, out.type);
503
510
  }
504
511
 
505
512
  switch (func->ret.type->primitive) {
@@ -308,8 +308,11 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
308
308
  memset(ptr, 0, param.type->size);
309
309
  }
310
310
  if (param.directions & 2) {
311
- OutObject out = {obj, ptr, param.type->ref};
312
- out_objects.Append(out);
311
+ OutObject *out = out_objects.AppendDefault();
312
+
313
+ out->ref.Reset(obj, 1);
314
+ out->ptr = ptr;
315
+ out->type = param.type->ref;
313
316
  }
314
317
  } else if (IsNullOrUndefined(value)) {
315
318
  ptr = nullptr;
@@ -402,6 +405,9 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
402
405
  }
403
406
  }
404
407
 
408
+ stack = MakeSpan(mem->stack.end(), old_stack_mem.end() - mem->stack.end());
409
+ heap = MakeSpan(old_heap_mem.ptr, mem->heap.ptr - old_heap_mem.ptr);
410
+
405
411
  return true;
406
412
  }
407
413
 
@@ -409,8 +415,8 @@ void CallData::Execute()
409
415
  {
410
416
  #define PERFORM_CALL(Suffix) \
411
417
  ([&]() { \
412
- auto ret = (func->forward_fp ? ForwardCallX ## Suffix(func->func, GetSP()) \
413
- : ForwardCall ## Suffix(func->func, GetSP())); \
418
+ auto ret = (func->forward_fp ? ForwardCallX ## Suffix(func->func, stack.ptr) \
419
+ : ForwardCall ## Suffix(func->func, stack.ptr)); \
414
420
  return ret; \
415
421
  })()
416
422
 
@@ -453,8 +459,9 @@ void CallData::Execute()
453
459
 
454
460
  Napi::Value CallData::Complete()
455
461
  {
456
- for (const OutObject &obj: out_objects) {
457
- PopObject(obj.obj, obj.ptr, obj.type);
462
+ for (const OutObject &out: out_objects) {
463
+ Napi::Object obj = out.ref.Value().As<Napi::Object>();
464
+ PopObject(obj, out.ptr, out.type);
458
465
  }
459
466
 
460
467
  switch (func->ret.type->primitive) {
@@ -148,8 +148,11 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
148
148
  memset(ptr, 0, param.type->size);
149
149
  }
150
150
  if (param.directions & 2) {
151
- OutObject out = {obj, ptr, param.type->ref};
152
- out_objects.Append(out);
151
+ OutObject *out = out_objects.AppendDefault();
152
+
153
+ out->ref.Reset(obj, 1);
154
+ out->ptr = ptr;
155
+ out->type = param.type->ref;
153
156
  }
154
157
  } else if (IsNullOrUndefined(value)) {
155
158
  ptr = nullptr;
@@ -200,6 +203,9 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
200
203
  }
201
204
  }
202
205
 
206
+ stack = MakeSpan(mem->stack.end(), old_stack_mem.end() - mem->stack.end());
207
+ heap = MakeSpan(old_heap_mem.ptr, mem->heap.ptr - old_heap_mem.ptr);
208
+
203
209
  return true;
204
210
  }
205
211
 
@@ -207,8 +213,8 @@ void CallData::Execute()
207
213
  {
208
214
  #define PERFORM_CALL(Suffix) \
209
215
  ([&]() { \
210
- auto ret = (func->forward_fp ? ForwardCallX ## Suffix(func->func, GetSP()) \
211
- : ForwardCall ## Suffix(func->func, GetSP())); \
216
+ auto ret = (func->forward_fp ? ForwardCallX ## Suffix(func->func, stack.ptr) \
217
+ : ForwardCall ## Suffix(func->func, stack.ptr)); \
212
218
  return ret; \
213
219
  })()
214
220
 
@@ -236,8 +242,9 @@ void CallData::Execute()
236
242
 
237
243
  Napi::Value CallData::Complete()
238
244
  {
239
- for (const OutObject &obj: out_objects) {
240
- PopObject(obj.obj, obj.ptr, obj.type);
245
+ for (const OutObject &out: out_objects) {
246
+ Napi::Object obj = out.ref.Value().As<Napi::Object>();
247
+ PopObject(obj, out.ptr, out.type);
241
248
  }
242
249
 
243
250
  switch (func->ret.type->primitive) {
package/src/abi_x86.cc CHANGED
@@ -192,8 +192,11 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
192
192
  memset(ptr, 0, param.type->size);
193
193
  }
194
194
  if (param.directions & 2) {
195
- OutObject out = {obj, ptr, param.type->ref};
196
- out_objects.Append(out);
195
+ OutObject *out = out_objects.AppendDefault();
196
+
197
+ out->ref.Reset(obj, 1);
198
+ out->ptr = ptr;
199
+ out->type = param.type->ref;
197
200
  }
198
201
  } else if (IsNullOrUndefined(value)) {
199
202
  ptr = nullptr;
@@ -245,6 +248,9 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
245
248
  }
246
249
  }
247
250
 
251
+ stack = MakeSpan(mem->stack.end(), old_stack_mem.end() - mem->stack.end());
252
+ heap = MakeSpan(old_heap_mem.ptr, mem->heap.ptr - old_heap_mem.ptr);
253
+
248
254
  return true;
249
255
  }
250
256
 
@@ -252,8 +258,8 @@ void CallData::Execute()
252
258
  {
253
259
  #define PERFORM_CALL(Suffix) \
254
260
  ([&]() { \
255
- auto ret = (func->convention == CallConvention::Fastcall ? ForwardCallR ## Suffix(func->func, GetSP()) \
256
- : ForwardCall ## Suffix(func->func, GetSP())); \
261
+ auto ret = (func->convention == CallConvention::Fastcall ? ForwardCallR ## Suffix(func->func, stack.ptr) \
262
+ : ForwardCall ## Suffix(func->func, stack.ptr)); \
257
263
  return ret; \
258
264
  })()
259
265
 
@@ -282,8 +288,9 @@ void CallData::Execute()
282
288
 
283
289
  Napi::Value CallData::Complete()
284
290
  {
285
- for (const OutObject &obj: out_objects) {
286
- PopObject(obj.obj, obj.ptr, obj.type);
291
+ for (const OutObject &out: out_objects) {
292
+ Napi::Object obj = out.ref.Value().As<Napi::Object>();
293
+ PopObject(obj, out.ptr, out.type);
287
294
  }
288
295
 
289
296
  switch (func->ret.type->primitive) {
package/src/call.cc CHANGED
@@ -20,19 +20,24 @@
20
20
 
21
21
  namespace RG {
22
22
 
23
- CallData::CallData(Napi::Env env, InstanceData *instance, const FunctionInfo *func)
24
- : env(env), instance(instance), func(func),
25
- stack_mem(&instance->stack_mem), heap_mem(&instance->heap_mem),
26
- old_stack_mem(instance->stack_mem), old_heap_mem(instance->heap_mem)
23
+ CallData::CallData(Napi::Env env, const FunctionInfo *func, InstanceMemory *mem, bool debug)
24
+ : env(env), instance(env.GetInstanceData<InstanceData>()), func(func), debug(debug),
25
+ mem(mem), old_stack_mem(mem->stack), old_heap_mem(mem->heap)
27
26
  {
28
- RG_ASSERT(AlignUp(stack_mem->ptr, 16) == stack_mem->ptr);
29
- RG_ASSERT(AlignUp(stack_mem->end(), 16) == stack_mem->end());
27
+ mem->depth++;
28
+
29
+ RG_ASSERT(AlignUp(mem->stack.ptr, 16) == mem->stack.ptr);
30
+ RG_ASSERT(AlignUp(mem->stack.end(), 16) == mem->stack.end());
30
31
  }
31
32
 
32
33
  CallData::~CallData()
33
34
  {
34
- instance->stack_mem = old_stack_mem;
35
- instance->heap_mem = old_heap_mem;
35
+ mem->stack = old_stack_mem;
36
+ mem->heap = old_heap_mem;
37
+
38
+ if (!--mem->depth && mem->temporary) {
39
+ delete mem;
40
+ }
36
41
  }
37
42
 
38
43
  const char *CallData::PushString(const Napi::Value &value)
@@ -45,8 +50,8 @@ const char *CallData::PushString(const Napi::Value &value)
45
50
  size_t len = 0;
46
51
  napi_status status;
47
52
 
48
- buf.ptr = (char *)heap_mem->ptr;
49
- buf.len = std::max((Size)0, heap_mem->len - Kibibytes(32));
53
+ buf.ptr = (char *)mem->heap.ptr;
54
+ buf.len = std::max((Size)0, mem->heap.len - Kibibytes(32));
50
55
 
51
56
  status = napi_get_value_string_utf8(env, value, buf.ptr, (size_t)buf.len, &len);
52
57
  RG_ASSERT(status == napi_ok);
@@ -54,15 +59,15 @@ const char *CallData::PushString(const Napi::Value &value)
54
59
  len++;
55
60
 
56
61
  if (RG_LIKELY(len < (size_t)buf.len)) {
57
- heap_mem->ptr += (Size)len;
58
- heap_mem->len -= (Size)len;
62
+ mem->heap.ptr += (Size)len;
63
+ mem->heap.len -= (Size)len;
59
64
  } else {
60
65
  status = napi_get_value_string_utf8(env, value, nullptr, 0, &len);
61
66
  RG_ASSERT(status == napi_ok);
62
67
 
63
68
  len++;
64
69
 
65
- buf.ptr = (char *)Allocator::Allocate(&big_alloc, (Size)len);
70
+ buf.ptr = (char *)Allocator::Allocate(&mem->big_alloc, (Size)len);
66
71
  buf.len = (Size)len;
67
72
 
68
73
  status = napi_get_value_string_utf8(env, value, buf.ptr, (size_t)buf.len, &len);
@@ -82,8 +87,8 @@ const char16_t *CallData::PushString16(const Napi::Value &value)
82
87
  size_t len = 0;
83
88
  napi_status status;
84
89
 
85
- buf.ptr = (char16_t *)heap_mem->ptr;
86
- buf.len = std::max((Size)0, heap_mem->len - Kibibytes(32)) / 2;
90
+ buf.ptr = (char16_t *)mem->heap.ptr;
91
+ buf.len = std::max((Size)0, mem->heap.len - Kibibytes(32)) / 2;
87
92
 
88
93
  status = napi_get_value_string_utf16(env, value, buf.ptr, (size_t)buf.len, &len);
89
94
  RG_ASSERT(status == napi_ok);
@@ -91,15 +96,15 @@ const char16_t *CallData::PushString16(const Napi::Value &value)
91
96
  len++;
92
97
 
93
98
  if (RG_LIKELY(len < (size_t)buf.len)) {
94
- heap_mem->ptr += (Size)len * 2;
95
- heap_mem->len -= (Size)len * 2;
99
+ mem->heap.ptr += (Size)len * 2;
100
+ mem->heap.len -= (Size)len * 2;
96
101
  } else {
97
102
  status = napi_get_value_string_utf16(env, value, nullptr, 0, &len);
98
103
  RG_ASSERT(status == napi_ok);
99
104
 
100
105
  len++;
101
106
 
102
- buf.ptr = (char16_t *)Allocator::Allocate(&big_alloc, (Size)len * 2);
107
+ buf.ptr = (char16_t *)Allocator::Allocate(&mem->big_alloc, (Size)len * 2);
103
108
  buf.len = (Size)len;
104
109
 
105
110
  status = napi_get_value_string_utf16(env, value, buf.ptr, (size_t)buf.len, &len);
@@ -111,9 +116,6 @@ const char16_t *CallData::PushString16(const Napi::Value &value)
111
116
 
112
117
  bool CallData::PushObject(const Napi::Object &obj, const TypeInfo *type, uint8_t *dest)
113
118
  {
114
- Napi::Env env = obj.Env();
115
- InstanceData *instance = env.GetInstanceData<InstanceData>();
116
-
117
119
  RG_ASSERT(IsObject(obj));
118
120
  RG_ASSERT(type->primitive == PrimitiveKind::Record);
119
121
 
@@ -226,9 +228,6 @@ bool CallData::PushObject(const Napi::Object &obj, const TypeInfo *type, uint8_t
226
228
 
227
229
  void CallData::PopObject(Napi::Object obj, const uint8_t *ptr, const TypeInfo *type)
228
230
  {
229
- Napi::Env env = obj.Env();
230
- InstanceData *instance = env.GetInstanceData<InstanceData>();
231
-
232
231
  RG_ASSERT(type->primitive == PrimitiveKind::Record);
233
232
 
234
233
  for (const RecordMember &member: type->members) {
@@ -346,8 +345,8 @@ void CallData::DumpDebug() const
346
345
  }
347
346
  PrintLn(stderr, "Return: %1 (%2)", func->ret.type->name, FmtMemSize(func->ret.type->size));
348
347
 
349
- DumpMemory("Stack", GetStack());
350
- DumpMemory("Heap", GetHeap());
348
+ DumpMemory("Stack", stack);
349
+ DumpMemory("Heap", heap);
351
350
  }
352
351
 
353
352
  }