diff options
| author | Ulf Hermann <[email protected]> | 2024-05-23 11:27:27 +0200 |
|---|---|---|
| committer | Ulf Hermann <[email protected]> | 2024-05-25 08:11:34 +0200 |
| commit | 2818506ba357e7912af20b5a8d24607e38f2dfb4 (patch) | |
| tree | 52c1d5f1c2564fec6c94351b51e010cd49440150 | |
| parent | ed61e7c6d2ae80935b02c6eedc293e3b875520d7 (diff) | |
TypedArray: Preserve exact NaN bit pattern on fill()
... as required by ECMAScript.
Pick-to: 6.7 6.5
Change-Id: I31bc7e6a87e404a8e6d314c99f163f82208e13a1
Reviewed-by: Fabian Kosmale <[email protected]>
| -rw-r--r-- | src/qml/jsruntime/qv4typedarray.cpp | 10 | ||||
| -rw-r--r-- | tests/auto/qml/ecmascripttests/TestExpectations | 1 |
2 files changed, 8 insertions, 3 deletions
diff --git a/src/qml/jsruntime/qv4typedarray.cpp b/src/qml/jsruntime/qv4typedarray.cpp index ca7d75e0e0..9c752f43bb 100644 --- a/src/qml/jsruntime/qv4typedarray.cpp +++ b/src/qml/jsruntime/qv4typedarray.cpp @@ -762,8 +762,6 @@ ReturnedValue IntrinsicTypedArrayPrototype::method_fill(const FunctionObject *b, fin = static_cast<uint>(std::min(relativeEnd, dlen)); } - double val = argc ? argv[0].toNumber() : std::numeric_limits<double>::quiet_NaN(); - Value value = Value::fromDouble(val); if (scope.hasException() || v->hasDetachedArrayData()) return scope.engine->throwTypeError(); @@ -771,6 +769,14 @@ ReturnedValue IntrinsicTypedArrayPrototype::method_fill(const FunctionObject *b, uint bytesPerElement = v->bytesPerElement(); uint byteOffset = v->byteOffset(); + Value value; + if (!argc) + value.setDouble(std::numeric_limits<double>::quiet_NaN()); + else if (argv[0].isNumber()) + value = argv[0]; + else + value.setDouble(argv[0].toNumber()); + while (k < fin) { v->d()->type->write(data + byteOffset + k * bytesPerElement, value); k++; diff --git a/tests/auto/qml/ecmascripttests/TestExpectations b/tests/auto/qml/ecmascripttests/TestExpectations index 2e96de7819..79e550eafb 100644 --- a/tests/auto/qml/ecmascripttests/TestExpectations +++ b/tests/auto/qml/ecmascripttests/TestExpectations @@ -254,7 +254,6 @@ built-ins/String/prototype/toLocaleLowerCase/special_casing_conditional.js fails built-ins/String/prototype/toLowerCase/Final_Sigma_U180E.js fails built-ins/String/prototype/toLowerCase/special_casing_conditional.js fails built-ins/TypedArray/prototype/constructor.js fails -built-ins/TypedArray/prototype/fill/fill-values-conversion-operations-consistent-nan.js fails built-ins/TypedArray/prototype/slice/bit-precision.js fails built-ins/TypedArray/prototype/sort/arraylength-internal.js fails built-ins/TypedArray/prototype/sort/comparefn-call-throws.js fails |
