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
@@ -1,11 +0,0 @@
1
- {
2
- "name": "addon",
3
- "version": "0.0.0",
4
- "description": "Node.js addon",
5
- "private": true,
6
- "scripts": {},
7
- "dependencies": {
8
- "node-addon-api": "file:../../../../"
9
- },
10
- "gypfile": true
11
- }
@@ -1,99 +0,0 @@
1
- #if (NAPI_VERSION > 5)
2
- #include <stdio.h>
3
- #include "napi.h"
4
- #include "test_helper.h"
5
-
6
- // An overly elaborate way to get/set a boolean stored in the instance data:
7
- // 0. A boolean named "verbose" is stored in the instance data. The constructor
8
- // for JS `VerboseIndicator` instances is also stored in the instance data.
9
- // 1. Add a property named "verbose" onto exports served by a getter/setter.
10
- // 2. The getter returns a object of type VerboseIndicator, which itself has a
11
- // property named "verbose", also served by a getter/setter:
12
- // * The getter returns a boolean, indicating whether "verbose" is set.
13
- // * The setter sets "verbose" on the instance data.
14
- // 3. The setter sets "verbose" on the instance data.
15
-
16
- class Addon {
17
- public:
18
- class VerboseIndicator : public Napi::ObjectWrap<VerboseIndicator> {
19
- public:
20
- VerboseIndicator(const Napi::CallbackInfo& info):
21
- Napi::ObjectWrap<VerboseIndicator>(info) {
22
- info.This().As<Napi::Object>()["verbose"] =
23
- Napi::Boolean::New(info.Env(),
24
- info.Env().GetInstanceData<Addon>()->verbose);
25
- }
26
-
27
- Napi::Value Getter(const Napi::CallbackInfo& info) {
28
- return Napi::Boolean::New(info.Env(),
29
- info.Env().GetInstanceData<Addon>()->verbose);
30
- }
31
-
32
- void Setter(const Napi::CallbackInfo& info, const Napi::Value& val) {
33
- info.Env().GetInstanceData<Addon>()->verbose = val.As<Napi::Boolean>();
34
- }
35
-
36
- static Napi::FunctionReference Init(Napi::Env env) {
37
- return Napi::Persistent(DefineClass(env, "VerboseIndicator", {
38
- InstanceAccessor<
39
- &VerboseIndicator::Getter,
40
- &VerboseIndicator::Setter>("verbose")
41
- }));
42
- }
43
- };
44
-
45
- static Napi::Value Getter(const Napi::CallbackInfo& info) {
46
- return MaybeUnwrap(
47
- info.Env().GetInstanceData<Addon>()->VerboseIndicator.New({}));
48
- }
49
-
50
- static void Setter(const Napi::CallbackInfo& info) {
51
- info.Env().GetInstanceData<Addon>()->verbose = info[0].As<Napi::Boolean>();
52
- }
53
-
54
- Addon(Napi::Env env): VerboseIndicator(VerboseIndicator::Init(env)) {}
55
- ~Addon() {
56
- if (verbose) {
57
- fprintf(stderr, "addon_data: Addon::~Addon\n");
58
- }
59
- }
60
-
61
- static void DeleteAddon(Napi::Env, Addon* addon, uint32_t* hint) {
62
- delete addon;
63
- fprintf(stderr, "hint: %d\n", *hint);
64
- delete hint;
65
- }
66
-
67
- static Napi::Object Init(Napi::Env env, Napi::Value jshint) {
68
- if (!jshint.IsNumber()) {
69
- NAPI_THROW(Napi::Error::New(env, "Expected number"), Napi::Object());
70
- }
71
- uint32_t hint = jshint.As<Napi::Number>();
72
- if (hint == 0)
73
- env.SetInstanceData(new Addon(env));
74
- else
75
- env.SetInstanceData<Addon, uint32_t, DeleteAddon>(new Addon(env),
76
- new uint32_t(hint));
77
- Napi::Object result = Napi::Object::New(env);
78
- result.DefineProperties({
79
- Napi::PropertyDescriptor::Accessor<Getter, Setter>("verbose"),
80
- });
81
-
82
- return result;
83
- }
84
-
85
- private:
86
- bool verbose = false;
87
- Napi::FunctionReference VerboseIndicator;
88
- };
89
-
90
- // We use an addon factory so we can cover both the case where there is an
91
- // instance data hint and the case where there isn't.
92
- static Napi::Value AddonFactory(const Napi::CallbackInfo& info) {
93
- return Addon::Init(info.Env(), info[0]);
94
- }
95
-
96
- Napi::Object InitAddonData(Napi::Env env) {
97
- return Napi::Function::New(env, AddonFactory);
98
- }
99
- #endif // (NAPI_VERSION > 5)
@@ -1,46 +0,0 @@
1
- 'use strict';
2
-
3
- const assert = require('assert');
4
- const { spawn } = require('child_process');
5
- const readline = require('readline');
6
-
7
- module.exports = require('./common').runTestWithBindingPath(test);
8
-
9
- // Make sure the instance data finalizer is called at process exit. If the hint
10
- // is non-zero, it will be printed out by the child process.
11
- function testFinalizer (bindingName, hint, expected) {
12
- return new Promise((resolve) => {
13
- bindingName = bindingName.split('\\').join('\\\\');
14
- const child = spawn(process.execPath, [
15
- '-e',
16
- `require('${bindingName}').addon_data(${hint}).verbose = true;`
17
- ]);
18
- const actual = [];
19
- readline
20
- .createInterface({ input: child.stderr })
21
- .on('line', (line) => {
22
- if (expected.indexOf(line) >= 0) {
23
- actual.push(line);
24
- }
25
- })
26
- .on('close', () => {
27
- assert.deepStrictEqual(expected, actual);
28
- resolve();
29
- });
30
- });
31
- }
32
-
33
- async function test (bindingName) {
34
- const binding = require(bindingName).addon_data(0);
35
-
36
- // Make sure it is possible to get/set instance data.
37
- assert.strictEqual(binding.verbose.verbose, false);
38
- binding.verbose = true;
39
- assert.strictEqual(binding.verbose.verbose, true);
40
- binding.verbose = false;
41
- assert.strictEqual(binding.verbose.verbose, false);
42
-
43
- await testFinalizer(bindingName, 0, ['addon_data: Addon::~Addon']);
44
- await testFinalizer(bindingName, 42,
45
- ['addon_data: Addon::~Addon', 'hint: 42']);
46
- }
@@ -1,243 +0,0 @@
1
- #include "napi.h"
2
-
3
- using namespace Napi;
4
-
5
- namespace {
6
-
7
- const size_t testLength = 4;
8
- uint8_t testData[testLength];
9
- int finalizeCount = 0;
10
-
11
- void InitData(uint8_t* data, size_t length) {
12
- for (size_t i = 0; i < length; i++) {
13
- data[i] = static_cast<uint8_t>(i);
14
- }
15
- }
16
-
17
- bool VerifyData(uint8_t* data, size_t length) {
18
- for (size_t i = 0; i < length; i++) {
19
- if (data[i] != static_cast<uint8_t>(i)) {
20
- return false;
21
- }
22
- }
23
- return true;
24
- }
25
-
26
- Value CreateBuffer(const CallbackInfo& info) {
27
- ArrayBuffer buffer = ArrayBuffer::New(info.Env(), testLength);
28
-
29
- if (buffer.ByteLength() != testLength) {
30
- Error::New(info.Env(), "Incorrect buffer length.")
31
- .ThrowAsJavaScriptException();
32
- return Value();
33
- }
34
-
35
- InitData(static_cast<uint8_t*>(buffer.Data()), testLength);
36
- return buffer;
37
- }
38
-
39
- Value CreateExternalBuffer(const CallbackInfo& info) {
40
- finalizeCount = 0;
41
-
42
- ArrayBuffer buffer = ArrayBuffer::New(info.Env(), testData, testLength);
43
-
44
- if (buffer.ByteLength() != testLength) {
45
- Error::New(info.Env(), "Incorrect buffer length.")
46
- .ThrowAsJavaScriptException();
47
- return Value();
48
- }
49
-
50
- if (buffer.Data() != testData) {
51
- Error::New(info.Env(), "Incorrect buffer data.")
52
- .ThrowAsJavaScriptException();
53
- return Value();
54
- }
55
-
56
- InitData(testData, testLength);
57
- return buffer;
58
- }
59
-
60
- Value CreateExternalBufferWithFinalize(const CallbackInfo& info) {
61
- finalizeCount = 0;
62
-
63
- uint8_t* data = new uint8_t[testLength];
64
-
65
- ArrayBuffer buffer = ArrayBuffer::New(
66
- info.Env(), data, testLength, [](Env /*env*/, void* finalizeData) {
67
- delete[] static_cast<uint8_t*>(finalizeData);
68
- finalizeCount++;
69
- });
70
-
71
- if (buffer.ByteLength() != testLength) {
72
- Error::New(info.Env(), "Incorrect buffer length.")
73
- .ThrowAsJavaScriptException();
74
- return Value();
75
- }
76
-
77
- if (buffer.Data() != data) {
78
- Error::New(info.Env(), "Incorrect buffer data.")
79
- .ThrowAsJavaScriptException();
80
- return Value();
81
- }
82
-
83
- InitData(data, testLength);
84
- return buffer;
85
- }
86
-
87
- Value CreateExternalBufferWithFinalizeHint(const CallbackInfo& info) {
88
- finalizeCount = 0;
89
-
90
- uint8_t* data = new uint8_t[testLength];
91
-
92
- char* hint = nullptr;
93
- ArrayBuffer buffer = ArrayBuffer::New(
94
- info.Env(),
95
- data,
96
- testLength,
97
- [](Env /*env*/, void* finalizeData, char* /*finalizeHint*/) {
98
- delete[] static_cast<uint8_t*>(finalizeData);
99
- finalizeCount++;
100
- },
101
- hint);
102
-
103
- if (buffer.ByteLength() != testLength) {
104
- Error::New(info.Env(), "Incorrect buffer length.")
105
- .ThrowAsJavaScriptException();
106
- return Value();
107
- }
108
-
109
- if (buffer.Data() != data) {
110
- Error::New(info.Env(), "Incorrect buffer data.")
111
- .ThrowAsJavaScriptException();
112
- return Value();
113
- }
114
-
115
- InitData(data, testLength);
116
- return buffer;
117
- }
118
-
119
- void CheckBuffer(const CallbackInfo& info) {
120
- if (!info[0].IsArrayBuffer()) {
121
- Error::New(info.Env(), "A buffer was expected.")
122
- .ThrowAsJavaScriptException();
123
- return;
124
- }
125
-
126
- ArrayBuffer buffer = info[0].As<ArrayBuffer>();
127
-
128
- if (buffer.ByteLength() != testLength) {
129
- Error::New(info.Env(), "Incorrect buffer length.")
130
- .ThrowAsJavaScriptException();
131
- return;
132
- }
133
-
134
- if (!VerifyData(static_cast<uint8_t*>(buffer.Data()), testLength)) {
135
- Error::New(info.Env(), "Incorrect buffer data.")
136
- .ThrowAsJavaScriptException();
137
- return;
138
- }
139
- }
140
-
141
- Value GetFinalizeCount(const CallbackInfo& info) {
142
- return Number::New(info.Env(), finalizeCount);
143
- }
144
-
145
- Value CreateBufferWithConstructor(const CallbackInfo& info) {
146
- ArrayBuffer buffer = ArrayBuffer::New(info.Env(), testLength);
147
- if (buffer.ByteLength() != testLength) {
148
- Error::New(info.Env(), "Incorrect buffer length.")
149
- .ThrowAsJavaScriptException();
150
- return Value();
151
- }
152
- InitData(static_cast<uint8_t*>(buffer.Data()), testLength);
153
- ArrayBuffer buffer2(info.Env(), buffer);
154
- return buffer2;
155
- }
156
-
157
- Value CheckEmptyBuffer(const CallbackInfo& info) {
158
- ArrayBuffer buffer;
159
- return Boolean::New(info.Env(), buffer.IsEmpty());
160
- }
161
-
162
- void CheckDetachUpdatesData(const CallbackInfo& info) {
163
- if (!info[0].IsArrayBuffer()) {
164
- Error::New(info.Env(), "A buffer was expected.")
165
- .ThrowAsJavaScriptException();
166
- return;
167
- }
168
-
169
- ArrayBuffer buffer = info[0].As<ArrayBuffer>();
170
-
171
- // This potentially causes the buffer to cache its data pointer and length.
172
- buffer.Data();
173
- buffer.ByteLength();
174
-
175
- #if NAPI_VERSION >= 7
176
- if (buffer.IsDetached()) {
177
- Error::New(info.Env(), "Buffer should not be detached.")
178
- .ThrowAsJavaScriptException();
179
- return;
180
- }
181
- #endif
182
-
183
- if (info.Length() == 2) {
184
- // Detach externally (in JavaScript).
185
- if (!info[1].IsFunction()) {
186
- Error::New(info.Env(), "A function was expected.")
187
- .ThrowAsJavaScriptException();
188
- return;
189
- }
190
-
191
- Function detach = info[1].As<Function>();
192
- detach.Call({});
193
- } else {
194
- #if NAPI_VERSION >= 7
195
- // Detach directly.
196
- buffer.Detach();
197
- #else
198
- return;
199
- #endif
200
- }
201
-
202
- #if NAPI_VERSION >= 7
203
- if (!buffer.IsDetached()) {
204
- Error::New(info.Env(), "Buffer should be detached.")
205
- .ThrowAsJavaScriptException();
206
- return;
207
- }
208
- #endif
209
-
210
- if (buffer.Data() != nullptr) {
211
- Error::New(info.Env(), "Incorrect data pointer.")
212
- .ThrowAsJavaScriptException();
213
- return;
214
- }
215
-
216
- if (buffer.ByteLength() != 0) {
217
- Error::New(info.Env(), "Incorrect buffer length.")
218
- .ThrowAsJavaScriptException();
219
- return;
220
- }
221
- }
222
-
223
- } // end anonymous namespace
224
-
225
- Object InitArrayBuffer(Env env) {
226
- Object exports = Object::New(env);
227
-
228
- exports["createBuffer"] = Function::New(env, CreateBuffer);
229
- exports["createExternalBuffer"] = Function::New(env, CreateExternalBuffer);
230
- exports["createExternalBufferWithFinalize"] =
231
- Function::New(env, CreateExternalBufferWithFinalize);
232
- exports["createExternalBufferWithFinalizeHint"] =
233
- Function::New(env, CreateExternalBufferWithFinalizeHint);
234
- exports["checkBuffer"] = Function::New(env, CheckBuffer);
235
- exports["getFinalizeCount"] = Function::New(env, GetFinalizeCount);
236
- exports["createBufferWithConstructor"] =
237
- Function::New(env, CreateBufferWithConstructor);
238
- exports["checkEmptyBuffer"] = Function::New(env, CheckEmptyBuffer);
239
- exports["checkDetachUpdatesData"] =
240
- Function::New(env, CheckDetachUpdatesData);
241
-
242
- return exports;
243
- }
@@ -1,69 +0,0 @@
1
- 'use strict';
2
-
3
- const assert = require('assert');
4
- const testUtil = require('./testUtil');
5
-
6
- module.exports = require('./common').runTest(test);
7
-
8
- function test(binding) {
9
- return testUtil.runGCTests([
10
- 'Internal ArrayBuffer',
11
- () => {
12
- const test = binding.arraybuffer.createBuffer();
13
- binding.arraybuffer.checkBuffer(test);
14
- assert.ok(test instanceof ArrayBuffer);
15
-
16
- const test2 = test.slice(0);
17
- binding.arraybuffer.checkBuffer(test2);
18
- },
19
-
20
- 'External ArrayBuffer',
21
- () => {
22
- const test = binding.arraybuffer.createExternalBuffer();
23
- binding.arraybuffer.checkBuffer(test);
24
- assert.ok(test instanceof ArrayBuffer);
25
- assert.strictEqual(0, binding.arraybuffer.getFinalizeCount());
26
- },
27
-
28
- () => assert.strictEqual(0, binding.arraybuffer.getFinalizeCount()),
29
-
30
- 'External ArrayBuffer with finalizer',
31
- () => {
32
- const test = binding.arraybuffer.createExternalBufferWithFinalize();
33
- binding.arraybuffer.checkBuffer(test);
34
- assert.ok(test instanceof ArrayBuffer);
35
- assert.strictEqual(0, binding.arraybuffer.getFinalizeCount());
36
- },
37
-
38
- () => assert.strictEqual(1, binding.arraybuffer.getFinalizeCount()),
39
-
40
- 'External ArrayBuffer with finalizer hint',
41
- () => {
42
- const test = binding.arraybuffer.createExternalBufferWithFinalizeHint();
43
- binding.arraybuffer.checkBuffer(test);
44
- assert.ok(test instanceof ArrayBuffer);
45
- assert.strictEqual(0, binding.arraybuffer.getFinalizeCount());
46
- },
47
-
48
- () => assert.strictEqual(1, binding.arraybuffer.getFinalizeCount()),
49
-
50
- 'ArrayBuffer with constructor',
51
- () => {
52
- assert.strictEqual(true, binding.arraybuffer.checkEmptyBuffer());
53
- const test = binding.arraybuffer.createBufferWithConstructor();
54
- binding.arraybuffer.checkBuffer(test);
55
- assert.ok(test instanceof ArrayBuffer);
56
- },
57
-
58
- 'ArrayBuffer updates data pointer and length when detached',
59
- () => {
60
- // Detach the ArrayBuffer in JavaScript.
61
- const mem = new WebAssembly.Memory({ initial: 1 });
62
- binding.arraybuffer.checkDetachUpdatesData(mem.buffer, () => mem.grow(1));
63
-
64
- // Let C++ detach the ArrayBuffer.
65
- const extBuffer = binding.arraybuffer.createExternalBuffer();
66
- binding.arraybuffer.checkDetachUpdatesData(extBuffer);
67
- },
68
- ]);
69
- }
@@ -1,36 +0,0 @@
1
- #include "napi.h"
2
-
3
- using namespace Napi;
4
-
5
- namespace {
6
-
7
- static void MakeCallback(const CallbackInfo& info) {
8
- Function callback = info[0].As<Function>();
9
- Object resource = info[1].As<Object>();
10
- AsyncContext context(info.Env(), "async_context_test", resource);
11
- callback.MakeCallback(
12
- Object::New(info.Env()), std::initializer_list<napi_value>{}, context);
13
- }
14
-
15
- static void MakeCallbackNoResource(const CallbackInfo& info) {
16
- Function callback = info[0].As<Function>();
17
- AsyncContext context(info.Env(), "async_context_no_res_test");
18
- callback.MakeCallback(
19
- Object::New(info.Env()), std::initializer_list<napi_value>{}, context);
20
- }
21
-
22
- static Boolean AssertAsyncContextReturnCorrectEnv(const CallbackInfo& info) {
23
- AsyncContext context(info.Env(), "empty_context_test");
24
- return Boolean::New(info.Env(), context.Env() == info.Env());
25
- }
26
- } // end anonymous namespace
27
-
28
- Object InitAsyncContext(Env env) {
29
- Object exports = Object::New(env);
30
- exports["makeCallback"] = Function::New(env, MakeCallback);
31
- exports["makeCallbackNoResource"] =
32
- Function::New(env, MakeCallbackNoResource);
33
- exports["asyncCxtReturnCorrectEnv"] =
34
- Function::New(env, AssertAsyncContextReturnCorrectEnv);
35
- return exports;
36
- }
@@ -1,122 +0,0 @@
1
- 'use strict';
2
-
3
- const assert = require('assert');
4
- const common = require('./common');
5
-
6
- // we only check async hooks on 8.x an higher were
7
- // they are closer to working properly
8
- const nodeVersion = process.versions.node.split('.')[0];
9
- let asyncHooks;
10
- function checkAsyncHooks () {
11
- if (nodeVersion >= 8) {
12
- if (asyncHooks === undefined) {
13
- asyncHooks = require('async_hooks');
14
- }
15
- return true;
16
- }
17
- return false;
18
- }
19
-
20
- module.exports = common.runTest(test);
21
-
22
- function installAsyncHooksForTest (resName) {
23
- return new Promise((resolve, reject) => {
24
- let id;
25
- const events = [];
26
- /**
27
- * TODO(legendecas): investigate why resolving & disabling hooks in
28
- * destroy callback causing crash with case 'callbackscope.js'.
29
- */
30
- let destroyed = false;
31
- const hook = asyncHooks.createHook({
32
- init (asyncId, type, triggerAsyncId, resource) {
33
- if (id === undefined && type === resName) {
34
- id = asyncId;
35
- events.push({ eventName: 'init', type, triggerAsyncId, resource });
36
- }
37
- },
38
- before (asyncId) {
39
- if (asyncId === id) {
40
- events.push({ eventName: 'before' });
41
- }
42
- },
43
- after (asyncId) {
44
- if (asyncId === id) {
45
- events.push({ eventName: 'after' });
46
- }
47
- },
48
- destroy (asyncId) {
49
- if (asyncId === id) {
50
- events.push({ eventName: 'destroy' });
51
- destroyed = true;
52
- }
53
- }
54
- }).enable();
55
-
56
- const interval = setInterval(() => {
57
- if (destroyed) {
58
- hook.disable();
59
- clearInterval(interval);
60
- resolve(events);
61
- }
62
- }, 10);
63
- });
64
- }
65
-
66
- async function makeCallbackWithResource (binding) {
67
- const hooks = installAsyncHooksForTest('async_context_test');
68
- const triggerAsyncId = asyncHooks.executionAsyncId();
69
- await new Promise((resolve, reject) => {
70
- binding.asynccontext.makeCallback(common.mustCall(), { foo: 'foo' });
71
- hooks.then(actual => {
72
- assert.deepStrictEqual(actual, [
73
- {
74
- eventName: 'init',
75
- type: 'async_context_test',
76
- triggerAsyncId: triggerAsyncId,
77
- resource: { foo: 'foo' }
78
- },
79
- { eventName: 'before' },
80
- { eventName: 'after' },
81
- { eventName: 'destroy' }
82
- ]);
83
- }).catch(common.mustNotCall());
84
- resolve();
85
- });
86
- }
87
-
88
- async function makeCallbackWithoutResource (binding) {
89
- const hooks = installAsyncHooksForTest('async_context_no_res_test');
90
- const triggerAsyncId = asyncHooks.executionAsyncId();
91
- await new Promise((resolve, reject) => {
92
- binding.asynccontext.makeCallbackNoResource(common.mustCall());
93
- hooks.then(actual => {
94
- assert.deepStrictEqual(actual, [
95
- {
96
- eventName: 'init',
97
- type: 'async_context_no_res_test',
98
- triggerAsyncId: triggerAsyncId,
99
- resource: { }
100
- },
101
- { eventName: 'before' },
102
- { eventName: 'after' },
103
- { eventName: 'destroy' }
104
- ]);
105
- }).catch(common.mustNotCall());
106
- resolve();
107
- });
108
- }
109
-
110
- function assertAsyncContextReturnsCorrectEnv (binding) {
111
- assert.strictEqual(binding.asynccontext.asyncCxtReturnCorrectEnv(), true);
112
- }
113
-
114
- async function test (binding) {
115
- if (!checkAsyncHooks()) {
116
- return;
117
- }
118
-
119
- await makeCallbackWithResource(binding);
120
- await makeCallbackWithoutResource(binding);
121
- assertAsyncContextReturnsCorrectEnv(binding);
122
- }