Value ArrayPrototype::method_reduce(ExecutionContext *ctx)
{
- ArrayObject *instance = ctx->thisObject.asArrayObject();
- if (!instance)
- ctx->throwUnimplemented(QStringLiteral("Array.prototype.reduce"));
-
- Value callback = ctx->argument(0);
- Value initialValue = ctx->argument(1);
- Value acc = initialValue;
- for (quint32 k = 0; k < instance->array.length(); ++k) {
- Value v = instance->__get__(ctx, k);
- if (v.isUndefined())
- continue;
+ Object *instance = __qmljs_to_object(ctx->thisObject, ctx).objectValue();
- if (acc.isUndefined()) {
- acc = v;
- continue;
+ uint len = getLength(ctx, instance);
+
+ FunctionObject *callback = ctx->argument(0).asFunctionObject();
+ if (!callback)
+ __qmljs_throw_type_error(ctx);
+
+ uint k = 0;
+ Value acc;
+ if (ctx->argumentCount > 1) {
+ acc = ctx->argument(1);
+ } else {
+ bool kPresent = false;
+ while (k < len && !kPresent) {
+ Value v = instance->__get__(ctx, k, &kPresent);
+ if (kPresent)
+ acc = v;
+ ++k;
}
+ if (!kPresent)
+ __qmljs_throw_type_error(ctx);
+ }
- Value args[4];
- args[0] = acc;
- args[1] = v;
- args[2] = Value::fromDouble(k);
- args[3] = ctx->thisObject;
- Value r = __qmljs_call_value(ctx, Value::undefinedValue(), callback, args, 4);
- acc = r;
+ while (k < len) {
+ bool kPresent;
+ Value v = instance->__get__(ctx, k, &kPresent);
+ if (kPresent) {
+ Value args[4];
+ args[0] = acc;
+ args[1] = v;
+ args[2] = Value::fromDouble(k);
+ args[3] = ctx->thisObject;
+ acc = callback->call(ctx, Value::undefinedValue(), args, 4);
+ }
+ ++k;
}
return acc;
}
Value ArrayPrototype::method_reduceRight(ExecutionContext *ctx)
{
- ArrayObject *instance = ctx->thisObject.asArrayObject();
- if (!instance)
- ctx->throwUnimplemented(QStringLiteral("Array.prototype.reduceRight"));
-
- Value callback = ctx->argument(0);
- Value initialValue = ctx->argument(1);
- Value acc = initialValue;
- for (int k = instance->array.length() - 1; k != -1; --k) {
- Value v = instance->__get__(ctx, k);
- if (v.isUndefined())
- continue;
+ Object *instance = __qmljs_to_object(ctx->thisObject, ctx).objectValue();
- if (acc.isUndefined()) {
- acc = v;
- continue;
+ uint len = getLength(ctx, instance);
+
+ FunctionObject *callback = ctx->argument(0).asFunctionObject();
+ if (!callback)
+ __qmljs_throw_type_error(ctx);
+
+ if (len == 0) {
+ if (ctx->argumentCount == 1)
+ __qmljs_throw_type_error(ctx);
+ return ctx->argument(1);
+ }
+
+ uint k = len;
+ Value acc;
+ if (ctx->argumentCount > 1) {
+ acc = ctx->argument(1);
+ } else {
+ bool kPresent = false;
+ while (k > 0 && !kPresent) {
+ Value v = instance->__get__(ctx, k - 1, &kPresent);
+ if (kPresent)
+ acc = v;
+ --k;
}
+ if (!kPresent)
+ __qmljs_throw_type_error(ctx);
+ }
- Value args[4];
- args[0] = acc;
- args[1] = v;
- args[2] = Value::fromDouble(k);
- args[3] = ctx->thisObject;
- Value r = __qmljs_call_value(ctx, Value::undefinedValue(), callback, args, 4);
- acc = r;
+ while (k > 0) {
+ bool kPresent;
+ Value v = instance->__get__(ctx, k - 1, &kPresent);
+ if (kPresent) {
+ Value args[4];
+ args[0] = acc;
+ args[1] = v;
+ args[2] = Value::fromDouble(k - 1);
+ args[3] = ctx->thisObject;
+ acc = callback->call(ctx, Value::undefinedValue(), args, 4);
+ }
+ --k;
}
return acc;
}
15.4.4.20-1-13 failing
15.4.4.20-5-17 failing
15.4.4.20-9-c-iii-24 failing
-15.4.4.21-1-1 failing
15.4.4.21-1-10 failing
-15.4.4.21-1-11 failing
-15.4.4.21-1-12 failing
15.4.4.21-1-13 failing
-15.4.4.21-1-14 failing
-15.4.4.21-1-15 failing
-15.4.4.21-1-2 failing
-15.4.4.21-1-3 failing
-15.4.4.21-1-4 failing
-15.4.4.21-1-5 failing
-15.4.4.21-1-6 failing
-15.4.4.21-1-7 failing
-15.4.4.21-1-8 failing
-15.4.4.21-1-9 failing
-15.4.4.21-10-3 failing
-15.4.4.21-10-4 failing
-15.4.4.21-10-6 failing
-15.4.4.21-10-7 failing
-15.4.4.21-2-1 failing
-15.4.4.21-2-10 failing
-15.4.4.21-2-11 failing
-15.4.4.21-2-12 failing
-15.4.4.21-2-13 failing
-15.4.4.21-2-14 failing
-15.4.4.21-2-15 failing
-15.4.4.21-2-17 failing
-15.4.4.21-2-18 failing
-15.4.4.21-2-19 failing
-15.4.4.21-2-3 failing
-15.4.4.21-2-5 failing
-15.4.4.21-2-6 failing
-15.4.4.21-2-7 failing
-15.4.4.21-2-8 failing
-15.4.4.21-2-9 failing
-15.4.4.21-3-1 failing
-15.4.4.21-3-10 failing
-15.4.4.21-3-11 failing
-15.4.4.21-3-12 failing
-15.4.4.21-3-13 failing
-15.4.4.21-3-14 failing
-15.4.4.21-3-15 failing
-15.4.4.21-3-16 failing
-15.4.4.21-3-17 failing
-15.4.4.21-3-18 failing
-15.4.4.21-3-19 failing
-15.4.4.21-3-2 failing
-15.4.4.21-3-20 failing
-15.4.4.21-3-21 failing
-15.4.4.21-3-22 failing
-15.4.4.21-3-23 failing
-15.4.4.21-3-24 failing
-15.4.4.21-3-25 failing
-15.4.4.21-3-28 failing
-15.4.4.21-3-29 failing
-15.4.4.21-3-3 failing
-15.4.4.21-3-4 failing
-15.4.4.21-3-5 failing
-15.4.4.21-3-6 failing
-15.4.4.21-3-7 failing
-15.4.4.21-3-8 failing
-15.4.4.21-3-9 failing
-15.4.4.21-4-1 failing
-15.4.4.21-4-15 failing
-15.4.4.21-4-3 failing
-15.4.4.21-4-4 failing
-15.4.4.21-4-5 failing
-15.4.4.21-4-6 failing
-15.4.4.21-4-7 failing
-15.4.4.21-4-8 failing
-15.4.4.21-4-9 failing
-15.4.4.21-5-1 failing
-15.4.4.21-5-10 failing
-15.4.4.21-5-11 failing
-15.4.4.21-5-2 failing
-15.4.4.21-5-3 failing
-15.4.4.21-5-4 failing
-15.4.4.21-5-5 failing
-15.4.4.21-5-6 failing
-15.4.4.21-5-7 failing
-15.4.4.21-5-8 failing
-15.4.4.21-7-2 failing
-15.4.4.21-7-3 failing
-15.4.4.21-7-4 failing
-15.4.4.21-7-5 failing
-15.4.4.21-7-6 failing
-15.4.4.21-7-7 failing
-15.4.4.21-7-8 failing
-15.4.4.21-7-9 failing
-15.4.4.21-8-b-2 failing
-15.4.4.21-8-b-ii-1 failing
-15.4.4.21-8-b-ii-2 failing
-15.4.4.21-8-b-iii-1-1 failing
-15.4.4.21-8-b-iii-1-11 failing
-15.4.4.21-8-b-iii-1-13 failing
-15.4.4.21-8-b-iii-1-15 failing
-15.4.4.21-8-b-iii-1-17 failing
-15.4.4.21-8-b-iii-1-18 failing
-15.4.4.21-8-b-iii-1-19 failing
-15.4.4.21-8-b-iii-1-20 failing
-15.4.4.21-8-b-iii-1-21 failing
-15.4.4.21-8-b-iii-1-22 failing
-15.4.4.21-8-b-iii-1-23 failing
-15.4.4.21-8-b-iii-1-25 failing
-15.4.4.21-8-b-iii-1-26 failing
-15.4.4.21-8-b-iii-1-27 failing
-15.4.4.21-8-b-iii-1-28 failing
-15.4.4.21-8-b-iii-1-29 failing
-15.4.4.21-8-b-iii-1-3 failing
-15.4.4.21-8-b-iii-1-31 failing
-15.4.4.21-8-b-iii-1-32 failing
-15.4.4.21-8-b-iii-1-5 failing
-15.4.4.21-8-b-iii-1-7 failing
-15.4.4.21-8-b-iii-1-9 failing
-15.4.4.21-8-c-1 failing
-15.4.4.21-8-c-2 failing
-15.4.4.21-8-c-3 failing
-15.4.4.21-8-c-5 failing
-15.4.4.21-8-c-6 failing
-15.4.4.21-9-1 failing
-15.4.4.21-9-10 failing
-15.4.4.21-9-8 failing
-15.4.4.21-9-b-10 failing
-15.4.4.21-9-b-12 failing
-15.4.4.21-9-b-15 failing
-15.4.4.21-9-b-16 failing
-15.4.4.21-9-b-17 failing
-15.4.4.21-9-b-18 failing
-15.4.4.21-9-b-19 failing
-15.4.4.21-9-b-2 failing
-15.4.4.21-9-b-20 failing
-15.4.4.21-9-b-21 failing
-15.4.4.21-9-b-23 failing
-15.4.4.21-9-b-25 failing
-15.4.4.21-9-b-26 failing
-15.4.4.21-9-b-28 failing
-15.4.4.21-9-b-3 failing
-15.4.4.21-9-b-4 failing
-15.4.4.21-9-b-6 failing
-15.4.4.21-9-b-8 failing
-15.4.4.21-9-c-1 failing
-15.4.4.21-9-c-i-1 failing
-15.4.4.21-9-c-i-10 failing
-15.4.4.21-9-c-i-11 failing
-15.4.4.21-9-c-i-12 failing
-15.4.4.21-9-c-i-13 failing
-15.4.4.21-9-c-i-14 failing
-15.4.4.21-9-c-i-15 failing
-15.4.4.21-9-c-i-16 failing
-15.4.4.21-9-c-i-17 failing
-15.4.4.21-9-c-i-18 failing
-15.4.4.21-9-c-i-19 failing
-15.4.4.21-9-c-i-2 failing
-15.4.4.21-9-c-i-20 failing
-15.4.4.21-9-c-i-21 failing
-15.4.4.21-9-c-i-22 failing
-15.4.4.21-9-c-i-23 failing
-15.4.4.21-9-c-i-25 failing
-15.4.4.21-9-c-i-26 failing
-15.4.4.21-9-c-i-27 failing
-15.4.4.21-9-c-i-28 failing
-15.4.4.21-9-c-i-29 failing
-15.4.4.21-9-c-i-3 failing
-15.4.4.22-10-3 failing
-15.4.4.22-10-4 failing
-15.4.4.22-10-6 failing
-15.4.4.22-10-7 failing
-15.4.4.22-10-8 failing
-15.4.4.22-2-1 failing
-15.4.4.22-2-10 failing
-15.4.4.22-2-11 failing
-15.4.4.22-2-12 failing
-15.4.4.22-2-13 failing
-15.4.4.22-2-14 failing
-15.4.4.22-2-15 failing
-15.4.4.22-2-17 failing
-15.4.4.22-2-18 failing
-15.4.4.22-2-19 failing
-15.4.4.22-2-3 failing
-15.4.4.22-2-5 failing
-15.4.4.22-2-6 failing
-15.4.4.22-2-7 failing
-15.4.4.22-2-8 failing
-15.4.4.22-2-9 failing
-15.4.4.22-3-1 failing
-15.4.4.22-3-10 failing
-15.4.4.22-3-11 failing
-15.4.4.22-3-12 failing
-15.4.4.22-3-13 failing
-15.4.4.22-3-14 failing
-15.4.4.22-3-15 failing
-15.4.4.22-3-16 failing
-15.4.4.22-3-17 failing
-15.4.4.22-3-18 failing
-15.4.4.22-3-19 failing
-15.4.4.22-3-2 failing
-15.4.4.22-3-20 failing
-15.4.4.22-3-21 failing
-15.4.4.22-3-22 failing
-15.4.4.22-3-23 failing
-15.4.4.22-3-24 failing
-15.4.4.22-3-25 failing
-15.4.4.22-3-28 failing
-15.4.4.22-3-29 failing
-15.4.4.22-3-3 failing
-15.4.4.22-3-4 failing
-15.4.4.22-3-5 failing
-15.4.4.22-3-6 failing
-15.4.4.22-3-7 failing
-15.4.4.22-3-8 failing
-15.4.4.22-3-9 failing
-15.4.4.22-4-1 failing
-15.4.4.22-4-15 failing
-15.4.4.22-4-3 failing
-15.4.4.22-4-4 failing
-15.4.4.22-4-5 failing
-15.4.4.22-4-6 failing
-15.4.4.22-4-7 failing
-15.4.4.22-4-8 failing
-15.4.4.22-4-9 failing
-15.4.4.21-9-c-i-30 failing
-15.4.4.21-9-c-i-31 failing
-15.4.4.21-9-c-i-32 failing
-15.4.4.21-9-c-i-4 failing
-15.4.4.21-9-c-i-5 failing
15.4.4.21-9-c-i-6 failing
-15.4.4.21-9-c-i-7 failing
-15.4.4.21-9-c-i-8 failing
-15.4.4.21-9-c-i-9 failing
-15.4.4.21-9-c-ii-16 failing
-15.4.4.21-9-c-ii-18 failing
-15.4.4.21-9-c-ii-20 failing
-15.4.4.21-9-c-ii-21 failing
-15.4.4.21-9-c-ii-22 failing
-15.4.4.21-9-c-ii-23 failing
-15.4.4.21-9-c-ii-24 failing
-15.4.4.21-9-c-ii-25 failing
-15.4.4.21-9-c-ii-26 failing
-15.4.4.21-9-c-ii-27 failing
-15.4.4.21-9-c-ii-28 failing
-15.4.4.21-9-c-ii-29 failing
-15.4.4.21-9-c-ii-30 failing
-15.4.4.21-9-c-ii-31 failing
-15.4.4.21-9-c-ii-32 failing
15.4.4.21-9-c-ii-33 failing
-15.4.4.21-9-c-ii-34 failing
-15.4.4.21-9-c-ii-35 failing
-15.4.4.21-9-c-ii-37 failing
-15.4.4.21-9-c-ii-4 failing
-15.4.4.21-9-c-ii-5 failing
-15.4.4.21-9-c-ii-8 failing
-15.4.4.21-9-c-ii-9 failing
-15.4.4.22-1-1 failing
15.4.4.22-1-10 failing
-15.4.4.22-1-11 failing
-15.4.4.22-1-12 failing
15.4.4.22-1-13 failing
-15.4.4.22-1-14 failing
-15.4.4.22-1-15 failing
-15.4.4.22-1-2 failing
-15.4.4.22-1-3 failing
-15.4.4.22-1-4 failing
-15.4.4.22-1-5 failing
-15.4.4.22-1-6 failing
-15.4.4.22-1-7 failing
-15.4.4.22-1-8 failing
-15.4.4.22-1-9 failing
-15.4.4.22-5-1 failing
-15.4.4.22-5-10 failing
-15.4.4.22-5-11 failing
-15.4.4.22-5-2 failing
-15.4.4.22-5-3 failing
-15.4.4.22-5-4 failing
-15.4.4.22-5-5 failing
-15.4.4.22-5-6 failing
-15.4.4.22-5-7 failing
-15.4.4.22-5-8 failing
-15.4.4.22-7-2 failing
-15.4.4.22-7-3 failing
-15.4.4.22-7-4 failing
-15.4.4.22-7-5 failing
-15.4.4.22-7-6 failing
-15.4.4.22-7-7 failing
-15.4.4.22-7-8 failing
-15.4.4.22-7-9 failing
-15.4.4.22-8-b-ii-1 failing
-15.4.4.22-8-b-ii-2 failing
-15.4.4.22-8-b-iii-1-1 failing
-15.4.4.22-8-b-iii-1-11 failing
-15.4.4.22-8-b-iii-1-13 failing
-15.4.4.22-8-b-iii-1-15 failing
-15.4.4.22-8-b-iii-1-17 failing
-15.4.4.22-8-b-iii-1-18 failing
-15.4.4.22-8-b-iii-1-19 failing
-15.4.4.22-8-b-iii-1-20 failing
-15.4.4.22-8-b-iii-1-21 failing
-15.4.4.22-8-b-iii-1-22 failing
-15.4.4.22-8-b-iii-1-23 failing
-15.4.4.22-8-b-iii-1-25 failing
-15.4.4.22-8-b-iii-1-26 failing
-15.4.4.22-8-b-iii-1-27 failing
-15.4.4.22-8-b-iii-1-28 failing
-15.4.4.22-8-b-iii-1-29 failing
-15.4.4.22-8-b-iii-1-3 failing
-15.4.4.22-8-b-iii-1-31 failing
-15.4.4.22-8-b-iii-1-32 failing
-15.4.4.22-8-b-iii-1-5 failing
-15.4.4.22-8-b-iii-1-7 failing
-15.4.4.22-8-b-iii-1-9 failing
-15.4.4.22-8-c-1 failing
-15.4.4.22-8-c-2 failing
-15.4.4.22-8-c-3 failing
-15.4.4.22-8-c-5 failing
-15.4.4.22-8-c-6 failing
-15.4.4.22-9-8 failing
-15.4.4.22-9-b-10 failing
-15.4.4.22-9-b-12 failing
-15.4.4.22-9-b-17 failing
-15.4.4.22-9-b-18 failing
-15.4.4.22-9-b-19 failing
-15.4.4.22-9-b-2 failing
-15.4.4.22-9-b-20 failing
-15.4.4.22-9-b-21 failing
-15.4.4.22-9-b-23 failing
-15.4.4.22-9-b-25 failing
-15.4.4.22-9-b-26 failing
-15.4.4.22-9-b-28 failing
-15.4.4.22-9-b-29 failing
-15.4.4.22-9-b-3 failing
-15.4.4.22-9-b-4 failing
-15.4.4.22-9-b-6 failing
-15.4.4.22-9-b-8 failing
-15.4.4.22-9-c-1 failing
-15.4.4.22-9-c-i-1 failing
-15.4.4.22-9-c-i-10 failing
-15.4.4.22-9-c-i-11 failing
-15.4.4.22-9-c-i-12 failing
-15.4.4.22-9-c-i-13 failing
-15.4.4.22-9-c-i-14 failing
-15.4.4.22-9-c-i-15 failing
-15.4.4.22-9-c-i-16 failing
-15.4.4.22-9-c-i-17 failing
-15.4.4.22-9-c-i-18 failing
-15.4.4.22-9-c-i-19 failing
-15.4.4.22-9-c-i-2 failing
-15.4.4.22-9-c-i-20 failing
-15.4.4.22-9-c-i-21 failing
-15.4.4.22-9-c-i-22 failing
-15.4.4.22-9-c-i-23 failing
-15.4.4.22-9-c-i-25 failing
-15.4.4.22-9-c-i-26 failing
-15.4.4.22-9-c-i-27 failing
-15.4.4.22-9-c-i-28 failing
-15.4.4.22-9-c-i-29 failing
-15.4.4.22-9-c-i-3 failing
-15.4.4.22-9-c-i-30 failing
-15.4.4.22-9-c-i-31 failing
-15.4.4.22-9-c-i-32 failing
-15.4.4.22-9-c-i-4 failing
-15.4.4.22-9-c-i-5 failing
15.4.4.22-9-c-i-6 failing
-15.4.4.22-9-c-i-7 failing
-15.4.4.22-9-c-i-8 failing
-15.4.4.22-9-c-i-9 failing
-15.4.4.22-9-c-ii-16 failing
-15.4.4.22-9-c-ii-20 failing
-15.4.4.22-9-c-ii-21 failing
-15.4.4.22-9-c-ii-22 failing
-15.4.4.22-9-c-ii-23 failing
-15.4.4.22-9-c-ii-24 failing
-15.4.4.22-9-c-ii-25 failing
-15.4.4.22-9-c-ii-26 failing
-15.4.4.22-9-c-ii-27 failing
-15.4.4.22-9-c-ii-28 failing
-15.4.4.22-9-c-ii-29 failing
-15.4.4.22-9-c-ii-30 failing
-15.4.4.22-9-c-ii-31 failing
-15.4.4.22-9-c-ii-32 failing
15.4.4.22-9-c-ii-33 failing
-15.4.4.22-9-c-ii-34 failing
-15.4.4.22-9-c-ii-35 failing
-15.4.4.22-9-c-ii-37 failing
-15.4.4.22-9-c-ii-4 failing
-15.4.4.22-9-c-ii-5 failing
-15.4.4.22-9-c-ii-8 failing
S15.4.4.3_A1_T1 failing
S15.4.4.3_A3_T1 failing
15.4.4.4-5-b-iii-3-b-1 failing
15.4.4.17-7-c-i-6 failing
# Regressions introduced with https://codereview.qt-project.org/#change,45044
-15.4.4.21-8-b-iii-1-6 failing
-15.4.4.22-9-9 failing
\ No newline at end of file
+15.4.4.21-8-b-iii-1-6 failing
\ No newline at end of file