[immutable-arraybuffer] TypedArray internal operations#4551
[immutable-arraybuffer] TypedArray internal operations#4551
Conversation
With `sedi` being a portable `sed -i`, e.g. `sed -i '' "$@"` on BSD and `sed -i "$@"` on Linux: ```sh git grep -l 'testWith[A-Za-z]*TypedArrayConstructors[(].*, N.*' test/built-ins/ | \ xargs sedi -E 's#(testWith[A-Za-z]*TypedArrayConstructors[(].*), N([^a-zA-Z].*)#\1\2#' ```
With `sedi` being a portable `sed -i`, e.g. `sed -i '' "$@"` on BSD and `sed -i "$@"` on Linux: ```sh git grep -l 'testBigIntTypedArray[.]js' | \ xargs sedi 's#testBigIntTypedArray[.]js#testTypedArray.js#' ```
… a TA constructor and an argument factory
…uctors
With `sedi` being a portable `sed -i`, e.g. `sed -i '' "$@"` on BSD and
`sed -i "$@"` on Linux:
```sh
git grep -l 'testWith[A-Za-z]*TypedArrayConstructors[(]' test/built-ins/ | \
while read f; do
grep -qF detachArrayBuffer.js "$f" && continue
grep -qF '.resize(' "$f" && continue
taCtorAliases="$(sed -nE \
's#testWith[A-Za-z]*TypedArrayConstructors[(] *(function[^(]*[(] *|[^a-zA-Z0-9_]*)([a-zA-Z0-9_]+).*#\2#p' \
"$f")"
sedi -E '
s#(testWith[A-Za-z]*TypedArrayConstructors[(] *(function[^(]*[(] *|[(] *)[a-zA-Z0-9_]+)#\1, makeCtorArg#; t;
s#(testWith[A-Za-z]*TypedArrayConstructors[(] *)([a-zA-Z0-9_]+)#\1(\2, makeCtorArg)#; t;
'"$(printf '%s' "$taCtorAliases" | sed -E 's/(.*)/s#\\b\1[(]([0-9.]+n?|[[][^]]*[]])[)]#\1(makeCtorArg(\\1))#/')" \
"$f"
done
git diff --numstat -- test/built-ins/ | \
awk '{ print $NF }' | \
xargs grep -c '\bmakeCtorArg\b' | \
sed -n 's/:1$//p' | \
xargs sedi -E '
/makeCtorArg/,$ { s#^[}][)]#}, null, ["passthrough"])#; }
/makeCtorArg/ { s#, makeCtorArg##; s#[(]([a-zA-Z0-9_]+)[)] =>#\1 =>#; }
'
git diff --numstat -- test/built-ins/ | \
awk '{ print $NF }' | \
xargs grep -l '\bdefineProperty\b' | \
xargs sedi -E \
'/testWith[A-Za-z]*TypedArrayConstructors[(]/,$s#^[}][)]#}, null, ["passthrough"])#'
```
…rray method tests
…e contents
With `sedi` being a portable `sed -i`, e.g. `sed -i '' "$@"` on BSD and
`sed -i "$@"` on Linux:
```sh
git grep -l 'testWith[A-Za-z]*TypedArrayConstructors[(]' \
test/built-ins/TypedArray/prototype/{copyWithin,fill,reverse,set,sort} | \
xargs sedi -E \
'/testWith[A-Za-z]*TypedArrayConstructors[(]/,$s#^[}][)]#}, null, null, ["immutable"])#'
git grep -l 'testWith[A-Za-z]*TypedArrayConstructors[(]' \
test/built-ins/TypedArray/prototype | \
grep -E 'set-value-during-|predicate-call-changes-value|values-are-not-cached' | \
xargs sedi -E \
'/testWith[A-Za-z]*TypedArrayConstructors[(]/,$s#^[}][)]#}, null, null, ["immutable"])#'
```
…perties cannot be set when the backing buffer is immutable
…es are non-configurable and non-writable when the backing buffer is immutable
…es being defined are validated against descriptors for immutable properties
55e9cb7 to
795f516
Compare
| var value1 = sample[1]; | ||
| assert.compareArray([String(value0), String(value1)], ["42", "43"]); | ||
|
|
||
| verifyProperty(sample, "0", { |
There was a problem hiding this comment.
Note that verifyProperty() is based on various assumptions that don't work for typed arrays. For example, isWritable(new Uint8Array(8), "0") is false (incorrectly) and isWritable(new BigInt64Array(8), "0") even results in SyntaxError: Cannot convert unlikelyValue to a BigInt.
The current version of the test seems to be lucky to pass despite the usage of verifyProperty(), but it is probably better to avoid it (for typed arrays). Note that, for example, index-prop-desc.js that is kind of mutable version of this test avoids verifyProperty() for the mentioned reasons.
| includes: [testTypedArray.js, compareArray.js, propertyHelper.js] | ||
| ---*/ | ||
|
|
||
| testWithAllTypedArrayConstructors(function(TA, makeCtorArg) { |
There was a problem hiding this comment.
Other tests in the same directory do not test BigInt typed arrays i.e. use testWithTypedArrayConstructors instead of testWithAllTypedArrayConstructors (and contain a variant with testWithBigIntTypedArrayConstructors in BigInt sub-directory).
Includes #4545
Ref #4509