Value ArrayPrototype::method_map(ExecutionContext *ctx)
{
- ArrayObject *instance = ctx->thisObject.asArrayObject();
- if (!instance)
- ctx->throwUnimplemented(QStringLiteral("Array.prototype.map"));
+ Object *instance = __qmljs_to_object(ctx->thisObject, ctx).objectValue();
+
+ uint len = getLength(ctx, instance);
+
+ FunctionObject *callback = ctx->argument(0).asFunctionObject();
+ if (!callback)
+ __qmljs_throw_type_error(ctx);
- Value callback = ctx->argument(0);
Value thisArg = ctx->argument(1);
- ArrayObject *a = ctx->engine->newArrayObject(ctx)->asArrayObject();
- a->array.setLengthUnchecked(instance->array.length());
- for (quint32 k = 0; k < instance->array.length(); ++k) {
- Value v = instance->__get__(ctx, k);
- if (v.isUndefined())
+
+ ArrayObject *a = ctx->engine->newArrayObject(ctx);
+ a->array.setLength(len);
+
+ for (uint k = 0; k < len; ++k) {
+ bool exists;
+ Value v = instance->__get__(ctx, k, &exists);
+ if (!exists)
continue;
+
Value args[3];
args[0] = v;
args[1] = Value::fromDouble(k);
args[2] = ctx->thisObject;
- Value r = __qmljs_call_value(ctx, thisArg, callback, args, 3);
- a->array.set(k, r);
+ Value mapped = callback->call(ctx, thisArg, args, 3);
+ a->array.set(k, mapped);
}
return Value::fromObject(a);
}
Value ArrayPrototype::method_filter(ExecutionContext *ctx)
{
- ArrayObject *instance = ctx->thisObject.asArrayObject();
- if (!instance)
- ctx->throwUnimplemented(QStringLiteral("Array.prototype.filter"));
+ Object *instance = __qmljs_to_object(ctx->thisObject, ctx).objectValue();
+
+ uint len = getLength(ctx, instance);
+
+ FunctionObject *callback = ctx->argument(0).asFunctionObject();
+ if (!callback)
+ __qmljs_throw_type_error(ctx);
- Value callback = ctx->argument(0);
Value thisArg = ctx->argument(1);
- ArrayObject *a = ctx->engine->newArrayObject(ctx)->asArrayObject();
- for (quint32 k = 0; k < instance->array.length(); ++k) {
- Value v = instance->__get__(ctx, k);
- if (v.isUndefined())
+
+ ArrayObject *a = ctx->engine->newArrayObject(ctx);
+
+ uint to = 0;
+ for (uint k = 0; k < len; ++k) {
+ bool exists;
+ Value v = instance->__get__(ctx, k, &exists);
+ if (!exists)
continue;
+
Value args[3];
args[0] = v;
args[1] = Value::fromDouble(k);
args[2] = ctx->thisObject;
- Value r = __qmljs_call_value(ctx, thisArg, callback, args, 3);
- if (__qmljs_to_boolean(r, ctx)) {
- const uint index = a->array.length();
- a->array.set(index, v);
+ Value selected = callback->call(ctx, thisArg, args, 3);
+ if (__qmljs_to_boolean(selected, ctx)) {
+ a->array.set(to, v);
+ ++to;
}
}
return Value::fromObject(a);
15.4.4.18-1-10 failing
15.4.4.18-1-13 failing
15.4.4.18-5-17 failing
-15.4.4.19-1-1 failing
15.4.4.19-1-10 failing
-15.4.4.19-1-11 failing
-15.4.4.19-1-12 failing
15.4.4.19-1-13 failing
-15.4.4.19-1-14 failing
-15.4.4.19-1-15 failing
-15.4.4.19-1-2 failing
-15.4.4.19-1-3 failing
-15.4.4.19-1-4 failing
-15.4.4.19-1-5 failing
-15.4.4.19-1-6 failing
-15.4.4.19-1-7 failing
-15.4.4.19-1-8 failing
-15.4.4.19-1-9 failing
-15.4.4.19-2-1 failing
-15.4.4.19-2-10 failing
-15.4.4.19-2-11 failing
-15.4.4.19-2-12 failing
-15.4.4.19-2-13 failing
-15.4.4.19-2-14 failing
-15.4.4.19-2-15 failing
-15.4.4.19-2-17 failing
-15.4.4.19-2-18 failing
-15.4.4.19-2-19 failing
-15.4.4.19-2-3 failing
-15.4.4.19-2-5 failing
-15.4.4.19-2-6 failing
-15.4.4.19-2-7 failing
-15.4.4.19-2-8 failing
-15.4.4.19-2-9 failing
-15.4.4.19-3-1 failing
-15.4.4.19-3-10 failing
-15.4.4.19-3-11 failing
-15.4.4.19-3-12 failing
-15.4.4.19-3-13 failing
-15.4.4.19-3-14 failing
-15.4.4.19-3-15 failing
-15.4.4.19-3-16 failing
-15.4.4.19-3-17 failing
-15.4.4.19-3-18 failing
-15.4.4.19-3-19 failing
-15.4.4.19-3-2 failing
-15.4.4.19-3-20 failing
-15.4.4.19-3-21 failing
-15.4.4.19-3-22 failing
-15.4.4.19-3-23 failing
-15.4.4.19-3-24 failing
-15.4.4.19-3-25 failing
-15.4.4.19-3-28 failing
-15.4.4.19-3-29 failing
-15.4.4.19-3-3 failing
-15.4.4.19-3-4 failing
-15.4.4.19-3-5 failing
-15.4.4.19-3-6 failing
-15.4.4.19-3-7 failing
-15.4.4.19-3-8 failing
-15.4.4.19-3-9 failing
-15.4.4.19-4-1 failing
-15.4.4.19-4-15 failing
-15.4.4.19-4-3 failing
-15.4.4.19-4-4 failing
-15.4.4.19-4-5 failing
-15.4.4.19-4-6 failing
-15.4.4.19-4-7 failing
-15.4.4.19-4-8 failing
-15.4.4.19-4-9 failing
15.4.4.19-5-1 failing
15.4.4.19-5-17 failing
-15.4.4.19-8-1 failing
-15.4.4.19-8-5 failing
-15.4.4.19-8-8 failing
-15.4.4.19-8-b-10 failing
-15.4.4.19-8-b-12 failing
-15.4.4.19-8-b-15 failing
-15.4.4.19-8-b-2 failing
-15.4.4.19-8-b-3 failing
-15.4.4.19-8-b-4 failing
-15.4.4.19-8-b-6 failing
-15.4.4.19-8-b-8 failing
-15.4.4.19-8-c-i-1 failing
-15.4.4.19-8-c-i-11 failing
-15.4.4.19-8-c-i-13 failing
-15.4.4.19-8-c-i-15 failing
-15.4.4.19-8-c-i-17 failing
-15.4.4.19-8-c-i-18 failing
-15.4.4.19-8-c-i-19 failing
-15.4.4.19-8-c-i-20 failing
-15.4.4.19-8-c-i-21 failing
-15.4.4.19-8-c-i-22 failing
-15.4.4.19-8-c-i-23 failing
-15.4.4.19-8-c-i-25 failing
-15.4.4.19-8-c-i-26 failing
-15.4.4.19-8-c-i-27 failing
-15.4.4.19-8-c-i-29 failing
-15.4.4.19-8-c-i-3 failing
-15.4.4.19-8-c-i-30 failing
-15.4.4.19-8-c-i-5 failing
-15.4.4.19-8-c-i-7 failing
-15.4.4.19-8-c-i-9 failing
-15.4.4.19-8-c-ii-16 failing
-15.4.4.19-8-c-ii-17 failing
-15.4.4.19-8-c-ii-18 failing
-15.4.4.19-8-c-ii-19 failing
-15.4.4.19-8-c-ii-20 failing
-15.4.4.19-8-c-ii-21 failing
-15.4.4.19-8-c-ii-22 failing
-15.4.4.19-8-c-ii-23 failing
-15.4.4.19-8-c-ii-6 failing
-15.4.4.19-8-c-ii-8 failing
-15.4.4.19-8-c-iii-2 failing
-15.4.4.19-8-c-iii-3 failing
-15.4.4.19-8-c-iii-4 failing
-15.4.4.19-8-c-iii-5 failing
-15.4.4.19-9-10 failing
-15.4.4.19-9-11 failing
-15.4.4.19-9-12 failing
-15.4.4.19-9-3 failing
-15.4.4.19-9-5 failing
-15.4.4.19-9-6 failing
-15.4.4.19-9-7 failing
-15.4.4.19-9-8 failing
-15.4.4.19-9-9 failing
-15.4.4.20-1-1 failing
15.4.4.20-1-10 failing
-15.4.4.20-1-11 failing
-15.4.4.20-1-12 failing
15.4.4.20-1-13 failing
-15.4.4.20-1-14 failing
-15.4.4.20-1-15 failing
-15.4.4.20-1-2 failing
-15.4.4.20-1-3 failing
-15.4.4.20-1-4 failing
-15.4.4.20-1-5 failing
-15.4.4.20-1-6 failing
-15.4.4.20-1-7 failing
-15.4.4.20-1-8 failing
-15.4.4.20-1-9 failing
-15.4.4.20-10-3 failing
-15.4.4.20-2-1 failing
-15.4.4.20-2-10 failing
-15.4.4.20-2-11 failing
-15.4.4.20-2-12 failing
-15.4.4.20-2-13 failing
-15.4.4.20-2-14 failing
-15.4.4.20-2-15 failing
-15.4.4.20-2-17 failing
-15.4.4.20-2-18 failing
-15.4.4.20-2-19 failing
-15.4.4.20-2-3 failing
-15.4.4.20-2-5 failing
-15.4.4.20-2-6 failing
-15.4.4.20-2-7 failing
-15.4.4.20-2-8 failing
-15.4.4.20-2-9 failing
-15.4.4.20-3-1 failing
-15.4.4.20-3-10 failing
-15.4.4.20-3-11 failing
-15.4.4.20-3-12 failing
-15.4.4.20-3-13 failing
-15.4.4.20-3-14 failing
-15.4.4.20-3-15 failing
-15.4.4.20-3-16 failing
-15.4.4.20-3-17 failing
-15.4.4.20-3-18 failing
-15.4.4.20-3-19 failing
-15.4.4.20-3-2 failing
-15.4.4.20-3-20 failing
-15.4.4.20-3-21 failing
-15.4.4.20-3-22 failing
-15.4.4.20-3-23 failing
-15.4.4.20-3-24 failing
-15.4.4.20-3-25 failing
-15.4.4.20-3-28 failing
-15.4.4.20-3-29 failing
-15.4.4.20-3-3 failing
-15.4.4.20-3-4 failing
-15.4.4.20-3-5 failing
-15.4.4.20-3-6 failing
-15.4.4.20-3-7 failing
-15.4.4.20-3-8 failing
-15.4.4.20-3-9 failing
-15.4.4.20-4-1 failing
-15.4.4.20-4-15 failing
-15.4.4.20-4-3 failing
-15.4.4.20-4-4 failing
-15.4.4.20-4-5 failing
-15.4.4.20-4-6 failing
-15.4.4.20-4-7 failing
-15.4.4.20-4-8 failing
-15.4.4.20-4-9 failing
15.4.4.20-5-17 failing
-15.4.4.20-6-2 failing
-15.4.4.20-6-3 failing
-15.4.4.20-6-4 failing
-15.4.4.20-6-5 failing
-15.4.4.20-6-6 failing
-15.4.4.20-6-7 failing
-15.4.4.20-6-8 failing
-15.4.4.20-9-1 failing
-15.4.4.20-9-5 failing
-15.4.4.20-9-8 failing
-15.4.4.20-9-9 failing
-15.4.4.20-9-b-10 failing
-15.4.4.20-9-b-12 failing
-15.4.4.20-9-b-15 failing
-15.4.4.20-9-b-2 failing
-15.4.4.20-9-b-3 failing
-15.4.4.20-9-b-4 failing
-15.4.4.20-9-b-6 failing
-15.4.4.20-9-b-8 failing
-15.4.4.20-9-c-i-1 failing
-15.4.4.20-9-c-i-11 failing
-15.4.4.20-9-c-i-13 failing
-15.4.4.20-9-c-i-15 failing
-15.4.4.20-9-c-i-17 failing
-15.4.4.20-9-c-i-18 failing
-15.4.4.20-9-c-i-19 failing
-15.4.4.20-9-c-i-20 failing
-15.4.4.20-9-c-i-21 failing
-15.4.4.20-9-c-i-22 failing
-15.4.4.20-9-c-i-23 failing
-15.4.4.20-9-c-i-25 failing
-15.4.4.20-9-c-i-26 failing
-15.4.4.20-9-c-i-27 failing
-15.4.4.20-9-c-i-29 failing
-15.4.4.20-9-c-i-3 failing
-15.4.4.20-9-c-i-30 failing
-15.4.4.20-9-c-i-5 failing
-15.4.4.20-9-c-i-7 failing
-15.4.4.20-9-c-i-9 failing
-15.4.4.20-9-c-ii-16 failing
-15.4.4.20-9-c-ii-17 failing
-15.4.4.20-9-c-ii-18 failing
-15.4.4.20-9-c-ii-19 failing
-15.4.4.20-9-c-ii-20 failing
-15.4.4.20-9-c-ii-21 failing
-15.4.4.20-9-c-ii-22 failing
-15.4.4.20-9-c-ii-23 failing
-15.4.4.20-9-c-ii-6 failing
-15.4.4.20-9-c-ii-7 failing
-15.4.4.20-9-c-ii-8 failing
-15.4.4.20-9-c-iii-1-1 failing
-15.4.4.20-9-c-iii-1-2 failing
-15.4.4.20-9-c-iii-1-3 failing
-15.4.4.20-9-c-iii-1-4 failing
-15.4.4.20-9-c-iii-2 failing
15.4.4.20-9-c-iii-24 failing
-15.4.4.20-9-c-iii-29 failing
-15.4.4.20-9-c-iii-3 failing
-15.4.4.20-9-c-iii-4 failing
-15.4.4.20-9-c-iii-5 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.17-7-c-i-6 failing
# Regressions introduced with https://codereview.qt-project.org/#change,45044
-15.4.4.19-8-b-1 failing
-15.4.4.20-9-b-1 failing
15.4.4.21-8-b-iii-1-6 failing
-15.4.4.22-9-9 failing
+15.4.4.22-9-9 failing
\ No newline at end of file