koffi 1.1.0-beta.1 → 1.1.0-beta.4
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.
- package/CMakeLists.txt +4 -0
- package/README.md +20 -11
- package/build/qemu/1.1.0-beta.4/koffi_darwin_x64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.4/koffi_freebsd_arm64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.4/koffi_freebsd_ia32.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.4/koffi_freebsd_x64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.4/koffi_linux_arm.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.4/koffi_linux_arm64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.4/koffi_linux_ia32.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.4/koffi_linux_x64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.4/koffi_win32_ia32.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.4/koffi_win32_x64.tar.gz +0 -0
- package/package.json +1 -1
- package/qemu/qemu.js +1 -0
- package/src/abi_arm32.cc +27 -45
- package/src/abi_arm64.cc +58 -132
- package/src/abi_x64_sysv.cc +24 -7
- package/src/abi_x64_win.cc +3 -0
- package/src/abi_x86.cc +3 -0
- package/src/call.cc +540 -33
- package/src/call.hh +5 -3
- package/src/ffi.cc +129 -4
- package/src/ffi.hh +5 -1
- package/src/parser.cc +7 -2
- package/src/util.cc +72 -0
- package/src/util.hh +2 -0
- package/test/misc.c +14 -8
- package/vendor/node-addon-api/CODE_OF_CONDUCT.md +4 -0
- package/vendor/node-addon-api/CONTRIBUTING.md +93 -0
- package/vendor/node-addon-api/appveyor.yml +37 -0
- package/vendor/node-addon-api/benchmark/README.md +47 -0
- package/vendor/node-addon-api/benchmark/binding.gyp +25 -0
- package/vendor/node-addon-api/benchmark/function_args.cc +217 -0
- package/vendor/node-addon-api/benchmark/function_args.js +60 -0
- package/vendor/node-addon-api/benchmark/index.js +34 -0
- package/vendor/node-addon-api/benchmark/property_descriptor.cc +91 -0
- package/vendor/node-addon-api/benchmark/property_descriptor.js +37 -0
- package/vendor/node-addon-api/doc/addon.md +163 -0
- package/vendor/node-addon-api/doc/array.md +81 -0
- package/vendor/node-addon-api/doc/array_buffer.md +155 -0
- package/vendor/node-addon-api/doc/async_context.md +86 -0
- package/vendor/node-addon-api/doc/async_operations.md +31 -0
- package/vendor/node-addon-api/doc/async_worker.md +427 -0
- package/vendor/node-addon-api/doc/async_worker_variants.md +557 -0
- package/vendor/node-addon-api/doc/bigint.md +97 -0
- package/vendor/node-addon-api/doc/boolean.md +68 -0
- package/vendor/node-addon-api/doc/buffer.md +150 -0
- package/vendor/node-addon-api/doc/callback_scope.md +54 -0
- package/vendor/node-addon-api/doc/callbackinfo.md +97 -0
- package/vendor/node-addon-api/doc/checker-tool.md +32 -0
- package/vendor/node-addon-api/doc/class_property_descriptor.md +123 -0
- package/vendor/node-addon-api/doc/cmake-js.md +68 -0
- package/vendor/node-addon-api/doc/conversion-tool.md +28 -0
- package/vendor/node-addon-api/doc/creating_a_release.md +62 -0
- package/vendor/node-addon-api/doc/dataview.md +248 -0
- package/vendor/node-addon-api/doc/date.md +68 -0
- package/vendor/node-addon-api/doc/env.md +196 -0
- package/vendor/node-addon-api/doc/error.md +120 -0
- package/vendor/node-addon-api/doc/error_handling.md +254 -0
- package/vendor/node-addon-api/doc/escapable_handle_scope.md +80 -0
- package/vendor/node-addon-api/doc/external.md +63 -0
- package/vendor/node-addon-api/doc/function.md +402 -0
- package/vendor/node-addon-api/doc/function_reference.md +238 -0
- package/vendor/node-addon-api/doc/generator.md +13 -0
- package/vendor/node-addon-api/doc/handle_scope.md +63 -0
- package/vendor/node-addon-api/doc/hierarchy.md +91 -0
- package/vendor/node-addon-api/doc/instance_wrap.md +408 -0
- package/vendor/node-addon-api/doc/maybe.md +76 -0
- package/vendor/node-addon-api/doc/memory_management.md +27 -0
- package/vendor/node-addon-api/doc/name.md +29 -0
- package/vendor/node-addon-api/doc/node-gyp.md +82 -0
- package/vendor/node-addon-api/doc/number.md +163 -0
- package/vendor/node-addon-api/doc/object.md +411 -0
- package/vendor/node-addon-api/doc/object_lifetime_management.md +83 -0
- package/vendor/node-addon-api/doc/object_reference.md +117 -0
- package/vendor/node-addon-api/doc/object_wrap.md +588 -0
- package/vendor/node-addon-api/doc/prebuild_tools.md +16 -0
- package/vendor/node-addon-api/doc/promises.md +79 -0
- package/vendor/node-addon-api/doc/property_descriptor.md +286 -0
- package/vendor/node-addon-api/doc/propertylvalue.md +50 -0
- package/vendor/node-addon-api/doc/range_error.md +59 -0
- package/vendor/node-addon-api/doc/reference.md +113 -0
- package/vendor/node-addon-api/doc/setup.md +110 -0
- package/vendor/node-addon-api/doc/string.md +93 -0
- package/vendor/node-addon-api/doc/symbol.md +61 -0
- package/vendor/node-addon-api/doc/threadsafe.md +121 -0
- package/vendor/node-addon-api/doc/threadsafe_function.md +290 -0
- package/vendor/node-addon-api/doc/type_error.md +59 -0
- package/vendor/node-addon-api/doc/typed_array.md +78 -0
- package/vendor/node-addon-api/doc/typed_array_of.md +137 -0
- package/vendor/node-addon-api/doc/typed_threadsafe_function.md +306 -0
- package/vendor/node-addon-api/doc/value.md +340 -0
- package/vendor/node-addon-api/doc/version_management.md +43 -0
- package/vendor/node-addon-api/package.json +415 -0
- package/vendor/node-addon-api/test/README.md +91 -0
- package/vendor/node-addon-api/test/addon.cc +36 -0
- package/vendor/node-addon-api/test/addon.js +11 -0
- package/vendor/node-addon-api/test/addon_build/index.js +49 -0
- package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +17 -0
- package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +62 -0
- package/vendor/node-addon-api/test/addon_build/tpl/index.js +9 -0
- package/vendor/node-addon-api/test/addon_build/tpl/package.json +11 -0
- package/vendor/node-addon-api/test/addon_data.cc +99 -0
- package/vendor/node-addon-api/test/addon_data.js +46 -0
- package/vendor/node-addon-api/test/array_buffer.cc +243 -0
- package/vendor/node-addon-api/test/array_buffer.js +69 -0
- package/vendor/node-addon-api/test/async_context.cc +36 -0
- package/vendor/node-addon-api/test/async_context.js +122 -0
- package/vendor/node-addon-api/test/async_progress_queue_worker.cc +83 -0
- package/vendor/node-addon-api/test/async_progress_queue_worker.js +46 -0
- package/vendor/node-addon-api/test/async_progress_worker.cc +134 -0
- package/vendor/node-addon-api/test/async_progress_worker.js +61 -0
- package/vendor/node-addon-api/test/async_worker.cc +106 -0
- package/vendor/node-addon-api/test/async_worker.js +179 -0
- package/vendor/node-addon-api/test/async_worker_nocallback.js +13 -0
- package/vendor/node-addon-api/test/async_worker_persistent.cc +63 -0
- package/vendor/node-addon-api/test/async_worker_persistent.js +24 -0
- package/vendor/node-addon-api/test/basic_types/array.cc +40 -0
- package/vendor/node-addon-api/test/basic_types/array.js +35 -0
- package/vendor/node-addon-api/test/basic_types/boolean.cc +38 -0
- package/vendor/node-addon-api/test/basic_types/boolean.js +35 -0
- package/vendor/node-addon-api/test/basic_types/number.cc +99 -0
- package/vendor/node-addon-api/test/basic_types/number.js +114 -0
- package/vendor/node-addon-api/test/basic_types/value.cc +120 -0
- package/vendor/node-addon-api/test/basic_types/value.js +133 -0
- package/vendor/node-addon-api/test/bigint.cc +91 -0
- package/vendor/node-addon-api/test/bigint.js +53 -0
- package/vendor/node-addon-api/test/binding-swallowexcept.cc +12 -0
- package/vendor/node-addon-api/test/binding.cc +173 -0
- package/vendor/node-addon-api/test/binding.gyp +124 -0
- package/vendor/node-addon-api/test/buffer.cc +183 -0
- package/vendor/node-addon-api/test/buffer.js +69 -0
- package/vendor/node-addon-api/test/callbackscope.cc +22 -0
- package/vendor/node-addon-api/test/callbackscope.js +49 -0
- package/vendor/node-addon-api/test/common/index.js +114 -0
- package/vendor/node-addon-api/test/common/test_helper.h +71 -0
- package/vendor/node-addon-api/test/dataview/dataview.cc +48 -0
- package/vendor/node-addon-api/test/dataview/dataview.js +35 -0
- package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +115 -0
- package/vendor/node-addon-api/test/dataview/dataview_read_write.js +90 -0
- package/vendor/node-addon-api/test/date.cc +44 -0
- package/vendor/node-addon-api/test/date.js +18 -0
- package/vendor/node-addon-api/test/env_cleanup.cc +88 -0
- package/vendor/node-addon-api/test/env_cleanup.js +56 -0
- package/vendor/node-addon-api/test/error.cc +287 -0
- package/vendor/node-addon-api/test/error.js +81 -0
- package/vendor/node-addon-api/test/error_handling_for_primitives.cc +13 -0
- package/vendor/node-addon-api/test/error_handling_for_primitives.js +29 -0
- package/vendor/node-addon-api/test/error_terminating_environment.js +95 -0
- package/vendor/node-addon-api/test/external.cc +81 -0
- package/vendor/node-addon-api/test/external.js +88 -0
- package/vendor/node-addon-api/test/function.cc +324 -0
- package/vendor/node-addon-api/test/function.js +133 -0
- package/vendor/node-addon-api/test/function_reference.cc +202 -0
- package/vendor/node-addon-api/test/function_reference.js +157 -0
- package/vendor/node-addon-api/test/globalObject/global_object.cc +61 -0
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +31 -0
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +61 -0
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +40 -0
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +57 -0
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +28 -0
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +48 -0
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +31 -0
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +58 -0
- package/vendor/node-addon-api/test/handlescope.cc +60 -0
- package/vendor/node-addon-api/test/handlescope.js +14 -0
- package/vendor/node-addon-api/test/index.js +159 -0
- package/vendor/node-addon-api/test/maybe/check.cc +23 -0
- package/vendor/node-addon-api/test/maybe/index.js +38 -0
- package/vendor/node-addon-api/test/memory_management.cc +17 -0
- package/vendor/node-addon-api/test/memory_management.js +9 -0
- package/vendor/node-addon-api/test/movable_callbacks.cc +23 -0
- package/vendor/node-addon-api/test/movable_callbacks.js +21 -0
- package/vendor/node-addon-api/test/name.cc +108 -0
- package/vendor/node-addon-api/test/name.js +59 -0
- package/vendor/node-addon-api/test/napi_child.js +14 -0
- package/vendor/node-addon-api/test/object/delete_property.cc +38 -0
- package/vendor/node-addon-api/test/object/delete_property.js +41 -0
- package/vendor/node-addon-api/test/object/finalizer.cc +29 -0
- package/vendor/node-addon-api/test/object/finalizer.js +28 -0
- package/vendor/node-addon-api/test/object/get_property.cc +34 -0
- package/vendor/node-addon-api/test/object/get_property.js +40 -0
- package/vendor/node-addon-api/test/object/has_own_property.cc +34 -0
- package/vendor/node-addon-api/test/object/has_own_property.js +34 -0
- package/vendor/node-addon-api/test/object/has_property.cc +38 -0
- package/vendor/node-addon-api/test/object/has_property.js +37 -0
- package/vendor/node-addon-api/test/object/object.cc +350 -0
- package/vendor/node-addon-api/test/object/object.js +217 -0
- package/vendor/node-addon-api/test/object/object_deprecated.cc +66 -0
- package/vendor/node-addon-api/test/object/object_deprecated.js +47 -0
- package/vendor/node-addon-api/test/object/object_freeze_seal.cc +25 -0
- package/vendor/node-addon-api/test/object/object_freeze_seal.js +61 -0
- package/vendor/node-addon-api/test/object/set_property.cc +45 -0
- package/vendor/node-addon-api/test/object/set_property.js +30 -0
- package/vendor/node-addon-api/test/object/subscript_operator.cc +58 -0
- package/vendor/node-addon-api/test/object/subscript_operator.js +17 -0
- package/vendor/node-addon-api/test/object_reference.cc +219 -0
- package/vendor/node-addon-api/test/object_reference.js +259 -0
- package/vendor/node-addon-api/test/objectwrap.cc +268 -0
- package/vendor/node-addon-api/test/objectwrap.js +284 -0
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +26 -0
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +18 -0
- package/vendor/node-addon-api/test/objectwrap_function.cc +45 -0
- package/vendor/node-addon-api/test/objectwrap_function.js +22 -0
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +30 -0
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +13 -0
- package/vendor/node-addon-api/test/objectwrap_removewrap.cc +45 -0
- package/vendor/node-addon-api/test/objectwrap_removewrap.js +40 -0
- package/vendor/node-addon-api/test/objectwrap_worker_thread.js +19 -0
- package/vendor/node-addon-api/test/promise.cc +29 -0
- package/vendor/node-addon-api/test/promise.js +18 -0
- package/vendor/node-addon-api/test/reference.cc +24 -0
- package/vendor/node-addon-api/test/reference.js +14 -0
- package/vendor/node-addon-api/test/run_script.cc +56 -0
- package/vendor/node-addon-api/test/run_script.js +45 -0
- package/vendor/node-addon-api/test/symbol.cc +79 -0
- package/vendor/node-addon-api/test/symbol.js +73 -0
- package/vendor/node-addon-api/test/testUtil.js +54 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +195 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +188 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +63 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +12 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +115 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +14 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +26 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +7 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +225 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +59 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +42 -0
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +53 -0
- package/vendor/node-addon-api/test/thunking_manual.cc +140 -0
- package/vendor/node-addon-api/test/thunking_manual.js +17 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +215 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +188 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +68 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +12 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +127 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +14 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +28 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +7 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +237 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +59 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +53 -0
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +53 -0
- package/vendor/node-addon-api/test/typedarray-bigint.js +58 -0
- package/vendor/node-addon-api/test/typedarray.cc +216 -0
- package/vendor/node-addon-api/test/typedarray.js +69 -0
- package/vendor/node-addon-api/test/version_management.cc +27 -0
- package/vendor/node-addon-api/test/version_management.js +31 -0
- package/vendor/node-addon-api/unit-test/README.md +28 -0
- package/vendor/node-addon-api/unit-test/binding-file-template.js +39 -0
- package/vendor/node-addon-api/unit-test/binding.gyp +72 -0
- package/vendor/node-addon-api/unit-test/exceptions.js +32 -0
- package/vendor/node-addon-api/unit-test/generate-binding-cc.js +61 -0
- package/vendor/node-addon-api/unit-test/injectTestParams.js +101 -0
- package/vendor/node-addon-api/unit-test/listOfTestModules.js +88 -0
- package/vendor/node-addon-api/unit-test/matchModules.js +65 -0
- package/vendor/node-addon-api/unit-test/setup.js +13 -0
- package/vendor/node-addon-api/unit-test/spawnTask.js +26 -0
- package/vendor/node-addon-api/unit-test/test.js +30 -0
- package/build/qemu/1.1.0-beta.1/koffi_darwin_x64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.1/koffi_freebsd_arm64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.1/koffi_freebsd_ia32.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.1/koffi_freebsd_x64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.1/koffi_linux_arm.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.1/koffi_linux_arm64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.1/koffi_linux_ia32.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.1/koffi_linux_x64.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.1/koffi_win32_ia32.tar.gz +0 -0
- package/build/qemu/1.1.0-beta.1/koffi_win32_x64.tar.gz +0 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Object lifetime management
|
|
2
|
+
|
|
3
|
+
A handle may be created when any new node-addon-api Value and
|
|
4
|
+
its subclasses is created or returned.
|
|
5
|
+
|
|
6
|
+
As the methods and classes within the node-addon-api are used,
|
|
7
|
+
handles to objects in the heap for the underlying
|
|
8
|
+
VM may be created. A handle may be created when any new
|
|
9
|
+
node-addon-api Value or one of its subclasses is created or returned.
|
|
10
|
+
These handles must hold the objects 'live' until they are no
|
|
11
|
+
longer required by the native code, otherwise the objects could be
|
|
12
|
+
collected by the garbage collector before the native code was
|
|
13
|
+
finished using them.
|
|
14
|
+
|
|
15
|
+
As handles are created they are associated with a
|
|
16
|
+
'scope'. The lifespan for the default scope is tied to the lifespan
|
|
17
|
+
of the native method call. The result is that, by default, handles
|
|
18
|
+
remain valid and the objects associated with these handles will be
|
|
19
|
+
held live for the lifespan of the native method call.
|
|
20
|
+
|
|
21
|
+
In many cases, however, it is necessary that the handles remain valid for
|
|
22
|
+
either a shorter or longer lifespan than that of the native method.
|
|
23
|
+
The sections which follow describe the node-addon-api classes and
|
|
24
|
+
methods that than can be used to change the handle lifespan from
|
|
25
|
+
the default.
|
|
26
|
+
|
|
27
|
+
## Making handle lifespan shorter than that of the native method
|
|
28
|
+
|
|
29
|
+
It is often necessary to make the lifespan of handles shorter than
|
|
30
|
+
the lifespan of a native method. For example, consider a native method
|
|
31
|
+
that has a loop which creates a number of values and does something
|
|
32
|
+
with each of the values, one at a time:
|
|
33
|
+
|
|
34
|
+
```C++
|
|
35
|
+
for (int i = 0; i < LOOP_MAX; i++) {
|
|
36
|
+
std::string name = std::string("inner-scope") + std::to_string(i);
|
|
37
|
+
Napi::Value newValue = Napi::String::New(info.Env(), name.c_str());
|
|
38
|
+
// do something with newValue
|
|
39
|
+
};
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
This would result in a large number of handles being created, consuming
|
|
43
|
+
substantial resources. In addition, even though the native code could only
|
|
44
|
+
use the most recently created value, all of the previously created
|
|
45
|
+
values would also be kept alive since they all share the same scope.
|
|
46
|
+
|
|
47
|
+
To handle this case, node-addon-api provides the ability to establish
|
|
48
|
+
a new 'scope' to which newly created handles will be associated. Once those
|
|
49
|
+
handles are no longer required, the scope can be deleted and any handles
|
|
50
|
+
associated with the scope are invalidated. The `Napi::HandleScope`
|
|
51
|
+
and `Napi::EscapableHandleScope` classes are provided by node-addon-api for
|
|
52
|
+
creating additional scopes.
|
|
53
|
+
|
|
54
|
+
node-addon-api only supports a single nested hierarchy of scopes. There is
|
|
55
|
+
only one active scope at any time, and all new handles will be associated
|
|
56
|
+
with that scope while it is active. Scopes must be deleted in the reverse
|
|
57
|
+
order from which they are opened. In addition, all scopes created within
|
|
58
|
+
a native method must be deleted before returning from that method. Since
|
|
59
|
+
`Napi::HandleScopes` are typically stack allocated the compiler will take care of
|
|
60
|
+
deletion, however, care must be taken to create the scope in the right
|
|
61
|
+
place such that you achieve the desired lifetime.
|
|
62
|
+
|
|
63
|
+
Taking the earlier example, creating a `Napi::HandleScope` in the inner loop
|
|
64
|
+
would ensure that at most a single new value is held alive throughout the
|
|
65
|
+
execution of the loop:
|
|
66
|
+
|
|
67
|
+
```C
|
|
68
|
+
for (int i = 0; i < LOOP_MAX; i++) {
|
|
69
|
+
Napi::HandleScope scope(info.Env());
|
|
70
|
+
std::string name = std::string("inner-scope") + std::to_string(i);
|
|
71
|
+
Napi::Value newValue = Napi::String::New(info.Env(), name.c_str());
|
|
72
|
+
// do something with newValue
|
|
73
|
+
};
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
When nesting scopes, there are cases where a handle from an
|
|
77
|
+
inner scope needs to live beyond the lifespan of that scope. node-addon-api
|
|
78
|
+
provides the `Napi::EscapableHandleScope` with the `Escape` method
|
|
79
|
+
in order to support this case. An escapable scope
|
|
80
|
+
allows one object to be 'promoted' so that it 'escapes' the
|
|
81
|
+
current scope and the lifespan of the handle changes from the current
|
|
82
|
+
scope to that of the outer scope. The `Escape` method can only be called
|
|
83
|
+
once for a given `Napi::EscapableHandleScope`.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Object Reference
|
|
2
|
+
|
|
3
|
+
`Napi::ObjectReference` is a subclass of [`Napi::Reference`](reference.md), and is equivalent to an instance of `Napi::Reference<Object>`. This means that a `Napi::ObjectReference` holds a [`Napi::Object`](object.md), and a count of the number of references to that Object. When the count is greater than 0, an ObjectReference is not eligible for garbage collection. This ensures that the Object being held as a value of the ObjectReference will remain accessible, even if the original Object no longer is. However, ObjectReference is unique from a Reference since properties can be set and get to the Object itself that can be accessed through the ObjectReference.
|
|
4
|
+
|
|
5
|
+
For more general information on references, please consult [`Napi::Reference`](reference.md).
|
|
6
|
+
|
|
7
|
+
## Example
|
|
8
|
+
```cpp
|
|
9
|
+
#include <napi.h>
|
|
10
|
+
|
|
11
|
+
using namespace Napi;
|
|
12
|
+
|
|
13
|
+
void Init(Env env) {
|
|
14
|
+
|
|
15
|
+
// Create an empty ObjectReference that has an initial reference count of 2.
|
|
16
|
+
ObjectReference obj_ref = Reference<Object>::New(Object::New(env), 2);
|
|
17
|
+
|
|
18
|
+
// Set a couple of different properties on the reference.
|
|
19
|
+
obj_ref.Set("hello", String::New(env, "world"));
|
|
20
|
+
obj_ref.Set(42, "The Answer to Life, the Universe, and Everything");
|
|
21
|
+
|
|
22
|
+
// Get the properties using the keys.
|
|
23
|
+
Value val1 = obj_ref.Get("hello");
|
|
24
|
+
Value val2 = obj_ref.Get(42);
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Methods
|
|
29
|
+
|
|
30
|
+
### Initialization
|
|
31
|
+
|
|
32
|
+
```cpp
|
|
33
|
+
static Napi::ObjectReference Napi::ObjectReference::New(const Napi::Object& value, uint32_t initialRefcount = 0);
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
* `[in] value`: The `Napi::Object` which is to be referenced.
|
|
37
|
+
|
|
38
|
+
* `[in] initialRefcount`: The initial reference count.
|
|
39
|
+
|
|
40
|
+
Returns the newly created reference.
|
|
41
|
+
|
|
42
|
+
```cpp
|
|
43
|
+
static Napi::ObjectReference Napi::Weak(const Napi::Object& value);
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Creates a "weak" reference to the value, in that the initial count of number of references is set to 0.
|
|
47
|
+
|
|
48
|
+
* `[in] value`: The value which is to be referenced.
|
|
49
|
+
|
|
50
|
+
Returns the newly created reference.
|
|
51
|
+
|
|
52
|
+
```cpp
|
|
53
|
+
static Napi::ObjectReference Napi::Persistent(const Napi::Object& value);
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Creates a "persistent" reference to the value, in that the initial count of number of references is set to 1.
|
|
57
|
+
|
|
58
|
+
* `[in] value`: The value which is to be referenced.
|
|
59
|
+
|
|
60
|
+
Returns the newly created reference.
|
|
61
|
+
|
|
62
|
+
### Empty Constructor
|
|
63
|
+
|
|
64
|
+
```cpp
|
|
65
|
+
Napi::ObjectReference::ObjectReference();
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Returns a new _empty_ `Napi::ObjectReference` instance.
|
|
69
|
+
|
|
70
|
+
### Constructor
|
|
71
|
+
|
|
72
|
+
```cpp
|
|
73
|
+
Napi::ObjectReference::ObjectReference(napi_env env, napi_value value);
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
* `[in] env`: The `napi_env` environment in which to construct the `Napi::ObjectReference` object.
|
|
77
|
+
|
|
78
|
+
* `[in] value`: The Node-API primitive value to be held by the `Napi::ObjectReference`.
|
|
79
|
+
|
|
80
|
+
Returns the newly created reference.
|
|
81
|
+
|
|
82
|
+
### Set
|
|
83
|
+
```cpp
|
|
84
|
+
bool Napi::ObjectReference::Set(___ key, ___ value);
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
* `[in] key`: The name for the property being assigned.
|
|
88
|
+
|
|
89
|
+
* `[in] value`: The value being assigned to the property.
|
|
90
|
+
|
|
91
|
+
The `key` can be any of the following types:
|
|
92
|
+
- `const char*`
|
|
93
|
+
- `const std::string`
|
|
94
|
+
- `uint32_t`
|
|
95
|
+
|
|
96
|
+
The `value` can be any of the following types:
|
|
97
|
+
- `napi_value`
|
|
98
|
+
- `Napi::Value`
|
|
99
|
+
- `const char*`
|
|
100
|
+
- `bool`
|
|
101
|
+
- `double`
|
|
102
|
+
|
|
103
|
+
### Get
|
|
104
|
+
|
|
105
|
+
```cpp
|
|
106
|
+
Napi::Value Napi::ObjectReference::Get(___ key) const;
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
* `[in] key`: The name of the property to return the value for.
|
|
110
|
+
|
|
111
|
+
Returns the [`Napi::Value`](value.md) associated with the key property. Returns NULL if no such key exists.
|
|
112
|
+
|
|
113
|
+
The `key` can be any of the following types:
|
|
114
|
+
- `const char*`
|
|
115
|
+
- `const std::string`
|
|
116
|
+
- `uint32_t`
|
|
117
|
+
|