Skip to content

Commit

Permalink
atomis: add notify alias
Browse files Browse the repository at this point in the history
PR-URL: #21413
Refs: #21219
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
devsnek authored and targos committed Jun 22, 2018
1 parent 5d72189 commit a526b4e
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 2 deletions.
1 change: 1 addition & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ module.exports = {
'node-core/no-unescaped-regexp-dot': 'error',
},
globals: {
Atomics: false,
BigInt: false,
BigInt64Array: false,
BigUint64Array: false,
Expand Down
25 changes: 23 additions & 2 deletions src/node.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4031,16 +4031,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;
}

Expand Down
10 changes: 10 additions & 0 deletions test/parallel/test-atomics-notify.js
Original file line number Diff line number Diff line change
@@ -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'));

0 comments on commit a526b4e

Please sign in to comment.