Skip to content

Commit

Permalink
Implement Iterator.prototype.every
Browse files Browse the repository at this point in the history
  • Loading branch information
saghul committed Oct 24, 2024
1 parent caa1bf5 commit b9a22f9
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 53 deletions.
52 changes: 51 additions & 1 deletion quickjs.c
Original file line number Diff line number Diff line change
Expand Up @@ -39916,7 +39916,57 @@ static JSValue js_iterator_proto_drop(JSContext *ctx, JSValue this_val,
static JSValue js_iterator_proto_every(JSContext *ctx, JSValue this_val,
int argc, JSValue *argv)
{
return JS_ThrowInternalError(ctx, "TODO implement Iterator.prototype.every");
JSValue item, method, ret, func, index_val, r;
JSValue args[2];
int64_t idx;
BOOL done;

if (!JS_IsObject(this_val))
return JS_ThrowTypeError(ctx, "Iterator.prototype.every called on non-object");
if (check_function(ctx, argv[0]))
return JS_EXCEPTION;
func = js_dup(argv[0]);
method = JS_GetProperty(ctx, this_val, JS_ATOM_next);
if (JS_IsException(method))
goto exception;
r = JS_TRUE;
for (idx = 0; /*empty*/; idx++) {
item = JS_IteratorNext(ctx, this_val, method, 0, NULL, &done);
if (JS_IsException(item))
goto exception;
if (done)
break;
index_val = JS_NewInt64(ctx, idx);
if (JS_IsException(index_val)) {
JS_FreeValue(ctx, item);
goto exception;
}
args[0] = item;
args[1] = index_val;
ret = JS_Call(ctx, func, JS_UNDEFINED, countof(args), args);
JS_FreeValue(ctx, item);
JS_FreeValue(ctx, index_val);
if (JS_IsException(ret))
goto exception;
if (!JS_ToBoolFree(ctx, ret)) {
if (JS_IteratorClose(ctx, this_val, FALSE) < 0)
r = JS_EXCEPTION;
else
r = JS_FALSE;
break;
}
index_val = JS_UNDEFINED;
ret = JS_UNDEFINED;
item = JS_UNDEFINED;
}
JS_FreeValue(ctx, func);
JS_FreeValue(ctx, method);
return r;
exception:
JS_IteratorClose(ctx, this_val, TRUE);
JS_FreeValue(ctx, func);
JS_FreeValue(ctx, method);
return JS_EXCEPTION;
}

static JSValue js_iterator_proto_filter(JSContext *ctx, JSValue this_val,
Expand Down
52 changes: 0 additions & 52 deletions test262_errors.txt
Original file line number Diff line number Diff line change
Expand Up @@ -78,58 +78,6 @@ test262/test/built-ins/Iterator/prototype/drop/underlying-iterator-closed-in-par
test262/test/built-ins/Iterator/prototype/drop/underlying-iterator-closed-in-parallel.js:19: strict mode: InternalError: TODO implement Iterator.prototype.drop
test262/test/built-ins/Iterator/prototype/drop/underlying-iterator-closed.js:21: InternalError: TODO implement Iterator.prototype.drop
test262/test/built-ins/Iterator/prototype/drop/underlying-iterator-closed.js:21: strict mode: InternalError: TODO implement Iterator.prototype.drop
test262/test/built-ins/Iterator/prototype/every/argument-effect-order.js:16: Test262Error: Expected a TypeError but got a InternalError
test262/test/built-ins/Iterator/prototype/every/argument-effect-order.js:16: strict mode: Test262Error: Expected a TypeError but got a InternalError
test262/test/built-ins/Iterator/prototype/every/callable.js:10: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/callable.js:10: strict mode: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/get-next-method-only-once.js:35: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/get-next-method-only-once.js:35: strict mode: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/get-next-method-throws.js:17: Test262Error: Expected a Test262Error but got a InternalError
test262/test/built-ins/Iterator/prototype/every/get-next-method-throws.js:17: strict mode: Test262Error: Expected a Test262Error but got a InternalError
test262/test/built-ins/Iterator/prototype/every/get-return-method-throws.js:23: Test262Error: Expected a Test262Error but got a InternalError
test262/test/built-ins/Iterator/prototype/every/get-return-method-throws.js:23: strict mode: Test262Error: Expected a Test262Error but got a InternalError
test262/test/built-ins/Iterator/prototype/every/iterator-already-exhausted.js:22: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/iterator-already-exhausted.js:22: strict mode: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/iterator-has-no-return.js:17: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/iterator-has-no-return.js:17: strict mode: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/iterator-return-method-throws.js:23: Test262Error: Expected a Test262Error but got a InternalError
test262/test/built-ins/Iterator/prototype/every/iterator-return-method-throws.js:23: strict mode: Test262Error: Expected a Test262Error but got a InternalError
test262/test/built-ins/Iterator/prototype/every/next-method-returns-non-object.js:23: Test262Error: Expected a TypeError but got a InternalError
test262/test/built-ins/Iterator/prototype/every/next-method-returns-non-object.js:23: strict mode: Test262Error: Expected a TypeError but got a InternalError
test262/test/built-ins/Iterator/prototype/every/next-method-returns-throwing-done.js:19: Test262Error: Expected a Test262Error but got a InternalError
test262/test/built-ins/Iterator/prototype/every/next-method-returns-throwing-done.js:19: strict mode: Test262Error: Expected a Test262Error but got a InternalError
test262/test/built-ins/Iterator/prototype/every/next-method-returns-throwing-value-done.js:30: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/next-method-returns-throwing-value-done.js:30: strict mode: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/next-method-returns-throwing-value.js:20: Test262Error: Expected a Test262Error but got a InternalError
test262/test/built-ins/Iterator/prototype/every/next-method-returns-throwing-value.js:20: strict mode: Test262Error: Expected a Test262Error but got a InternalError
test262/test/built-ins/Iterator/prototype/every/next-method-throws.js:17: Test262Error: Expected a Test262Error but got a InternalError
test262/test/built-ins/Iterator/prototype/every/next-method-throws.js:17: strict mode: Test262Error: Expected a Test262Error but got a InternalError
test262/test/built-ins/Iterator/prototype/every/non-callable-predicate.js:20: Test262Error: Expected a TypeError but got a InternalError
test262/test/built-ins/Iterator/prototype/every/non-callable-predicate.js:20: strict mode: Test262Error: Expected a TypeError but got a InternalError
test262/test/built-ins/Iterator/prototype/every/predicate-args.js:40: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/predicate-args.js:40: strict mode: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/predicate-returns-falsey.js:26: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/predicate-returns-falsey.js:26: strict mode: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/predicate-returns-non-boolean.js:27: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/predicate-returns-non-boolean.js:27: strict mode: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/predicate-returns-truthy-then-falsey.js:27: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/predicate-returns-truthy-then-falsey.js:27: strict mode: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/predicate-returns-truthy.js:23: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/predicate-returns-truthy.js:23: strict mode: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/predicate-this.js:30: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/predicate-this.js:30: strict mode: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/predicate-throws-then-closing-iterator-also-throws.js:33: Test262Error: Expected a Test262Error but got a InternalError
test262/test/built-ins/Iterator/prototype/every/predicate-throws-then-closing-iterator-also-throws.js:33: strict mode: Test262Error: Expected a Test262Error but got a InternalError
test262/test/built-ins/Iterator/prototype/every/predicate-throws.js:35: Test262Error: Expected a Test262Error but got a InternalError
test262/test/built-ins/Iterator/prototype/every/predicate-throws.js:35: strict mode: Test262Error: Expected a Test262Error but got a InternalError
test262/test/built-ins/Iterator/prototype/every/result-is-boolean.js:11: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/result-is-boolean.js:11: strict mode: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/this-non-callable-next.js:15: Test262Error: Expected a TypeError but got a InternalError
test262/test/built-ins/Iterator/prototype/every/this-non-callable-next.js:15: strict mode: Test262Error: Expected a TypeError but got a InternalError
test262/test/built-ins/Iterator/prototype/every/this-non-object.js:21: Test262Error: Expected a TypeError but got a InternalError
test262/test/built-ins/Iterator/prototype/every/this-non-object.js:21: strict mode: Test262Error: Expected a TypeError but got a InternalError
test262/test/built-ins/Iterator/prototype/every/this-plain-iterator.js:29: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/every/this-plain-iterator.js:29: strict mode: InternalError: TODO implement Iterator.prototype.every
test262/test/built-ins/Iterator/prototype/filter/argument-effect-order.js:16: Test262Error: Expected a TypeError but got a InternalError
test262/test/built-ins/Iterator/prototype/filter/argument-effect-order.js:16: strict mode: Test262Error: Expected a TypeError but got a InternalError
test262/test/built-ins/Iterator/prototype/filter/callable.js:10: InternalError: TODO implement Iterator.prototype.filter
Expand Down

0 comments on commit b9a22f9

Please sign in to comment.