Преглед на файлове

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.
Linus Groh преди 4 години
родител
ревизия
6de4f1fcb3

+ 1 - 1
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());

+ 1 - 1
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());

+ 1 - 1
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 '{}')")                                                                      \

+ 1 - 1
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");
         });
     });
 });