Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Schulhof <gabriel.schulhof@intel.com>2019-06-15 02:44:18 +0300
committerGabriel Schulhof <gabriel.schulhof@intel.com>2020-08-01 04:30:30 +0300
commitcc7ec889e863433c248bc4b5c8e33f61ccc40f29 (patch)
tree308069adb8a8948f965504ada6835a5d30c6d10e /benchmark/napi/type-tag/check-object-tag.js
parent8b3ad75b03ee49688ac0e9e4aa2481231fd4ff96 (diff)
n-api: support type-tagging objects
`napi_instanceof()` is insufficient for reliably establishing the data type to which a pointer stored with `napi_wrap()` or `napi_create_external()` inside a JavaScript object points. Thus, we need a way to "mark" an object with a value that, when later retrieved, can unambiguously tell us whether it is safe to cast the pointer stored inside it to a certain structure. Such a check must survive loading/unloading/multiple instances of an addon, so we use UUIDs chosen *a priori*. Fixes: https://github.com/nodejs/node/issues/28164 Co-authored-by: Anna Henningsen <github@addaleax.net> PR-URL: https://github.com/nodejs/node/pull/28237 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Signed-off-by: Gabriel Schulhof <gabriel.schulhof@intel.com>
Diffstat (limited to 'benchmark/napi/type-tag/check-object-tag.js')
-rw-r--r--benchmark/napi/type-tag/check-object-tag.js18
1 files changed, 18 insertions, 0 deletions
diff --git a/benchmark/napi/type-tag/check-object-tag.js b/benchmark/napi/type-tag/check-object-tag.js
new file mode 100644
index 00000000000..346dfb7812d
--- /dev/null
+++ b/benchmark/napi/type-tag/check-object-tag.js
@@ -0,0 +1,18 @@
+'use strict';
+const common = require('../../common.js');
+
+let binding;
+try {
+ binding = require(`./build/${common.buildType}/binding`);
+} catch {
+ console.error(`${__filename}: Binding failed to load`);
+ process.exit(0);
+}
+
+const bench = common.createBenchmark(main, {
+ n: [1e5, 1e6, 1e7],
+});
+
+function main({ n }) {
+ binding.checkObjectTag(n, bench, bench.start, bench.end);
+}