From 2395a490582efed890b204192b6829f4bc413203 Mon Sep 17 00:00:00 2001 From: Michael Ficarra Date: Tue, 9 Aug 2022 16:44:08 -0600 Subject: [PATCH] fixes #200: don't add additional ticks in wrapped objects' return --- spec.html | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/spec.html b/spec.html index 0c5733c..7a37a7a 100644 --- a/spec.html +++ b/spec.html @@ -245,8 +245,12 @@

%WrapForValidIteratorPrototype%.return ( )

1. Let _O_ be *this* value. 1. Perform ? RequireInternalSlot(_O_, [[Iterated]]). - 1. Let _result_ be ? IteratorClose(_O_.[[Iterated]], NormalCompletion(*undefined*)). - 1. Return CreateIterResultObject(_result_, true). + 1. Let _iterator_ be _O_.[[Iterated]].[[Iterator]]. + 1. Assert: Type(_iterator_) is Object. + 1. Let _returnMethod_ be ? GetMethod(_iterator_, *"return"*). + 1. If _returnMethod_ is *undefined*, then + 1. Return CreateIterResultObject(*undefined*, *true*). + 1. Return ? Call(_returnMethod_, _iterator_). @@ -336,11 +340,15 @@

%WrapForValidAsyncIteratorPrototype%.return ( )

1. Let _promiseCapability_ be ! NewPromiseCapability(%Promise%). 1. Let _check_ be Completion(RequireInternalSlot(_O_, [[AsyncIterated]])). 1. IfAbruptRejectPromise(_check_, _promiseCapability_). - 1. Let _result_ be Completion(AsyncIteratorClose(_O_.[[AsyncIterated]], NormalCompletion(*undefined*))). + 1. Let _iterator_ be _O_.[[AsyncIterated]].[[Iterator]]. + 1. Assert: Type(_iterator_) is Object. + 1. Let _returnMethod_ be Completion(GetMethod(_iterator_, *"return"*)). + 1. IfAbruptRejectPromise(_returnMethod_, _promiseCapability_). + 1. If _returnMethod_ is *undefined*, then + 1. Return ? PromiseResolve(%Promise%, CreateIterResultObject(*undefined*, *true*)). + 1. Let _result_ be Completion(Call(_returnMethod_, _iterator_)). 1. IfAbruptRejectPromise(_result_, _promiseCapability_). - 1. Let _iterResult_ be CreateIterResultObject(_result_, *true*). - 1. Perform ! Call(_promiseCapability_.[[Resolve]], *undefined*, « _iterResult_ »). - 1. Return _promiseCapability_.[[Promise]]. + 1. Return ? PromiseResolve(%Promise%, _result_).