summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGus Caplan <me@gus.host>2018-06-19 16:21:31 -0500
committerGus Caplan <me@gus.host>2018-06-21 16:23:38 -0500
commit84f3769ab1a0d3013b391f87b77f3106f991dbfc (patch)
treef66e4d465ccd7bc2a74a56eb59b33758f70677db
parent40b1f08a0f559a11434347368f802061f80181c0 (diff)
downloadandroid-node-v8-84f3769ab1a0d3013b391f87b77f3106f991dbfc.tar.gz
android-node-v8-84f3769ab1a0d3013b391f87b77f3106f991dbfc.tar.bz2
android-node-v8-84f3769ab1a0d3013b391f87b77f3106f991dbfc.zip
atomis: add notify alias
PR-URL: https://github.com/nodejs/node/pull/21413 Refs: https://github.com/nodejs/node/issues/21219 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r--.eslintrc.js1
-rw-r--r--src/node.cc25
-rw-r--r--test/parallel/test-atomics-notify.js10
3 files changed, 34 insertions, 2 deletions
diff --git a/.eslintrc.js b/.eslintrc.js
index dc83c0e8c1..a779517907 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -243,6 +243,7 @@ module.exports = {
'node-core/no-unescaped-regexp-dot': 'error',
},
globals: {
+ Atomics: false,
BigInt: false,
BigInt64Array: false,
BigUint64Array: false,
diff --git a/src/node.cc b/src/node.cc
index 292307e9da..6cf5f2ad84 100644
--- a/src/node.cc
+++ b/src/node.cc
@@ -3478,16 +3478,37 @@ Local<Context> NewContext(Isolate* isolate,
auto context = Context::New(isolate, nullptr, object_template);
if (context.IsEmpty()) return context;
HandleScope handle_scope(isolate);
- auto intl_key = FIXED_ONE_BYTE_STRING(isolate, "Intl");
- auto break_iter_key = FIXED_ONE_BYTE_STRING(isolate, "v8BreakIterator");
context->SetEmbedderData(
ContextEmbedderIndex::kAllowWasmCodeGeneration, True(isolate));
+
+ auto intl_key = FIXED_ONE_BYTE_STRING(isolate, "Intl");
+ auto break_iter_key = FIXED_ONE_BYTE_STRING(isolate, "v8BreakIterator");
Local<Value> intl_v;
if (context->Global()->Get(context, intl_key).ToLocal(&intl_v) &&
intl_v->IsObject()) {
Local<Object> intl = intl_v.As<Object>();
intl->Delete(context, break_iter_key).FromJust();
}
+
+ // https://github.com/nodejs/node/issues/21219
+ // TODO(devsnek): remove when v8 supports Atomics.notify
+ auto atomics_key = FIXED_ONE_BYTE_STRING(isolate, "Atomics");
+ Local<Value> atomics_v;
+ if (context->Global()->Get(context, atomics_key).ToLocal(&atomics_v) &&
+ atomics_v->IsObject()) {
+ Local<Object> atomics = atomics_v.As<Object>();
+ auto wake_key = FIXED_ONE_BYTE_STRING(isolate, "wake");
+
+ Local<Value> wake = atomics->Get(context, wake_key).ToLocalChecked();
+ auto notify_key = FIXED_ONE_BYTE_STRING(isolate, "notify");
+
+ v8::PropertyDescriptor desc(wake, true);
+ desc.set_enumerable(false);
+ desc.set_configurable(true);
+
+ atomics->DefineProperty(context, notify_key, desc).ToChecked();
+ }
+
return context;
}
diff --git a/test/parallel/test-atomics-notify.js b/test/parallel/test-atomics-notify.js
new file mode 100644
index 0000000000..dcca7a9fd1
--- /dev/null
+++ b/test/parallel/test-atomics-notify.js
@@ -0,0 +1,10 @@
+'use strict';
+
+require('../common');
+
+const assert = require('assert');
+const { runInNewContext } = require('vm');
+
+assert.strictEqual(Atomics.wake, Atomics.notify);
+
+assert(runInNewContext('Atomics.wake === Atomics.notify'));