From dcf16cea1fe342bec7d4c24a67bb44a307b95ed2 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Tue, 12 Nov 2019 17:00:42 -0800 Subject: [PATCH] Normative: make async iterators next/return/throw not pass `undefined` when value is absent --- spec.html | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/spec.html b/spec.html index da311628480..52ff23d285e 100644 --- a/spec.html +++ b/spec.html @@ -38304,7 +38304,10 @@

%AsyncFromSyncIteratorPrototype%.next ( _value_ )

1. Assert: Type(_O_) is Object and _O_ has a [[SyncIteratorRecord]] internal slot. 1. Let _promiseCapability_ be ! NewPromiseCapability(%Promise%). 1. Let _syncIteratorRecord_ be _O_.[[SyncIteratorRecord]]. - 1. Let _result_ be IteratorNext(_syncIteratorRecord_, _value_). + 1. If _value_ is present, then + 1. Let _result_ be IteratorNext(_syncIteratorRecord_, _value_). + 1. Else, + 1. Let _result_ be IteratorNext(_syncIteratorRecord_). 1. IfAbruptRejectPromise(_result_, _promiseCapability_). 1. Return ! AsyncFromSyncIteratorContinuation(_result_, _promiseCapability_). @@ -38324,7 +38327,10 @@

%AsyncFromSyncIteratorPrototype%.return ( _value_ )

1. Let _iterResult_ be ! CreateIterResultObject(_value_, *true*). 1. Perform ! Call(_promiseCapability_.[[Resolve]], *undefined*, « _iterResult_ »). 1. Return _promiseCapability_.[[Promise]]. - 1. Let _result_ be Call(_return_, _syncIterator_, « _value_ »). + 1. If _value_ is present, then + 1. Let _result_ be Call(_return_, _syncIterator_, « _value_ »). + 1. Else, + 1. Let _result_ be Call(_return_, _syncIterator_, « »). 1. IfAbruptRejectPromise(_result_, _promiseCapability_). 1. If Type(_result_) is not Object, then 1. Perform ! Call(_promiseCapability_.[[Reject]], *undefined*, « a newly created *TypeError* object »). @@ -38346,7 +38352,10 @@

%AsyncFromSyncIteratorPrototype%.throw ( _value_ )

1. If _throw_ is *undefined*, then 1. Perform ! Call(_promiseCapability_.[[Reject]], *undefined*, « _value_ »). 1. Return _promiseCapability_.[[Promise]]. - 1. Let _result_ be Call(_throw_, _syncIterator_, « _value_ »). + 1. If _value_ is present, then + 1. Let _result_ be Call(_throw_, _syncIterator_, « _value_ »). + 1. Else, + 1. Let _result_ be Call(_throw_, _syncIterator_, « »). 1. IfAbruptRejectPromise(_result_, _promiseCapability_). 1. If Type(_result_) is not Object, then 1. Perform ! Call(_promiseCapability_.[[Reject]], *undefined*, « a newly created *TypeError* object »).