summaryrefslogtreecommitdiff
path: root/Libraries
diff options
context:
space:
mode:
authorLinus Groh <mail@linusgroh.de>2020-12-02 12:41:51 +0000
committerAndreas Kling <kling@serenityos.org>2020-12-02 23:49:00 +0100
commit6de4f1fcb382fa7c9b2d2c4c3dc69085575cbe82 (patch)
tree81b19950bdb28fc7fc1e876c548ea5a5ab03c762 /Libraries
parent5e08ae4e14009d40ecd5f5428c6801eaeeffd125 (diff)
downloadserenity-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.cpp2
-rw-r--r--Libraries/LibJS/Runtime/ArrayConstructor.cpp2
-rw-r--r--Libraries/LibJS/Runtime/ErrorTypes.h2
-rw-r--r--Libraries/LibJS/Tests/builtins/Array/Array.js2
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");
});
});
});