Skip to content

Commit b9a22f9

Browse files
committed
Implement Iterator.prototype.every
1 parent caa1bf5 commit b9a22f9

File tree

2 files changed

+51
-53
lines changed

2 files changed

+51
-53
lines changed

quickjs.c

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39916,7 +39916,57 @@ static JSValue js_iterator_proto_drop(JSContext *ctx, JSValue this_val,
3991639916
static JSValue js_iterator_proto_every(JSContext *ctx, JSValue this_val,
3991739917
int argc, JSValue *argv)
3991839918
{
39919-
return JS_ThrowInternalError(ctx, "TODO implement Iterator.prototype.every");
39919+
JSValue item, method, ret, func, index_val, r;
39920+
JSValue args[2];
39921+
int64_t idx;
39922+
BOOL done;
39923+
39924+
if (!JS_IsObject(this_val))
39925+
return JS_ThrowTypeError(ctx, "Iterator.prototype.every called on non-object");
39926+
if (check_function(ctx, argv[0]))
39927+
return JS_EXCEPTION;
39928+
func = js_dup(argv[0]);
39929+
method = JS_GetProperty(ctx, this_val, JS_ATOM_next);
39930+
if (JS_IsException(method))
39931+
goto exception;
39932+
r = JS_TRUE;
39933+
for (idx = 0; /*empty*/; idx++) {
39934+
item = JS_IteratorNext(ctx, this_val, method, 0, NULL, &done);
39935+
if (JS_IsException(item))
39936+
goto exception;
39937+
if (done)
39938+
break;
39939+
index_val = JS_NewInt64(ctx, idx);
39940+
if (JS_IsException(index_val)) {
39941+
JS_FreeValue(ctx, item);
39942+
goto exception;
39943+
}
39944+
args[0] = item;
39945+
args[1] = index_val;
39946+
ret = JS_Call(ctx, func, JS_UNDEFINED, countof(args), args);
39947+
JS_FreeValue(ctx, item);
39948+
JS_FreeValue(ctx, index_val);
39949+
if (JS_IsException(ret))
39950+
goto exception;
39951+
if (!JS_ToBoolFree(ctx, ret)) {
39952+
if (JS_IteratorClose(ctx, this_val, FALSE) < 0)
39953+
r = JS_EXCEPTION;
39954+
else
39955+
r = JS_FALSE;
39956+
break;
39957+
}
39958+
index_val = JS_UNDEFINED;
39959+
ret = JS_UNDEFINED;
39960+
item = JS_UNDEFINED;
39961+
}
39962+
JS_FreeValue(ctx, func);
39963+
JS_FreeValue(ctx, method);
39964+
return r;
39965+
exception:
39966+
JS_IteratorClose(ctx, this_val, TRUE);
39967+
JS_FreeValue(ctx, func);
39968+
JS_FreeValue(ctx, method);
39969+
return JS_EXCEPTION;
3992039970
}
3992139971

3992239972
static JSValue js_iterator_proto_filter(JSContext *ctx, JSValue this_val,

test262_errors.txt

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -78,58 +78,6 @@ test262/test/built-ins/Iterator/prototype/drop/underlying-iterator-closed-in-par
7878
test262/test/built-ins/Iterator/prototype/drop/underlying-iterator-closed-in-parallel.js:19: strict mode: InternalError: TODO implement Iterator.prototype.drop
7979
test262/test/built-ins/Iterator/prototype/drop/underlying-iterator-closed.js:21: InternalError: TODO implement Iterator.prototype.drop
8080
test262/test/built-ins/Iterator/prototype/drop/underlying-iterator-closed.js:21: strict mode: InternalError: TODO implement Iterator.prototype.drop
81-
test262/test/built-ins/Iterator/prototype/every/argument-effect-order.js:16: Test262Error: Expected a TypeError but got a InternalError
82-
test262/test/built-ins/Iterator/prototype/every/argument-effect-order.js:16: strict mode: Test262Error: Expected a TypeError but got a InternalError
83-
test262/test/built-ins/Iterator/prototype/every/callable.js:10: InternalError: TODO implement Iterator.prototype.every
84-
test262/test/built-ins/Iterator/prototype/every/callable.js:10: strict mode: InternalError: TODO implement Iterator.prototype.every
85-
test262/test/built-ins/Iterator/prototype/every/get-next-method-only-once.js:35: InternalError: TODO implement Iterator.prototype.every
86-
test262/test/built-ins/Iterator/prototype/every/get-next-method-only-once.js:35: strict mode: InternalError: TODO implement Iterator.prototype.every
87-
test262/test/built-ins/Iterator/prototype/every/get-next-method-throws.js:17: Test262Error: Expected a Test262Error but got a InternalError
88-
test262/test/built-ins/Iterator/prototype/every/get-next-method-throws.js:17: strict mode: Test262Error: Expected a Test262Error but got a InternalError
89-
test262/test/built-ins/Iterator/prototype/every/get-return-method-throws.js:23: Test262Error: Expected a Test262Error but got a InternalError
90-
test262/test/built-ins/Iterator/prototype/every/get-return-method-throws.js:23: strict mode: Test262Error: Expected a Test262Error but got a InternalError
91-
test262/test/built-ins/Iterator/prototype/every/iterator-already-exhausted.js:22: InternalError: TODO implement Iterator.prototype.every
92-
test262/test/built-ins/Iterator/prototype/every/iterator-already-exhausted.js:22: strict mode: InternalError: TODO implement Iterator.prototype.every
93-
test262/test/built-ins/Iterator/prototype/every/iterator-has-no-return.js:17: InternalError: TODO implement Iterator.prototype.every
94-
test262/test/built-ins/Iterator/prototype/every/iterator-has-no-return.js:17: strict mode: InternalError: TODO implement Iterator.prototype.every
95-
test262/test/built-ins/Iterator/prototype/every/iterator-return-method-throws.js:23: Test262Error: Expected a Test262Error but got a InternalError
96-
test262/test/built-ins/Iterator/prototype/every/iterator-return-method-throws.js:23: strict mode: Test262Error: Expected a Test262Error but got a InternalError
97-
test262/test/built-ins/Iterator/prototype/every/next-method-returns-non-object.js:23: Test262Error: Expected a TypeError but got a InternalError
98-
test262/test/built-ins/Iterator/prototype/every/next-method-returns-non-object.js:23: strict mode: Test262Error: Expected a TypeError but got a InternalError
99-
test262/test/built-ins/Iterator/prototype/every/next-method-returns-throwing-done.js:19: Test262Error: Expected a Test262Error but got a InternalError
100-
test262/test/built-ins/Iterator/prototype/every/next-method-returns-throwing-done.js:19: strict mode: Test262Error: Expected a Test262Error but got a InternalError
101-
test262/test/built-ins/Iterator/prototype/every/next-method-returns-throwing-value-done.js:30: InternalError: TODO implement Iterator.prototype.every
102-
test262/test/built-ins/Iterator/prototype/every/next-method-returns-throwing-value-done.js:30: strict mode: InternalError: TODO implement Iterator.prototype.every
103-
test262/test/built-ins/Iterator/prototype/every/next-method-returns-throwing-value.js:20: Test262Error: Expected a Test262Error but got a InternalError
104-
test262/test/built-ins/Iterator/prototype/every/next-method-returns-throwing-value.js:20: strict mode: Test262Error: Expected a Test262Error but got a InternalError
105-
test262/test/built-ins/Iterator/prototype/every/next-method-throws.js:17: Test262Error: Expected a Test262Error but got a InternalError
106-
test262/test/built-ins/Iterator/prototype/every/next-method-throws.js:17: strict mode: Test262Error: Expected a Test262Error but got a InternalError
107-
test262/test/built-ins/Iterator/prototype/every/non-callable-predicate.js:20: Test262Error: Expected a TypeError but got a InternalError
108-
test262/test/built-ins/Iterator/prototype/every/non-callable-predicate.js:20: strict mode: Test262Error: Expected a TypeError but got a InternalError
109-
test262/test/built-ins/Iterator/prototype/every/predicate-args.js:40: InternalError: TODO implement Iterator.prototype.every
110-
test262/test/built-ins/Iterator/prototype/every/predicate-args.js:40: strict mode: InternalError: TODO implement Iterator.prototype.every
111-
test262/test/built-ins/Iterator/prototype/every/predicate-returns-falsey.js:26: InternalError: TODO implement Iterator.prototype.every
112-
test262/test/built-ins/Iterator/prototype/every/predicate-returns-falsey.js:26: strict mode: InternalError: TODO implement Iterator.prototype.every
113-
test262/test/built-ins/Iterator/prototype/every/predicate-returns-non-boolean.js:27: InternalError: TODO implement Iterator.prototype.every
114-
test262/test/built-ins/Iterator/prototype/every/predicate-returns-non-boolean.js:27: strict mode: InternalError: TODO implement Iterator.prototype.every
115-
test262/test/built-ins/Iterator/prototype/every/predicate-returns-truthy-then-falsey.js:27: InternalError: TODO implement Iterator.prototype.every
116-
test262/test/built-ins/Iterator/prototype/every/predicate-returns-truthy-then-falsey.js:27: strict mode: InternalError: TODO implement Iterator.prototype.every
117-
test262/test/built-ins/Iterator/prototype/every/predicate-returns-truthy.js:23: InternalError: TODO implement Iterator.prototype.every
118-
test262/test/built-ins/Iterator/prototype/every/predicate-returns-truthy.js:23: strict mode: InternalError: TODO implement Iterator.prototype.every
119-
test262/test/built-ins/Iterator/prototype/every/predicate-this.js:30: InternalError: TODO implement Iterator.prototype.every
120-
test262/test/built-ins/Iterator/prototype/every/predicate-this.js:30: strict mode: InternalError: TODO implement Iterator.prototype.every
121-
test262/test/built-ins/Iterator/prototype/every/predicate-throws-then-closing-iterator-also-throws.js:33: Test262Error: Expected a Test262Error but got a InternalError
122-
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
123-
test262/test/built-ins/Iterator/prototype/every/predicate-throws.js:35: Test262Error: Expected a Test262Error but got a InternalError
124-
test262/test/built-ins/Iterator/prototype/every/predicate-throws.js:35: strict mode: Test262Error: Expected a Test262Error but got a InternalError
125-
test262/test/built-ins/Iterator/prototype/every/result-is-boolean.js:11: InternalError: TODO implement Iterator.prototype.every
126-
test262/test/built-ins/Iterator/prototype/every/result-is-boolean.js:11: strict mode: InternalError: TODO implement Iterator.prototype.every
127-
test262/test/built-ins/Iterator/prototype/every/this-non-callable-next.js:15: Test262Error: Expected a TypeError but got a InternalError
128-
test262/test/built-ins/Iterator/prototype/every/this-non-callable-next.js:15: strict mode: Test262Error: Expected a TypeError but got a InternalError
129-
test262/test/built-ins/Iterator/prototype/every/this-non-object.js:21: Test262Error: Expected a TypeError but got a InternalError
130-
test262/test/built-ins/Iterator/prototype/every/this-non-object.js:21: strict mode: Test262Error: Expected a TypeError but got a InternalError
131-
test262/test/built-ins/Iterator/prototype/every/this-plain-iterator.js:29: InternalError: TODO implement Iterator.prototype.every
132-
test262/test/built-ins/Iterator/prototype/every/this-plain-iterator.js:29: strict mode: InternalError: TODO implement Iterator.prototype.every
13381
test262/test/built-ins/Iterator/prototype/filter/argument-effect-order.js:16: Test262Error: Expected a TypeError but got a InternalError
13482
test262/test/built-ins/Iterator/prototype/filter/argument-effect-order.js:16: strict mode: Test262Error: Expected a TypeError but got a InternalError
13583
test262/test/built-ins/Iterator/prototype/filter/callable.js:10: InternalError: TODO implement Iterator.prototype.filter

0 commit comments

Comments
 (0)