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:
parent
40b1f08a0f
commit
84f3769ab1
@ -243,6 +243,7 @@ module.exports = {
|
|||||||
'node-core/no-unescaped-regexp-dot': 'error',
|
'node-core/no-unescaped-regexp-dot': 'error',
|
||||||
},
|
},
|
||||||
globals: {
|
globals: {
|
||||||
|
Atomics: false,
|
||||||
BigInt: false,
|
BigInt: false,
|
||||||
BigInt64Array: false,
|
BigInt64Array: false,
|
||||||
BigUint64Array: false,
|
BigUint64Array: false,
|
||||||
|
25
src/node.cc
25
src/node.cc
@ -3478,16 +3478,37 @@ Local<Context> NewContext(Isolate* isolate,
|
|||||||
auto context = Context::New(isolate, nullptr, object_template);
|
auto context = Context::New(isolate, nullptr, object_template);
|
||||||
if (context.IsEmpty()) return context;
|
if (context.IsEmpty()) return context;
|
||||||
HandleScope handle_scope(isolate);
|
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(
|
context->SetEmbedderData(
|
||||||
ContextEmbedderIndex::kAllowWasmCodeGeneration, True(isolate));
|
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;
|
Local<Value> intl_v;
|
||||||
if (context->Global()->Get(context, intl_key).ToLocal(&intl_v) &&
|
if (context->Global()->Get(context, intl_key).ToLocal(&intl_v) &&
|
||||||
intl_v->IsObject()) {
|
intl_v->IsObject()) {
|
||||||
Local<Object> intl = intl_v.As<Object>();
|
Local<Object> intl = intl_v.As<Object>();
|
||||||
intl->Delete(context, break_iter_key).FromJust();
|
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;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
10
test/parallel/test-atomics-notify.js
Normal file
10
test/parallel/test-atomics-notify.js
Normal 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'));
|
Loading…
x
Reference in New Issue
Block a user