diff options
author | Linus Groh <mail@linusgroh.de> | 2020-12-02 12:41:51 +0000 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-12-02 23:49:00 +0100 |
commit | 6de4f1fcb382fa7c9b2d2c4c3dc69085575cbe82 (patch) | |
tree | 81b19950bdb28fc7fc1e876c548ea5a5ab03c762 /Libraries | |
parent | 5e08ae4e14009d40ecd5f5428c6801eaeeffd125 (diff) | |
download | serenity-6de4f1fcb382fa7c9b2d2c4c3dc69085575cbe82.zip |
LibJS: Add generic InvalidLength error type
We have multiple array types now, so ArrayInvalidLength has been
replaced with a generic InvalidLength.
Also fixes a small issue in the Array constructor, it should throw
RangeError for invalid lengths, not TypeError.
Diffstat (limited to 'Libraries')
-rw-r--r-- | Libraries/LibJS/Runtime/Array.cpp | 2 | ||||
-rw-r--r-- | Libraries/LibJS/Runtime/ArrayConstructor.cpp | 2 | ||||
-rw-r--r-- | Libraries/LibJS/Runtime/ErrorTypes.h | 2 | ||||
-rw-r--r-- | Libraries/LibJS/Tests/builtins/Array/Array.js | 2 |
4 files changed, 4 insertions, 4 deletions
diff --git a/Libraries/LibJS/Runtime/Array.cpp b/Libraries/LibJS/Runtime/Array.cpp index f881139f62..6e1f5f5300 100644 --- a/Libraries/LibJS/Runtime/Array.cpp +++ b/Libraries/LibJS/Runtime/Array.cpp @@ -77,7 +77,7 @@ JS_DEFINE_NATIVE_SETTER(Array::length_setter) if (vm.exception()) return; if (length.is_nan() || length.is_infinity() || length.as_double() < 0) { - vm.throw_exception<RangeError>(global_object, ErrorType::ArrayInvalidLength); + vm.throw_exception<RangeError>(global_object, ErrorType::InvalidLength, "array"); return; } array->indexed_properties().set_array_like_size(length.as_double()); diff --git a/Libraries/LibJS/Runtime/ArrayConstructor.cpp b/Libraries/LibJS/Runtime/ArrayConstructor.cpp index 3eb3407cbc..153e2a4fe2 100644 --- a/Libraries/LibJS/Runtime/ArrayConstructor.cpp +++ b/Libraries/LibJS/Runtime/ArrayConstructor.cpp @@ -67,7 +67,7 @@ Value ArrayConstructor::call() if (vm().argument_count() == 1 && vm().argument(0).is_number()) { auto array_length_value = vm().argument(0); if (!array_length_value.is_integer() || array_length_value.as_i32() < 0) { - vm().throw_exception<TypeError>(global_object(), ErrorType::ArrayInvalidLength); + vm().throw_exception<RangeError>(global_object(), ErrorType::InvalidLength, "array"); return {}; } auto* array = Array::create(global_object()); diff --git a/Libraries/LibJS/Runtime/ErrorTypes.h b/Libraries/LibJS/Runtime/ErrorTypes.h index dd83ac3058..a345d1bd4e 100644 --- a/Libraries/LibJS/Runtime/ErrorTypes.h +++ b/Libraries/LibJS/Runtime/ErrorTypes.h @@ -27,7 +27,6 @@ #pragma once #define JS_ENUMERATE_ERROR_TYPES(M) \ - M(ArrayInvalidLength, "Invalid array length") \ M(ArrayMaxSize, "Maximum array size exceeded") \ M(ArrayPrototypeOneArg, "Array.prototype.{}() requires at least one argument") \ M(AccessorBadField, "Accessor descriptor's '{}' field must be a function or undefined") \ @@ -48,6 +47,7 @@ M(InstanceOfOperatorBadPrototype, "'prototype' property of {} is not an object") \ M(InvalidAssignToConst, "Invalid assignment to const variable") \ M(InvalidLeftHandAssignment, "Invalid left-hand side in assignment") \ + M(InvalidLength, "Invalid {} length") \ M(InvalidRadix, "Radix must be an integer no less than 2, and no greater than 36") \ M(IsNotA, "{} is not a {}") \ M(IsNotAEvaluatedFrom, "{} is not a {} (evaluated from '{}')") \ diff --git a/Libraries/LibJS/Tests/builtins/Array/Array.js b/Libraries/LibJS/Tests/builtins/Array/Array.js index 1ba2c400b1..652e366d2f 100644 --- a/Libraries/LibJS/Tests/builtins/Array/Array.js +++ b/Libraries/LibJS/Tests/builtins/Array/Array.js @@ -9,7 +9,7 @@ describe("errors", () => { [-1, -100, -0.1, 0.1, 1.23, Infinity, -Infinity, NaN].forEach(value => { expect(() => { new Array(value); - }).toThrowWithMessage(TypeError, "Invalid array length"); + }).toThrowWithMessage(RangeError, "Invalid array length"); }); }); }); |