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>
This commit is contained in:
Gus Caplan 2018-06-19 16:21:31 -05:00
parent 40b1f08a0f
commit 84f3769ab1
No known key found for this signature in database
GPG Key ID: F00BD11880E82F0E
3 changed files with 34 additions and 2 deletions

View File

@ -243,6 +243,7 @@ module.exports = {
'node-core/no-unescaped-regexp-dot': 'error',
},
globals: {
Atomics: false,
BigInt: false,
BigInt64Array: false,
BigUint64Array: false,

View File

@ -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;
}

View File

@ -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'));