google / google/closure-compiler
Atomics.* take in ArrayBufferViews, not ArrayBuffers
- Dominant language
- JavaScript
- Stars
- 7.7k
- Forks
- 1.2k
- Avg merge
- 2d 12h
- Merged PRs (30d)
- 6
Description
Suggesting the following patch:
```diff
diff --git a/externs/es6.js b/externs/es6.js
index ba2dabf6a..98b1b551a 100644
--- a/externs/es6.js
+++ b/externs/es6.js
@@ -1748,7 +1748,7 @@ Reflect.setPrototypeOf = function(target, proto) {};
var Atomics = {};
/**
- * @param {!TypedArray} typedArray
+ * @param {!ArrayBufferView} typedArray
* @param {number} index
* @param {number} value
* @return {number}
@@ -1756,7 +1756,7 @@ var Atomics = {};
Atomics.add = function(typedArray, index, value) {};
/**
- * @param {!TypedArray} typedArray
+ * @param {!ArrayBufferView} typedArray
* @param {number} index
* @param {number} value
* @return {number}
@@ -1764,7 +1764,7 @@ Atomics.add = function(typedArray, index, value) {};
Atomics.and = function(typedArray, index, value) {};
/**
- * @param {!TypedArray} typedArray
+ * @param {!ArrayBufferView} typedArray
* @param {number} index
* @param {number} expectedValue
* @param {number} replacementValue
@@ -1774,7 +1774,7 @@ Atomics.compareExchange = function(
typedArray, index, expectedValue, replacementValue) {};
/**
- * @param {!TypedArray} typedArray
+ * @param {!ArrayBufferView} typedArray
* @param {number} index
* @param {number} value
* @return {number}
@@ -1788,14 +1788,14 @@ Atomics.exchange = function(typedArray, index, value) {};
Atomics.isLockFree = function(size) {};
/**
- * @param {!TypedArray} typedArray
+ * @param {!ArrayBufferView} typedArray
* @param {number} index
* @return {number}
*/
Atomics.load = function(typedArray, index) {};
/**
- * @param {!TypedArray} typedArray
+ * @param {!ArrayBufferView} typedArray
* @param {number} index
* @param {number} value
* @return {number}
@@ -1803,7 +1803,7 @@ Atomics.load = function(typedArray, index) {};
Atomics.or = function(typedArray, index, value) {};
/**
- * @param {!TypedArray} typedArray
+ * @param {!ArrayBufferView} typedArray
* @param {number} index
* @param {number} value
* @return {number}
@@ -1811,7 +1811,7 @@ Atomics.or = function(typedArray, index, value) {};
Atomics.store = function(typedArray, index, value) {};
/**
- * @param {!TypedArray} typedArray
+ * @param {!ArrayBufferView} typedArray
* @param {number} index
* @param {number} value
* @return {number}
@@ -1836,7 +1836,7 @@ Atomics.wait = function(typedArray, index, value, timeout) {};
Atomics.wake = function(typedArray, index, count) {};
/**
- * @param {!TypedArray} typedArray
+ * @param {!ArrayBufferView} typedArray
* @param {number} index
* @param {number} value
* @return {number}
```
The atomics functions do not work on raw ArrayBuffers/SharedArrayBuffers, e.g.
```js
> Atomics.load(new SharedArrayBuffer(10), 1);
VM315:1 Uncaught TypeError: # is not an integer shared typed array.
at Atomics.load ()
at :1:9
(anonymous) @ VM315:1
> Atomics.load(new Uint8Array(10), 1);
VM371:1 Uncaught TypeError: [object Uint8Array] is not an integer shared typed array.
at Atomics.load ()
at :1:9
(anonymous) @ VM371:1
> Atomics.load(new Uint8Array(new SharedArrayBuffer(10)), 1);
0
`
Contributor guide
Assessment
This issue has not been assessed yet.