From c41ee4f15febb220f242fbbe5b56c1e21030a426 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Fri, 8 Nov 2024 15:06:07 +0100 Subject: [PATCH] Implement Iterator.prototype.drop Includes the scaffold for other iterator helper methods that require an Iterator Helper object. --- gen/function_source.c | Bin 2749 -> 2749 bytes gen/hello.c | Bin 1416 -> 1416 bytes gen/hello_module.c | Bin 3818 -> 3818 bytes gen/repl.c | Bin 143185 -> 143185 bytes gen/test_fib.c | Bin 2697 -> 2697 bytes quickjs-atom.h | 1 + quickjs.c | 201 +++++++++++++++++++++++++++++++++++++++++- test262_errors.txt | 54 ------------ 8 files changed, 200 insertions(+), 56 deletions(-) diff --git a/gen/function_source.c b/gen/function_source.c index 05d432ee0a9d5ffa0dd1586165bc817477205e24..0409ecc674a1e43252782f69b2d14f04677668be 100644 GIT binary patch delta 109 zcmdlhx>t0<9!8^$doM6DrcUl-s%J_zn9R>C%V;!Nmsu9X@nH^?G|^Eos4y@FlLlZi z1wt0<9!A5BdoM6DCQt5Ts%J_{oy^ZH%V;oJmsu9X@nH^?G}2Kps4y@FlLlZi z1wN^M5Q)X9cSVv}DpwojhOB*AH7q{F3PP?2gl`5~h?yNM2nZ8Ui! NlMQ3)=66i9m;fLA5*h#i delta 58 zcmV-A0LA}^3y2Glr~xstsVe~iW0Nrg7L)4%hXQ0~li>jt1T-=%3X^XF8wfBoEFds= QWigYn0z3g@v+e?#0u3z@jsO4v diff --git a/gen/hello_module.c b/gen/hello_module.c index 101bbbc38aa57808127648dd98e2adb88688e502..55cefb401e8a4785240863c4ac6100c0d6598fad 100644 GIT binary patch delta 197 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 np{ZqM?D5w%baU|jI<95Z=YeqsA0k4JqU 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 VIKart_#Ds0byb`*s=IOQ{{V^?;Yk1h diff --git a/gen/test_fib.c b/gen/test_fib.c index e8182d2aef802333bbea281aae8db96b6e017621..c53b12d8c7fed5e0d013cacd822bc899859def55 100644 GIT binary patch delta 190 zcmeAa?G&A`j?rl2`g=^gsX7V<6$Zv&(r~gai}>V?%#BP&I+J}_BqX>Hat2@(DIhZ0 zY;p>V2eXL|*W`z+qLbs;*e6G@icG%GV#8=W`2nlgWFuC!$y->(C+D-ePQDMMPqT_J zS^#A{7%eAjvdJ+ff>ig6yo0$GuoIC&3HVKP`@A1nLhA8am+ Kshe%teV73mE;fq* delta 213 zcmeAa?G&A`j?r-A`g=^m$vO%K6$Zv&(hx)@rA}VJJjuuaNgTpX0f{6V>2M)5AWN7` zPGRw2HrC;q{E$_2avU2wqsinmEdGo}lOM2(O*Udxn|zu@WO5Fx$K(iB@yVxIMJ8_n z(zR^-lUdo687(GjvdJ-8g4F``GADw~QJLJsCOG*%t2l>=5yu.iterator_helper_data; + if (it) { + JS_FreeValueRT(rt, it->obj); + JS_FreeValueRT(rt, it->func); + JS_FreeValueRT(rt, it->next); + js_free_rt(rt, it); + } +} + +static void js_iterator_helper_mark(JSRuntime *rt, JSValue val, + JS_MarkFunc *mark_func) +{ + JSObject *p = JS_VALUE_GET_OBJ(val); + JSIteratorHelperData *it = p->u.iterator_helper_data; + if (it) { + JS_MarkValue(rt, it->obj, mark_func); + JS_MarkValue(rt, it->func, mark_func); + JS_MarkValue(rt, it->next, mark_func); + } +} + +static JSValue js_iterator_helper_next(JSContext *ctx, JSValue this_val, + int argc, JSValue *argv, + BOOL *pdone, int magic) +{ + JSIteratorHelperData *it; + JSValue ret; + + it = JS_GetOpaque2(ctx, this_val, JS_CLASS_ITERATOR_HELPER); + if (!it) + goto fail; + if (it->executing) + return JS_ThrowTypeError(ctx, "cannot invoke a running iterator"); + if (magic == GEN_MAGIC_RETURN && it->done) + return JS_UNDEFINED; + + it->executing = TRUE; + + switch (it->kind) { + case JS_ITERATOR_HELPER_KIND_DROP: + { + JSValue item, method; + if (magic == GEN_MAGIC_NEXT) { + method = js_dup(it->next); + } else { + method = JS_GetProperty(ctx, it->obj, JS_ATOM_return); + if (JS_IsException(method)) + goto fail; + } + while (it->limit > 0) { + it->limit--; + item = JS_IteratorNext(ctx, it->obj, method, 0, NULL, pdone); + if (JS_IsException(item)) { + JS_FreeValue(ctx, method); + goto fail; + } + JS_FreeValue(ctx, item); + if (magic == GEN_MAGIC_RETURN) + *pdone = TRUE; + if (*pdone) { + JS_FreeValue(ctx, method); + ret = JS_UNDEFINED; + goto done; + } + } + + item = JS_IteratorNext(ctx, it->obj, method, 0, NULL, pdone); + JS_FreeValue(ctx, method); + if (JS_IsException(item)) + goto fail; + ret = item; + goto done; + } + break; + default: + abort(); + } + +done: + it->done = magic == GEN_MAGIC_NEXT ? *pdone : TRUE; + it->executing = FALSE; + return ret; +fail: + it->executing = FALSE; + if (it && JS_IsObject(it->obj)) { + /* close the iterator object, preserving pending exception */ + JS_IteratorClose(ctx, it->obj, TRUE); + } + *pdone = FALSE; + return JS_EXCEPTION; +} + +static JSValue js_create_iterator_helper(JSContext *ctx, JSValue iterator, + JSIteratorHelperKindEnum kind, JSValue func, int64_t limit) +{ + JSValue obj, method; + JSIteratorHelperData *it; + + method = JS_GetProperty(ctx, iterator, JS_ATOM_next); + if (JS_IsException(method)) + return JS_EXCEPTION; + obj = JS_NewObjectClass(ctx, JS_CLASS_ITERATOR_HELPER); + if (JS_IsException(obj)) { + JS_FreeValue(ctx, method); + return JS_EXCEPTION; + } + it = js_malloc(ctx, sizeof(*it)); + if (!it) { + JS_FreeValue(ctx, obj); + JS_FreeValue(ctx, method); + return JS_EXCEPTION; + } + it->kind = kind; + it->obj = js_dup(iterator); + it->func = js_dup(func); + it->next = method; + it->limit = limit; + it->executing = FALSE; + it->done = FALSE; + JS_SetOpaqueInternal(obj, it); + return obj; +} + static const JSCFunctionListEntry js_iterator_funcs[] = { JS_CFUNC_DEF("from", 1, js_iterator_from ), }; @@ -40416,6 +40602,12 @@ static const JSCFunctionListEntry js_iterator_proto_funcs[] = { JS_CGETSET_DEF("[Symbol.toStringTag]", js_iterator_proto_get_toStringTag, js_iterator_proto_set_toStringTag), }; +static const JSCFunctionListEntry js_iterator_helper_proto_funcs[] = { + JS_ITERATOR_NEXT_DEF("next", 0, js_iterator_helper_next, GEN_MAGIC_NEXT ), + JS_ITERATOR_NEXT_DEF("return", 0, js_iterator_helper_next, GEN_MAGIC_RETURN ), + JS_PROP_STRING_DEF("[Symbol.toStringTag]", "Iterator Helper", JS_PROP_CONFIGURABLE ), +}; + static const JSCFunctionListEntry js_array_proto_funcs[] = { JS_CFUNC_DEF("at", 1, js_array_at ), JS_CFUNC_DEF("with", 2, js_array_with ), @@ -50986,6 +51178,11 @@ void JS_AddIntrinsicBaseObjects(JSContext *ctx) JS_NewObjectProtoClass(ctx, ctx->class_proto[JS_CLASS_ITERATOR], JS_CLASS_ITERATOR); + ctx->class_proto[JS_CLASS_ITERATOR_HELPER] = JS_NewObjectProto(ctx, ctx->iterator_proto); + JS_SetPropertyFunctionList(ctx, ctx->class_proto[JS_CLASS_ITERATOR_HELPER], + js_iterator_helper_proto_funcs, + countof(js_iterator_helper_proto_funcs)); + /* Array */ JS_SetPropertyFunctionList(ctx, ctx->class_proto[JS_CLASS_ARRAY], js_array_proto_funcs, diff --git a/test262_errors.txt b/test262_errors.txt index dd2c470..845a5de 100644 --- a/test262_errors.txt +++ b/test262_errors.txt @@ -24,60 +24,6 @@ test262/test/built-ins/Iterator/prototype/constructor/prop-desc.js:10: Test262Er test262/test/built-ins/Iterator/prototype/constructor/prop-desc.js:10: strict mode: Test262Error: Expected SameValue(«undefined», «function») to be true test262/test/built-ins/Iterator/prototype/constructor/weird-setter.js:23: TypeError: cannot read property 'call' of undefined test262/test/built-ins/Iterator/prototype/constructor/weird-setter.js:23: strict mode: TypeError: cannot read property 'call' of undefined -test262/test/built-ins/Iterator/prototype/drop/argument-effect-order.js:16: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/argument-effect-order.js:16: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/callable.js:10: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/callable.js:10: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/exhaustion-does-not-call-return.js:38: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/exhaustion-does-not-call-return.js:38: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/get-next-method-only-once.js:38: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/get-next-method-only-once.js:38: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/get-next-method-throws.js:17: Test262Error: Expected a Test262Error but got a InternalError -test262/test/built-ins/Iterator/prototype/drop/get-next-method-throws.js:17: strict mode: Test262Error: Expected a Test262Error but got a InternalError -test262/test/built-ins/Iterator/prototype/drop/get-return-method-throws.js:25: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/get-return-method-throws.js:25: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/limit-equals-total.js:18: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/limit-equals-total.js:18: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/limit-greater-than-total.js:19: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/limit-greater-than-total.js:19: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/limit-less-than-total.js:18: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/limit-less-than-total.js:18: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/limit-rangeerror.js:18: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/limit-rangeerror.js:18: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/limit-tonumber-throws.js:16: Test262Error: Expected a Test262Error but got a InternalError -test262/test/built-ins/Iterator/prototype/drop/limit-tonumber-throws.js:16: strict mode: Test262Error: Expected a Test262Error but got a InternalError -test262/test/built-ins/Iterator/prototype/drop/limit-tonumber.js:22: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/limit-tonumber.js:22: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/next-method-returns-non-object.js:23: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/next-method-returns-non-object.js:23: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/next-method-returns-throwing-done.js:31: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/next-method-returns-throwing-done.js:31: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/next-method-returns-throwing-value-done.js:32: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/next-method-returns-throwing-value-done.js:32: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/next-method-returns-throwing-value.js:29: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/next-method-returns-throwing-value.js:29: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/next-method-throws.js:23: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/next-method-throws.js:23: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/result-is-iterator.js:11: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/result-is-iterator.js:11: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/return-is-forwarded.js:31: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/return-is-forwarded.js:31: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/return-is-not-forwarded-after-exhaustion.js:27: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/return-is-not-forwarded-after-exhaustion.js:27: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/this-non-callable-next.js:15: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/this-non-callable-next.js:15: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/this-non-object.js:22: Test262Error: Expected a TypeError but got a InternalError -test262/test/built-ins/Iterator/prototype/drop/this-non-object.js:22: strict mode: Test262Error: Expected a TypeError but got a InternalError -test262/test/built-ins/Iterator/prototype/drop/this-plain-iterator.js:25: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/this-plain-iterator.js:25: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/throws-typeerror-when-generator-is-running.js:33: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/throws-typeerror-when-generator-is-running.js:33: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/underlying-iterator-advanced-in-parallel.js:19: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/underlying-iterator-advanced-in-parallel.js:19: strict mode: InternalError: TODO implement Iterator.prototype.drop -test262/test/built-ins/Iterator/prototype/drop/underlying-iterator-closed-in-parallel.js:19: InternalError: TODO implement Iterator.prototype.drop -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/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