Index: src/harmony-atomics.js |
diff --git a/src/harmony-atomics.js b/src/harmony-atomics.js |
deleted file mode 100644 |
index 7412494e30368e9e984174f72b642aa97ed3f7d7..0000000000000000000000000000000000000000 |
--- a/src/harmony-atomics.js |
+++ /dev/null |
@@ -1,213 +0,0 @@ |
-// Copyright 2015 the V8 project authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-(function(global, utils) { |
- |
-"use strict"; |
- |
-%CheckIsBootstrapping(); |
- |
-// ------------------------------------------------------------------- |
-// Imports |
- |
-var GlobalObject = global.Object; |
-var MathMax; |
-var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol"); |
- |
-utils.Import(function(from) { |
- MathMax = from.MathMax; |
-}); |
- |
-// ------------------------------------------------------------------- |
- |
- |
-function CheckSharedIntegerTypedArray(ia) { |
- if (!%IsSharedIntegerTypedArray(ia)) { |
- throw MakeTypeError(kNotIntegerSharedTypedArray, ia); |
- } |
-} |
- |
-function CheckSharedInteger32TypedArray(ia) { |
- CheckSharedIntegerTypedArray(ia); |
- if (%_ClassOf(ia) !== 'Int32Array') { |
- throw MakeTypeError(kNotInt32SharedTypedArray, ia); |
- } |
-} |
- |
-//------------------------------------------------------------------- |
- |
-function AtomicsCompareExchangeJS(sta, index, oldValue, newValue) { |
- CheckSharedIntegerTypedArray(sta); |
- index = TO_INTEGER(index); |
- if (index < 0 || index >= %_TypedArrayGetLength(sta)) { |
- return UNDEFINED; |
- } |
- oldValue = TO_NUMBER(oldValue); |
- newValue = TO_NUMBER(newValue); |
- return %_AtomicsCompareExchange(sta, index, oldValue, newValue); |
-} |
- |
-function AtomicsLoadJS(sta, index) { |
- CheckSharedIntegerTypedArray(sta); |
- index = TO_INTEGER(index); |
- if (index < 0 || index >= %_TypedArrayGetLength(sta)) { |
- return UNDEFINED; |
- } |
- return %_AtomicsLoad(sta, index); |
-} |
- |
-function AtomicsStoreJS(sta, index, value) { |
- CheckSharedIntegerTypedArray(sta); |
- index = TO_INTEGER(index); |
- if (index < 0 || index >= %_TypedArrayGetLength(sta)) { |
- return UNDEFINED; |
- } |
- value = TO_NUMBER(value); |
- return %_AtomicsStore(sta, index, value); |
-} |
- |
-function AtomicsAddJS(ia, index, value) { |
- CheckSharedIntegerTypedArray(ia); |
- index = TO_INTEGER(index); |
- if (index < 0 || index >= %_TypedArrayGetLength(ia)) { |
- return UNDEFINED; |
- } |
- value = TO_NUMBER(value); |
- return %_AtomicsAdd(ia, index, value); |
-} |
- |
-function AtomicsSubJS(ia, index, value) { |
- CheckSharedIntegerTypedArray(ia); |
- index = TO_INTEGER(index); |
- if (index < 0 || index >= %_TypedArrayGetLength(ia)) { |
- return UNDEFINED; |
- } |
- value = TO_NUMBER(value); |
- return %_AtomicsSub(ia, index, value); |
-} |
- |
-function AtomicsAndJS(ia, index, value) { |
- CheckSharedIntegerTypedArray(ia); |
- index = TO_INTEGER(index); |
- if (index < 0 || index >= %_TypedArrayGetLength(ia)) { |
- return UNDEFINED; |
- } |
- value = TO_NUMBER(value); |
- return %_AtomicsAnd(ia, index, value); |
-} |
- |
-function AtomicsOrJS(ia, index, value) { |
- CheckSharedIntegerTypedArray(ia); |
- index = TO_INTEGER(index); |
- if (index < 0 || index >= %_TypedArrayGetLength(ia)) { |
- return UNDEFINED; |
- } |
- value = TO_NUMBER(value); |
- return %_AtomicsOr(ia, index, value); |
-} |
- |
-function AtomicsXorJS(ia, index, value) { |
- CheckSharedIntegerTypedArray(ia); |
- index = TO_INTEGER(index); |
- if (index < 0 || index >= %_TypedArrayGetLength(ia)) { |
- return UNDEFINED; |
- } |
- value = TO_NUMBER(value); |
- return %_AtomicsXor(ia, index, value); |
-} |
- |
-function AtomicsExchangeJS(ia, index, value) { |
- CheckSharedIntegerTypedArray(ia); |
- index = TO_INTEGER(index); |
- if (index < 0 || index >= %_TypedArrayGetLength(ia)) { |
- return UNDEFINED; |
- } |
- value = TO_NUMBER(value); |
- return %_AtomicsExchange(ia, index, value); |
-} |
- |
-function AtomicsIsLockFreeJS(size) { |
- return %_AtomicsIsLockFree(size); |
-} |
- |
-// Futexes |
- |
-function AtomicsFutexWaitJS(ia, index, value, timeout) { |
- CheckSharedInteger32TypedArray(ia); |
- index = TO_INTEGER(index); |
- if (index < 0 || index >= %_TypedArrayGetLength(ia)) { |
- return UNDEFINED; |
- } |
- if (IS_UNDEFINED(timeout)) { |
- timeout = INFINITY; |
- } else { |
- timeout = TO_NUMBER(timeout); |
- if (NUMBER_IS_NAN(timeout)) { |
- timeout = INFINITY; |
- } else { |
- timeout = MathMax(0, timeout); |
- } |
- } |
- return %AtomicsFutexWait(ia, index, value, timeout); |
-} |
- |
-function AtomicsFutexWakeJS(ia, index, count) { |
- CheckSharedInteger32TypedArray(ia); |
- index = TO_INTEGER(index); |
- if (index < 0 || index >= %_TypedArrayGetLength(ia)) { |
- return UNDEFINED; |
- } |
- count = MathMax(0, TO_INTEGER(count)); |
- return %AtomicsFutexWake(ia, index, count); |
-} |
- |
-function AtomicsFutexWakeOrRequeueJS(ia, index1, count, value, index2) { |
- CheckSharedInteger32TypedArray(ia); |
- index1 = TO_INTEGER(index1); |
- count = MathMax(0, TO_INTEGER(count)); |
- value = TO_INT32(value); |
- index2 = TO_INTEGER(index2); |
- if (index1 < 0 || index1 >= %_TypedArrayGetLength(ia) || |
- index2 < 0 || index2 >= %_TypedArrayGetLength(ia)) { |
- return UNDEFINED; |
- } |
- return %AtomicsFutexWakeOrRequeue(ia, index1, count, value, index2); |
-} |
- |
-// ------------------------------------------------------------------- |
- |
-function AtomicsConstructor() {} |
- |
-var Atomics = new AtomicsConstructor(); |
- |
-%InternalSetPrototype(Atomics, GlobalObject.prototype); |
-%AddNamedProperty(global, "Atomics", Atomics, DONT_ENUM); |
-%FunctionSetInstanceClassName(AtomicsConstructor, 'Atomics'); |
- |
-%AddNamedProperty(Atomics, toStringTagSymbol, "Atomics", READ_ONLY | DONT_ENUM); |
- |
-// These must match the values in src/futex-emulation.h |
-utils.InstallConstants(Atomics, [ |
- "OK", 0, |
- "NOTEQUAL", -1, |
- "TIMEDOUT", -2, |
-]); |
- |
-utils.InstallFunctions(Atomics, DONT_ENUM, [ |
- "compareExchange", AtomicsCompareExchangeJS, |
- "load", AtomicsLoadJS, |
- "store", AtomicsStoreJS, |
- "add", AtomicsAddJS, |
- "sub", AtomicsSubJS, |
- "and", AtomicsAndJS, |
- "or", AtomicsOrJS, |
- "xor", AtomicsXorJS, |
- "exchange", AtomicsExchangeJS, |
- "isLockFree", AtomicsIsLockFreeJS, |
- "futexWait", AtomicsFutexWaitJS, |
- "futexWake", AtomicsFutexWakeJS, |
- "futexWakeOrRequeue", AtomicsFutexWakeOrRequeueJS, |
-]); |
- |
-}) |