diff --git a/src/async-generators/yield-star-async-next.case b/src/async-generators/yield-star-async-next.case
index 8fa0d3d55028a5488b093474337f811bb257de6c..eaa0c23554a22fa718054a96d4ef7d8e6cf3c9af 100644
--- a/src/async-generators/yield-star-async-next.case
+++ b/src/async-generators/yield-star-async-next.case
@@ -14,16 +14,15 @@ YieldExpression: yield * AssignmentExpression
     5. Let received be NormalCompletion(undefined).
     6. Repeat
       a. If received.[[Type]] is normal, then
-        i. Let innerResult be ? IteratorNext(iterator, received.[[Value]]).
-        ii. Let innerResult be ? Invoke(iterator, "next",
-            « received.[[Value]] »).
-        iii. If generatorKind is async, then set innerResult to
-             ? Await(innerResult).
+        i. Let innerResult be ? Invoke(iterator, "next", « received.[[Value]] »).
+        ii. If generatorKind is async, then set innerResult to ? Await(innerResult).
         ...
-        v. Let done be ? IteratorComplete(innerResult).
-        vi. If done is true, then
-           1. Return ? IteratorValue(innerResult).
-        vii. Let received be GeneratorYield(innerResult).
+        iv. Let done be ? IteratorComplete(innerResult).
+        v. If done is true, then
+           1. Let resultValue be ? IteratorValue(innerResult).
+           2. If generatorKind is async, then set resultValue to ? Await(resultValue).
+           3. Return resultValue.
+        vi. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
       ...
 
     GetIterator ( obj [ , hint ] )
@@ -37,13 +36,10 @@ YieldExpression: yield * AssignmentExpression
         iii. Return ? CreateAsyncFromSyncIterator(syncIterator).
     ...
 
-    GeneratorYield ( iterNextObj )
+    AsyncGeneratorYield ( value )
 
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
 
 flags: [async]
@@ -206,44 +202,41 @@ iter.next("next-arg-1").then(v => {
   assert.sameValue(log[8].name, "get next value (1)");
   assert.sameValue(log[8].thisValue.name, "next-result-1", "get next value thisValue");
 
-  assert.sameValue(log[9].name, "get next done (1)");
-  assert.sameValue(log[9].thisValue.name, "next-result-1", "get next done thisValue");
-
   assert.sameValue(v.value, "next-value-1");
   assert.sameValue(v.done, false);
 
-  assert.sameValue(log.length, 10, "log.length");
+  assert.sameValue(log.length, 9, "log.length");
 
   iter.next("next-arg-2").then(v => {
-    assert.sameValue(log[10].name, "get next");
-    assert.sameValue(log[10].thisValue.name, "asyncIterator", "get next thisValue");
+    assert.sameValue(log[9].name, "get next");
+    assert.sameValue(log[9].thisValue.name, "asyncIterator", "get next thisValue");
 
-    assert.sameValue(log[11].name, "call next");
-    assert.sameValue(log[11].thisValue.name, "asyncIterator", "next thisValue");
-    assert.sameValue(log[11].args.length, 1, "next args.length");
-    assert.sameValue(log[11].args[0], "next-arg-2", "next args[0]");
+    assert.sameValue(log[10].name, "call next");
+    assert.sameValue(log[10].thisValue.name, "asyncIterator", "next thisValue");
+    assert.sameValue(log[10].args.length, 1, "next args.length");
+    assert.sameValue(log[10].args[0], "next-arg-2", "next args[0]");
 
-    assert.sameValue(log[12].name, "get next then (2)");
-    assert.sameValue(log[12].thisValue.name, "next-promise-2", "get next then thisValue");
+    assert.sameValue(log[11].name, "get next then (2)");
+    assert.sameValue(log[11].thisValue.name, "next-promise-2", "get next then thisValue");
 
-    assert.sameValue(log[13].name, "call next then (2)");
-    assert.sameValue(log[13].thisValue.name, "next-promise-2", "next then thisValue");
-    assert.sameValue(log[13].args.length, 2, "next then args.length");
-    assert.sameValue(typeof log[13].args[0], "function", "next then args[0]");
-    assert.sameValue(typeof log[13].args[1], "function", "next then args[1]");
+    assert.sameValue(log[12].name, "call next then (2)");
+    assert.sameValue(log[12].thisValue.name, "next-promise-2", "next then thisValue");
+    assert.sameValue(log[12].args.length, 2, "next then args.length");
+    assert.sameValue(typeof log[12].args[0], "function", "next then args[0]");
+    assert.sameValue(typeof log[12].args[1], "function", "next then args[1]");
 
-    assert.sameValue(log[14].name, "get next done (2)");
-    assert.sameValue(log[14].thisValue.name, "next-result-2", "get next done thisValue");
+    assert.sameValue(log[13].name, "get next done (2)");
+    assert.sameValue(log[13].thisValue.name, "next-result-2", "get next done thisValue");
 
-    assert.sameValue(log[15].name, "get next value (2)");
-    assert.sameValue(log[15].thisValue.name, "next-result-2", "get next value thisValue");
+    assert.sameValue(log[14].name, "get next value (2)");
+    assert.sameValue(log[14].thisValue.name, "next-result-2", "get next value thisValue");
 
-    assert.sameValue(log[16].name, "after yield*");
-    assert.sameValue(log[16].value, "next-value-2");
+    assert.sameValue(log[15].name, "after yield*");
+    assert.sameValue(log[15].value, "next-value-2");
 
     assert.sameValue(v.value, "return-value");
     assert.sameValue(v.done, true);
 
-    assert.sameValue(log.length, 17, "log.length");
+    assert.sameValue(log.length, 16, "log.length");
   }).then($DONE, $DONE);
 }).catch($DONE);
diff --git a/src/async-generators/yield-star-async-return.case b/src/async-generators/yield-star-async-return.case
index 4f824d62a66487e5dc06892ac9b94e26d6124d4a..f313ec8d9e1d048eae6ebb77187a802e51c231b7 100644
--- a/src/async-generators/yield-star-async-return.case
+++ b/src/async-generators/yield-star-async-return.case
@@ -14,27 +14,21 @@ info: |
         i. Assert: received.[[Type]] is return.
         ii. Let return be ? GetMethod(iterator, "return").
         iii. If return is undefined, return Completion(received).
-        iv. Let innerReturnResult be ? Call(return, iterator,
-            « received.[[Value]] »).
-        v. If generatorKind is async, then set innerReturnResult to
-           ? Await(innerReturnResult).
+        iv. Let innerReturnResult be ? Call(return, iterator, « received.[[Value]] »).
+        v. If generatorKind is async, then set innerReturnResult to ? Await(innerReturnResult).
         ...
         vii. Let done be ? IteratorComplete(innerReturnResult).
         viii. If done is true, then
              1. Let value be ? IteratorValue(innerReturnResult).
-             2. Return Completion{[[Type]]: return, [[Value]]: value,
-                [[Target]]: empty}.
-        ix. Let received be GeneratorYield(innerResult).
-
-    GeneratorYield ( iterNextObj )
+             2. If generatorKind is async, then set value to ? Await(value).
+             3. Return Completion{[[Type]]: return, [[Value]]: value, [[Target]]: empty}.
+        ix. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
+        ...
 
+    AsyncGeneratorYield ( value )
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
-
 flags: [async]
 features: [async-iteration, Symbol.asyncIterator]
 ---*/
@@ -186,42 +180,39 @@ iter.next().then(v => {
     assert.sameValue(log[7].name, "get return value (1)");
     assert.sameValue(log[7].thisValue.name, "return-result-1", "get return value thisValue");
 
-    assert.sameValue(log[8].name, "get return done (1)");
-    assert.sameValue(log[8].thisValue.name, "return-result-1", "get return done thisValue");
-
     assert.sameValue(v.value, "return-value-1");
     assert.sameValue(v.done, false);
 
-    assert.sameValue(log.length, 9, "log.length");
+    assert.sameValue(log.length, 8, "log.length");
 
     iter.return("return-arg-2").then(v => {
-      assert.sameValue(log[9].name, "get return");
-      assert.sameValue(log[9].thisValue.name, "asyncIterator", "get return thisValue");
+      assert.sameValue(log[8].name, "get return");
+      assert.sameValue(log[8].thisValue.name, "asyncIterator", "get return thisValue");
 
-      assert.sameValue(log[10].name, "call return");
-      assert.sameValue(log[10].thisValue.name, "asyncIterator", "return thisValue");
-      assert.sameValue(log[10].args.length, 1, "return args.length");
-      assert.sameValue(log[10].args[0], "return-arg-2", "return args[0]");
+      assert.sameValue(log[9].name, "call return");
+      assert.sameValue(log[9].thisValue.name, "asyncIterator", "return thisValue");
+      assert.sameValue(log[9].args.length, 1, "return args.length");
+      assert.sameValue(log[9].args[0], "return-arg-2", "return args[0]");
 
-      assert.sameValue(log[11].name, "get return then (2)");
-      assert.sameValue(log[11].thisValue.name, "return-promise-2", "get return then thisValue");
+      assert.sameValue(log[10].name, "get return then (2)");
+      assert.sameValue(log[10].thisValue.name, "return-promise-2", "get return then thisValue");
 
-      assert.sameValue(log[12].name, "call return then (2)");
-      assert.sameValue(log[12].thisValue.name, "return-promise-2", "return then thisValue");
-      assert.sameValue(log[12].args.length, 2, "return then args.length");
-      assert.sameValue(typeof log[12].args[0], "function", "return then args[0]");
-      assert.sameValue(typeof log[12].args[1], "function", "return then args[1]");
+      assert.sameValue(log[11].name, "call return then (2)");
+      assert.sameValue(log[11].thisValue.name, "return-promise-2", "return then thisValue");
+      assert.sameValue(log[11].args.length, 2, "return then args.length");
+      assert.sameValue(typeof log[11].args[0], "function", "return then args[0]");
+      assert.sameValue(typeof log[11].args[1], "function", "return then args[1]");
 
-      assert.sameValue(log[13].name, "get return done (2)");
-      assert.sameValue(log[13].thisValue.name, "return-result-2", "get return done thisValue");
+      assert.sameValue(log[12].name, "get return done (2)");
+      assert.sameValue(log[12].thisValue.name, "return-result-2", "get return done thisValue");
 
-      assert.sameValue(log[14].name, "get return value (2)");
-      assert.sameValue(log[14].thisValue.name, "return-result-2", "get return value thisValue");
+      assert.sameValue(log[13].name, "get return value (2)");
+      assert.sameValue(log[13].thisValue.name, "return-result-2", "get return value thisValue");
 
       assert.sameValue(v.value, "return-value-2");
       assert.sameValue(v.done, true);
 
-      assert.sameValue(log.length, 15, "log.length");
+      assert.sameValue(log.length, 14, "log.length");
     }).then($DONE, $DONE);
   }).catch($DONE);
 }).catch($DONE);
diff --git a/src/async-generators/yield-star-async-throw.case b/src/async-generators/yield-star-async-throw.case
index 29a40456666ca323e64dd5fefb363e0d9acf5ee9..89ed53d442ed1c5df34a0e1d70710d880184e12f 100644
--- a/src/async-generators/yield-star-async-throw.case
+++ b/src/async-generators/yield-star-async-throw.case
@@ -14,22 +14,20 @@ info: |
         i. Let throw be ? GetMethod(iterator, "throw").
         ii. If throw is not undefined, then
           1. Let innerResult be ? Call(throw, iterator, « received.[[Value]] »).
-          2. If generatorKind is async, then set innerResult to
-             ? Await(innerResult).
+          2. If generatorKind is async, then set innerResult to ? Await(innerResult).
           ...
           5. Let done be ? IteratorComplete(innerResult).
           6. If done is true, then
-            a. Return ? IteratorValue(innerResult).
-          7. Let received be GeneratorYield(innerResult).
+            a. Let resultValue be Return ? IteratorValue(innerResult).
+            b. If generatorKind is async, then set resultValue to ? Await(resultValue).
+            c. Return resultValue.
+          7. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
       ...
 
-    GeneratorYield ( iterNextObj )
+    AsyncGeneratorYield ( value )
 
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
 
 flags: [async]
@@ -188,45 +186,42 @@ iter.next().then(v => {
     assert.sameValue(log[7].name, "get throw value (1)");
     assert.sameValue(log[7].thisValue.name, "throw-result-1", "get throw value thisValue");
 
-    assert.sameValue(log[8].name, "get throw done (1)");
-    assert.sameValue(log[8].thisValue.name, "throw-result-1", "get throw done thisValue");
-
     assert.sameValue(v.value, "throw-value-1");
     assert.sameValue(v.done, false);
 
-    assert.sameValue(log.length, 9, "log.length");
+    assert.sameValue(log.length, 8, "log.length");
 
     iter.throw("throw-arg-2").then(v => {
-      assert.sameValue(log[9].name, "get throw");
-      assert.sameValue(log[9].thisValue.name, "asyncIterator", "get throw thisValue");
+      assert.sameValue(log[8].name, "get throw");
+      assert.sameValue(log[8].thisValue.name, "asyncIterator", "get throw thisValue");
 
-      assert.sameValue(log[10].name, "call throw");
-      assert.sameValue(log[10].thisValue.name, "asyncIterator", "throw thisValue");
-      assert.sameValue(log[10].args.length, 1, "throw args.length");
-      assert.sameValue(log[10].args[0], "throw-arg-2", "throw args[0]");
+      assert.sameValue(log[9].name, "call throw");
+      assert.sameValue(log[9].thisValue.name, "asyncIterator", "throw thisValue");
+      assert.sameValue(log[9].args.length, 1, "throw args.length");
+      assert.sameValue(log[9].args[0], "throw-arg-2", "throw args[0]");
 
-      assert.sameValue(log[11].name, "get throw then (2)");
-      assert.sameValue(log[11].thisValue.name, "throw-promise-2", "get throw thisValue");
+      assert.sameValue(log[10].name, "get throw then (2)");
+      assert.sameValue(log[10].thisValue.name, "throw-promise-2", "get throw thisValue");
 
-      assert.sameValue(log[12].name, "call throw then (2)");
-      assert.sameValue(log[12].thisValue.name, "throw-promise-2", "throw thisValue");
-      assert.sameValue(log[12].args.length, 2, "throw then args.length");
-      assert.sameValue(typeof log[12].args[0], "function", "throw then args[0]");
-      assert.sameValue(typeof log[12].args[1], "function", "throw then args[1]");
+      assert.sameValue(log[11].name, "call throw then (2)");
+      assert.sameValue(log[11].thisValue.name, "throw-promise-2", "throw thisValue");
+      assert.sameValue(log[11].args.length, 2, "throw then args.length");
+      assert.sameValue(typeof log[11].args[0], "function", "throw then args[0]");
+      assert.sameValue(typeof log[11].args[1], "function", "throw then args[1]");
 
-      assert.sameValue(log[13].name, "get throw done (2)");
-      assert.sameValue(log[13].thisValue.name, "throw-result-2", "get throw done thisValue");
+      assert.sameValue(log[12].name, "get throw done (2)");
+      assert.sameValue(log[12].thisValue.name, "throw-result-2", "get throw done thisValue");
 
-      assert.sameValue(log[14].name, "get throw value (2)");
-      assert.sameValue(log[14].thisValue.name, "throw-result-2", "get throw value thisValue");
+      assert.sameValue(log[13].name, "get throw value (2)");
+      assert.sameValue(log[13].thisValue.name, "throw-result-2", "get throw value thisValue");
 
-      assert.sameValue(log[15].name, "after yield*");
-      assert.sameValue(log[15].value, "throw-value-2");
+      assert.sameValue(log[14].name, "after yield*");
+      assert.sameValue(log[14].value, "throw-value-2");
 
       assert.sameValue(v.value, "return-value");
       assert.sameValue(v.done, true);
 
-      assert.sameValue(log.length, 16, "log.length");
+      assert.sameValue(log.length, 15, "log.length");
     }).then($DONE, $DONE);
   }).catch($DONE);
 }).catch($DONE);
diff --git a/src/params/error/async-gen-named-func-expr.template b/src/params/error/async-gen-named-func-expr.template
index 0237b9ae9245ada7081e60e6b4afd163b0e68191..852b2c1a7d0ab9bb893dcc83d91f9497cc07e7df 100644
--- a/src/params/error/async-gen-named-func-expr.template
+++ b/src/params/error/async-gen-named-func-expr.template
@@ -13,7 +13,6 @@ info: |
         7. Let closure be ! AsyncGeneratorFunctionCreate(Normal, FormalParameters,
            AsyncGeneratorBody, funcEnv, strict).
         [...]
-flags: [async]
 features: [async-iteration]
 ---*/
 
diff --git a/test/intl402/DateTimeFormat/prototype/formatToParts/length.js b/test/intl402/DateTimeFormat/prototype/formatToParts/length.js
index 49ceae3bcc4e01f08805f2b2d64510d31ead13a1..948a7f892974e8008ba82ec53494995f9b37b36f 100644
--- a/test/intl402/DateTimeFormat/prototype/formatToParts/length.js
+++ b/test/intl402/DateTimeFormat/prototype/formatToParts/length.js
@@ -6,7 +6,7 @@ description: Intl.DateTimeFormat.prototype.formatToParts.length.
 includes: [propertyHelper.js]
 ---*/
 
-assert.sameValue(Intl.DateTimeFormat.prototype.formatToParts.length, 0);
+assert.sameValue(Intl.DateTimeFormat.prototype.formatToParts.length, 1);
 
 verifyNotEnumerable(Intl.DateTimeFormat.prototype.formatToParts, "length");
 verifyNotWritable(Intl.DateTimeFormat.prototype.formatToParts, "length");
diff --git a/test/intl402/NumberFormat/11.1.1_32.js b/test/intl402/NumberFormat/11.1.1_32.js
index fba78bb8f1ec4cd9a9b0a34dc186196bbc1828da..cc45b009e292b4277a7f2e02b2baa23c17d427a4 100644
--- a/test/intl402/NumberFormat/11.1.1_32.js
+++ b/test/intl402/NumberFormat/11.1.1_32.js
@@ -9,28 +9,23 @@ description: >
 author: Norbert Lindenberg
 ---*/
 
-var read = 0;
+var minimumSignificantDigitsRead = false;
+var maximumSignificantDigitsRead = false;
 
 function readMinimumSignificantDigits() {
-    ++read;
-    if (read === 1) {
-        return 0; // invalid value, but on first read that's OK
-    } else if (read === 3) {
-        return 1; // valid value
-    } else {
-        $ERROR("minimumSignificantDigits read out of sequence: " + read + ".");
-    }
+    assert.sameValue(minimumSignificantDigitsRead, false,
+                     "minimumSignificantDigits getter already called");
+    assert.sameValue(maximumSignificantDigitsRead, false,
+                     "maximumSignificantDigits getter called before minimumSignificantDigits");
+    minimumSignificantDigitsRead = true;
+    return 1;
 }
 
 function readMaximumSignificantDigits() {
-    ++read;
-    if (read === 2) {
-        return 0; // invalid value, but on first read that's OK
-    } else if (read === 4) {
-        return 1; // valid value
-    } else {
-        $ERROR("maximumSignificantDigits read out of sequence: " + read + ".");
-    }
+    assert.sameValue(maximumSignificantDigitsRead, false,
+                     "maximumSignificantDigits getter already called");
+    maximumSignificantDigitsRead = true;
+    return 1;
 }
 
 var options = {};
@@ -41,6 +36,5 @@ Object.defineProperty(options, "maximumSignificantDigits",
 
 new Intl.NumberFormat("de", options);
 
-if (read !== 4) {
-    $ERROR("insuffient number of property reads: " + read + ".");
-}
+assert(minimumSignificantDigitsRead, "minimumSignificantDigits getter was called once");
+assert(maximumSignificantDigitsRead, "maximumSignificantDigits getter was called once");
diff --git a/test/intl402/NumberFormat/dft-currency-mnfd-range-check-mxfd.js b/test/intl402/NumberFormat/dft-currency-mnfd-range-check-mxfd.js
index 6cefcb96d21d2c25a3cf78974fd34f16d9c71c21..00eed32e4e6f2d9880a8b4d7d8b2442d0944ddbf 100644
--- a/test/intl402/NumberFormat/dft-currency-mnfd-range-check-mxfd.js
+++ b/test/intl402/NumberFormat/dft-currency-mnfd-range-check-mxfd.js
@@ -17,5 +17,5 @@ assert.throws(RangeError, () => new Intl.NumberFormat('en', {
 assert.throws(RangeError, () => new Intl.NumberFormat('en', {
     style: 'currency',
     currency: 'CLF',
-    maximumFractionDigits: 4
-}), 'CurrencyDigits(CLF) == 4');
+    maximumFractionDigits: 3
+}), 'CurrencyDigits(CLF) == 3');
diff --git a/test/intl402/PluralRules/prototype/prototype.js b/test/intl402/PluralRules/prototype/prototype.js
index c3b9bcae58ff3a530b9225fe36336702e562764f..c42e80331c73b444f89cb5799e1d19411b542314 100644
--- a/test/intl402/PluralRules/prototype/prototype.js
+++ b/test/intl402/PluralRules/prototype/prototype.js
@@ -4,14 +4,13 @@
 /*---
 esid: sec-properties-of-intl-pluralrules-prototype-object
 description: >
-    Tests that Intl.PluralRules.prototype is an object that  has been
+    Tests that Intl.PluralRules.prototype is not an object that has been
     initialized as an Intl.PluralRules.
 author: Zibi Braniecki
 ---*/
 
-// test by calling a function that would fail if "this" were not an object
+// test by calling a function that fails if "this" is not an object
 // initialized as an Intl.PluralRules
-if (typeof Intl.PluralRules.prototype.select(0) !== "string") {
-    $ERROR("Intl.PluralRules's prototype is not an object that has been " +
-        "initialized as an Intl.PluralRules");
-}
+assert.throws(TypeError, function() {
+    Intl.PluralRules.prototype.select(0);
+}, "Intl.PluralRules.prototype is not an object that has been initialized as an Intl.PluralRules");
diff --git a/test/intl402/PluralRules/this-not-ignored.js b/test/intl402/PluralRules/this-not-ignored.js
deleted file mode 100644
index 922fcc51b5c2490abcdcc794e739dacdf1da1db8..0000000000000000000000000000000000000000
--- a/test/intl402/PluralRules/this-not-ignored.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2016 Mozilla Corporation. All rights reserved.
-// This code is governed by the license found in the LICENSE file.
-
-/*---
-esid: sec-Intl.PluralRules
-description: Tests that the this-value is ignored in PluralRules
-author: Zibi Braniecki
-includes: [testIntl.js]
----*/
-
-testWithIntlConstructors(function (Constructor) {
-    var obj, newObj;
-
-    // variant 1: use constructor in a "new" expression
-    obj = new Constructor();
-    newObj = Intl.PluralRules.call(obj);
-    if (obj === newObj) {
-      $ERROR("PluralRules object created with \"new\" was not ignored as this-value.");
-    }
-
-    // variant 2: use constructor as a function
-    obj = Constructor();
-    newObj = Intl.PluralRules.call(obj);
-    if (obj === newObj) {
-      $ERROR("PluralRules object created with constructor as function was not ignored as this-value.");
-    }
-
-    return true;
-});
diff --git a/test/intl402/PluralRules/undefined-newtarget-throws.js b/test/intl402/PluralRules/undefined-newtarget-throws.js
new file mode 100644
index 0000000000000000000000000000000000000000..672f0c9e2cf73400ab7b0386a82543fa4ac5c1b3
--- /dev/null
+++ b/test/intl402/PluralRules/undefined-newtarget-throws.js
@@ -0,0 +1,27 @@
+// Copyright 2016 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+esid: sec-Intl.PluralRules
+description: Tests that PluralRules throws when called as a function
+author: Zibi Braniecki
+includes: [testIntl.js]
+---*/
+
+assert.throws(TypeError, function() {
+  Intl.PluralRules();
+}, "Intl.PluralRules throws when called as a function");
+
+assert.throws(TypeError, function() {
+  Intl.PluralRules.call(undefined);
+}, "Intl.PluralRules throws when called as a function with |undefined| as this-value");
+
+testWithIntlConstructors(function (Constructor) {
+    var obj = new Constructor();
+
+    assert.throws(TypeError, function() {
+        Intl.PluralRules.call(obj)
+    }, "Intl.PluralRules throws when called as a function with an Intl-object as this-value");
+
+    return true;
+});
diff --git a/test/language/expressions/async-generator/named-yield-star-async-next.js b/test/language/expressions/async-generator/named-yield-star-async-next.js
index f50070eb5fe15b166ecc6a38079b4fefdc7a00fd..cfc868fee7ae8022cdf453f706a084a79840310f 100644
--- a/test/language/expressions/async-generator/named-yield-star-async-next.js
+++ b/test/language/expressions/async-generator/named-yield-star-async-next.js
@@ -179,45 +179,42 @@ iter.next("next-arg-1").then(v => {
   assert.sameValue(log[8].name, "get next value (1)");
   assert.sameValue(log[8].thisValue.name, "next-result-1", "get next value thisValue");
 
-  assert.sameValue(log[9].name, "get next done (1)");
-  assert.sameValue(log[9].thisValue.name, "next-result-1", "get next done thisValue");
-
   assert.sameValue(v.value, "next-value-1");
   assert.sameValue(v.done, false);
 
-  assert.sameValue(log.length, 10, "log.length");
+  assert.sameValue(log.length, 9, "log.length");
 
   iter.next("next-arg-2").then(v => {
-    assert.sameValue(log[10].name, "get next");
-    assert.sameValue(log[10].thisValue.name, "asyncIterator", "get next thisValue");
+    assert.sameValue(log[9].name, "get next");
+    assert.sameValue(log[9].thisValue.name, "asyncIterator", "get next thisValue");
 
-    assert.sameValue(log[11].name, "call next");
-    assert.sameValue(log[11].thisValue.name, "asyncIterator", "next thisValue");
-    assert.sameValue(log[11].args.length, 1, "next args.length");
-    assert.sameValue(log[11].args[0], "next-arg-2", "next args[0]");
+    assert.sameValue(log[10].name, "call next");
+    assert.sameValue(log[10].thisValue.name, "asyncIterator", "next thisValue");
+    assert.sameValue(log[10].args.length, 1, "next args.length");
+    assert.sameValue(log[10].args[0], "next-arg-2", "next args[0]");
 
-    assert.sameValue(log[12].name, "get next then (2)");
-    assert.sameValue(log[12].thisValue.name, "next-promise-2", "get next then thisValue");
+    assert.sameValue(log[11].name, "get next then (2)");
+    assert.sameValue(log[11].thisValue.name, "next-promise-2", "get next then thisValue");
 
-    assert.sameValue(log[13].name, "call next then (2)");
-    assert.sameValue(log[13].thisValue.name, "next-promise-2", "next then thisValue");
-    assert.sameValue(log[13].args.length, 2, "next then args.length");
-    assert.sameValue(typeof log[13].args[0], "function", "next then args[0]");
-    assert.sameValue(typeof log[13].args[1], "function", "next then args[1]");
+    assert.sameValue(log[12].name, "call next then (2)");
+    assert.sameValue(log[12].thisValue.name, "next-promise-2", "next then thisValue");
+    assert.sameValue(log[12].args.length, 2, "next then args.length");
+    assert.sameValue(typeof log[12].args[0], "function", "next then args[0]");
+    assert.sameValue(typeof log[12].args[1], "function", "next then args[1]");
 
-    assert.sameValue(log[14].name, "get next done (2)");
-    assert.sameValue(log[14].thisValue.name, "next-result-2", "get next done thisValue");
+    assert.sameValue(log[13].name, "get next done (2)");
+    assert.sameValue(log[13].thisValue.name, "next-result-2", "get next done thisValue");
 
-    assert.sameValue(log[15].name, "get next value (2)");
-    assert.sameValue(log[15].thisValue.name, "next-result-2", "get next value thisValue");
+    assert.sameValue(log[14].name, "get next value (2)");
+    assert.sameValue(log[14].thisValue.name, "next-result-2", "get next value thisValue");
 
-    assert.sameValue(log[16].name, "after yield*");
-    assert.sameValue(log[16].value, "next-value-2");
+    assert.sameValue(log[15].name, "after yield*");
+    assert.sameValue(log[15].value, "next-value-2");
 
     assert.sameValue(v.value, "return-value");
     assert.sameValue(v.done, true);
 
-    assert.sameValue(log.length, 17, "log.length");
+    assert.sameValue(log.length, 16, "log.length");
   }).then($DONE, $DONE);
 }).catch($DONE);
 
diff --git a/test/language/expressions/async-generator/named-yield-star-async-return.js b/test/language/expressions/async-generator/named-yield-star-async-return.js
index 862d4b8e26a22c22ae4a240c752ae64b3f211862..d2c939362503d6a3f893c9cd2a7183aca69fbf39 100644
--- a/test/language/expressions/async-generator/named-yield-star-async-return.js
+++ b/test/language/expressions/async-generator/named-yield-star-async-return.js
@@ -23,25 +23,20 @@ info: |
         i. Assert: received.[[Type]] is return.
         ii. Let return be ? GetMethod(iterator, "return").
         iii. If return is undefined, return Completion(received).
-        iv. Let innerReturnResult be ? Call(return, iterator,
-            « received.[[Value]] »).
-        v. If generatorKind is async, then set innerReturnResult to
-           ? Await(innerReturnResult).
+        iv. Let innerReturnResult be ? Call(return, iterator, « received.[[Value]] »).
+        v. If generatorKind is async, then set innerReturnResult to ? Await(innerReturnResult).
         ...
         vii. Let done be ? IteratorComplete(innerReturnResult).
         viii. If done is true, then
              1. Let value be ? IteratorValue(innerReturnResult).
-             2. Return Completion{[[Type]]: return, [[Value]]: value,
-                [[Target]]: empty}.
-        ix. Let received be GeneratorYield(innerResult).
-
-    GeneratorYield ( iterNextObj )
+             2. If generatorKind is async, then set value to ? Await(value).
+             3. Return Completion{[[Type]]: return, [[Value]]: value, [[Target]]: empty}.
+        ix. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
+        ...
 
+    AsyncGeneratorYield ( value )
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
 
 ---*/
@@ -199,42 +194,39 @@ iter.next().then(v => {
     assert.sameValue(log[7].name, "get return value (1)");
     assert.sameValue(log[7].thisValue.name, "return-result-1", "get return value thisValue");
 
-    assert.sameValue(log[8].name, "get return done (1)");
-    assert.sameValue(log[8].thisValue.name, "return-result-1", "get return done thisValue");
-
     assert.sameValue(v.value, "return-value-1");
     assert.sameValue(v.done, false);
 
-    assert.sameValue(log.length, 9, "log.length");
+    assert.sameValue(log.length, 8, "log.length");
 
     iter.return("return-arg-2").then(v => {
-      assert.sameValue(log[9].name, "get return");
-      assert.sameValue(log[9].thisValue.name, "asyncIterator", "get return thisValue");
+      assert.sameValue(log[8].name, "get return");
+      assert.sameValue(log[8].thisValue.name, "asyncIterator", "get return thisValue");
 
-      assert.sameValue(log[10].name, "call return");
-      assert.sameValue(log[10].thisValue.name, "asyncIterator", "return thisValue");
-      assert.sameValue(log[10].args.length, 1, "return args.length");
-      assert.sameValue(log[10].args[0], "return-arg-2", "return args[0]");
+      assert.sameValue(log[9].name, "call return");
+      assert.sameValue(log[9].thisValue.name, "asyncIterator", "return thisValue");
+      assert.sameValue(log[9].args.length, 1, "return args.length");
+      assert.sameValue(log[9].args[0], "return-arg-2", "return args[0]");
 
-      assert.sameValue(log[11].name, "get return then (2)");
-      assert.sameValue(log[11].thisValue.name, "return-promise-2", "get return then thisValue");
+      assert.sameValue(log[10].name, "get return then (2)");
+      assert.sameValue(log[10].thisValue.name, "return-promise-2", "get return then thisValue");
 
-      assert.sameValue(log[12].name, "call return then (2)");
-      assert.sameValue(log[12].thisValue.name, "return-promise-2", "return then thisValue");
-      assert.sameValue(log[12].args.length, 2, "return then args.length");
-      assert.sameValue(typeof log[12].args[0], "function", "return then args[0]");
-      assert.sameValue(typeof log[12].args[1], "function", "return then args[1]");
+      assert.sameValue(log[11].name, "call return then (2)");
+      assert.sameValue(log[11].thisValue.name, "return-promise-2", "return then thisValue");
+      assert.sameValue(log[11].args.length, 2, "return then args.length");
+      assert.sameValue(typeof log[11].args[0], "function", "return then args[0]");
+      assert.sameValue(typeof log[11].args[1], "function", "return then args[1]");
 
-      assert.sameValue(log[13].name, "get return done (2)");
-      assert.sameValue(log[13].thisValue.name, "return-result-2", "get return done thisValue");
+      assert.sameValue(log[12].name, "get return done (2)");
+      assert.sameValue(log[12].thisValue.name, "return-result-2", "get return done thisValue");
 
-      assert.sameValue(log[14].name, "get return value (2)");
-      assert.sameValue(log[14].thisValue.name, "return-result-2", "get return value thisValue");
+      assert.sameValue(log[13].name, "get return value (2)");
+      assert.sameValue(log[13].thisValue.name, "return-result-2", "get return value thisValue");
 
       assert.sameValue(v.value, "return-value-2");
       assert.sameValue(v.done, true);
 
-      assert.sameValue(log.length, 15, "log.length");
+      assert.sameValue(log.length, 14, "log.length");
     }).then($DONE, $DONE);
   }).catch($DONE);
 }).catch($DONE);
diff --git a/test/language/expressions/async-generator/named-yield-star-async-throw.js b/test/language/expressions/async-generator/named-yield-star-async-throw.js
index 20898e11ef116e82ec8db98f650b7076016cb264..fed558ba954dc887729eb0c6ab4b1d0c1cd4a8c4 100644
--- a/test/language/expressions/async-generator/named-yield-star-async-throw.js
+++ b/test/language/expressions/async-generator/named-yield-star-async-throw.js
@@ -23,22 +23,20 @@ info: |
         i. Let throw be ? GetMethod(iterator, "throw").
         ii. If throw is not undefined, then
           1. Let innerResult be ? Call(throw, iterator, « received.[[Value]] »).
-          2. If generatorKind is async, then set innerResult to
-             ? Await(innerResult).
+          2. If generatorKind is async, then set innerResult to ? Await(innerResult).
           ...
           5. Let done be ? IteratorComplete(innerResult).
           6. If done is true, then
-            a. Return ? IteratorValue(innerResult).
-          7. Let received be GeneratorYield(innerResult).
+            a. Let resultValue be Return ? IteratorValue(innerResult).
+            b. If generatorKind is async, then set resultValue to ? Await(resultValue).
+            c. Return resultValue.
+          7. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
       ...
 
-    GeneratorYield ( iterNextObj )
+    AsyncGeneratorYield ( value )
 
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
 
 ---*/
@@ -201,45 +199,42 @@ iter.next().then(v => {
     assert.sameValue(log[7].name, "get throw value (1)");
     assert.sameValue(log[7].thisValue.name, "throw-result-1", "get throw value thisValue");
 
-    assert.sameValue(log[8].name, "get throw done (1)");
-    assert.sameValue(log[8].thisValue.name, "throw-result-1", "get throw done thisValue");
-
     assert.sameValue(v.value, "throw-value-1");
     assert.sameValue(v.done, false);
 
-    assert.sameValue(log.length, 9, "log.length");
+    assert.sameValue(log.length, 8, "log.length");
 
     iter.throw("throw-arg-2").then(v => {
-      assert.sameValue(log[9].name, "get throw");
-      assert.sameValue(log[9].thisValue.name, "asyncIterator", "get throw thisValue");
+      assert.sameValue(log[8].name, "get throw");
+      assert.sameValue(log[8].thisValue.name, "asyncIterator", "get throw thisValue");
 
-      assert.sameValue(log[10].name, "call throw");
-      assert.sameValue(log[10].thisValue.name, "asyncIterator", "throw thisValue");
-      assert.sameValue(log[10].args.length, 1, "throw args.length");
-      assert.sameValue(log[10].args[0], "throw-arg-2", "throw args[0]");
+      assert.sameValue(log[9].name, "call throw");
+      assert.sameValue(log[9].thisValue.name, "asyncIterator", "throw thisValue");
+      assert.sameValue(log[9].args.length, 1, "throw args.length");
+      assert.sameValue(log[9].args[0], "throw-arg-2", "throw args[0]");
 
-      assert.sameValue(log[11].name, "get throw then (2)");
-      assert.sameValue(log[11].thisValue.name, "throw-promise-2", "get throw thisValue");
+      assert.sameValue(log[10].name, "get throw then (2)");
+      assert.sameValue(log[10].thisValue.name, "throw-promise-2", "get throw thisValue");
 
-      assert.sameValue(log[12].name, "call throw then (2)");
-      assert.sameValue(log[12].thisValue.name, "throw-promise-2", "throw thisValue");
-      assert.sameValue(log[12].args.length, 2, "throw then args.length");
-      assert.sameValue(typeof log[12].args[0], "function", "throw then args[0]");
-      assert.sameValue(typeof log[12].args[1], "function", "throw then args[1]");
+      assert.sameValue(log[11].name, "call throw then (2)");
+      assert.sameValue(log[11].thisValue.name, "throw-promise-2", "throw thisValue");
+      assert.sameValue(log[11].args.length, 2, "throw then args.length");
+      assert.sameValue(typeof log[11].args[0], "function", "throw then args[0]");
+      assert.sameValue(typeof log[11].args[1], "function", "throw then args[1]");
 
-      assert.sameValue(log[13].name, "get throw done (2)");
-      assert.sameValue(log[13].thisValue.name, "throw-result-2", "get throw done thisValue");
+      assert.sameValue(log[12].name, "get throw done (2)");
+      assert.sameValue(log[12].thisValue.name, "throw-result-2", "get throw done thisValue");
 
-      assert.sameValue(log[14].name, "get throw value (2)");
-      assert.sameValue(log[14].thisValue.name, "throw-result-2", "get throw value thisValue");
+      assert.sameValue(log[13].name, "get throw value (2)");
+      assert.sameValue(log[13].thisValue.name, "throw-result-2", "get throw value thisValue");
 
-      assert.sameValue(log[15].name, "after yield*");
-      assert.sameValue(log[15].value, "throw-value-2");
+      assert.sameValue(log[14].name, "after yield*");
+      assert.sameValue(log[14].value, "throw-value-2");
 
       assert.sameValue(v.value, "return-value");
       assert.sameValue(v.done, true);
 
-      assert.sameValue(log.length, 16, "log.length");
+      assert.sameValue(log.length, 15, "log.length");
     }).then($DONE, $DONE);
   }).catch($DONE);
 }).catch($DONE);
diff --git a/test/language/expressions/async-generator/params-named-dflt-abrupt.js b/test/language/expressions/async-generator/params-named-dflt-abrupt.js
index 4ffc0f0253bd91585654dfb7906505ea39612755..6621d0bbc2cddae8b658584fdd42c1abe68267f9 100644
--- a/test/language/expressions/async-generator/params-named-dflt-abrupt.js
+++ b/test/language/expressions/async-generator/params-named-dflt-abrupt.js
@@ -5,7 +5,7 @@
 description: Abrupt completion returned by evaluation of initializer (async generator named function expression)
 esid: sec-asyncgenerator-definitions-evaluation
 features: [default-parameters, async-iteration]
-flags: [generated, async]
+flags: [generated]
 info: |
     AsyncGeneratorExpression : async [no LineTerminator here] function * BindingIdentifier
         ( FormalParameters ) { AsyncGeneratorBody }
diff --git a/test/language/expressions/async-generator/params-named-dflt-ref-later.js b/test/language/expressions/async-generator/params-named-dflt-ref-later.js
index 54919c33d844b0b12b4ec9222bda6dc4ed5d5ef0..2306d9ab0d012d5a1535506a677425aa98208f2d 100644
--- a/test/language/expressions/async-generator/params-named-dflt-ref-later.js
+++ b/test/language/expressions/async-generator/params-named-dflt-ref-later.js
@@ -5,7 +5,7 @@
 description: Referencing a parameter that occurs later in the ParameterList (async generator named function expression)
 esid: sec-asyncgenerator-definitions-evaluation
 features: [default-parameters, async-iteration]
-flags: [generated, async]
+flags: [generated]
 info: |
     AsyncGeneratorExpression : async [no LineTerminator here] function * BindingIdentifier
         ( FormalParameters ) { AsyncGeneratorBody }
diff --git a/test/language/expressions/async-generator/params-named-dflt-ref-self.js b/test/language/expressions/async-generator/params-named-dflt-ref-self.js
index 481030f7e4b3de398b9140f06580a9f39b27f8b9..0696d5de01379fb8815b7f0937ad30ba733a4717 100644
--- a/test/language/expressions/async-generator/params-named-dflt-ref-self.js
+++ b/test/language/expressions/async-generator/params-named-dflt-ref-self.js
@@ -5,7 +5,7 @@
 description: Referencing a parameter from within its own initializer (async generator named function expression)
 esid: sec-asyncgenerator-definitions-evaluation
 features: [default-parameters, async-iteration]
-flags: [generated, async]
+flags: [generated]
 info: |
     AsyncGeneratorExpression : async [no LineTerminator here] function * BindingIdentifier
         ( FormalParameters ) { AsyncGeneratorBody }
diff --git a/test/language/expressions/async-generator/yield-star-async-next.js b/test/language/expressions/async-generator/yield-star-async-next.js
index b9109de63489cd3737bff2ca0484484b804e4e5e..66490aae9dc171c581c84b9926ed2cf6d05b8b4d 100644
--- a/test/language/expressions/async-generator/yield-star-async-next.js
+++ b/test/language/expressions/async-generator/yield-star-async-next.js
@@ -179,45 +179,42 @@ iter.next("next-arg-1").then(v => {
   assert.sameValue(log[8].name, "get next value (1)");
   assert.sameValue(log[8].thisValue.name, "next-result-1", "get next value thisValue");
 
-  assert.sameValue(log[9].name, "get next done (1)");
-  assert.sameValue(log[9].thisValue.name, "next-result-1", "get next done thisValue");
-
   assert.sameValue(v.value, "next-value-1");
   assert.sameValue(v.done, false);
 
-  assert.sameValue(log.length, 10, "log.length");
+  assert.sameValue(log.length, 9, "log.length");
 
   iter.next("next-arg-2").then(v => {
-    assert.sameValue(log[10].name, "get next");
-    assert.sameValue(log[10].thisValue.name, "asyncIterator", "get next thisValue");
+    assert.sameValue(log[9].name, "get next");
+    assert.sameValue(log[9].thisValue.name, "asyncIterator", "get next thisValue");
 
-    assert.sameValue(log[11].name, "call next");
-    assert.sameValue(log[11].thisValue.name, "asyncIterator", "next thisValue");
-    assert.sameValue(log[11].args.length, 1, "next args.length");
-    assert.sameValue(log[11].args[0], "next-arg-2", "next args[0]");
+    assert.sameValue(log[10].name, "call next");
+    assert.sameValue(log[10].thisValue.name, "asyncIterator", "next thisValue");
+    assert.sameValue(log[10].args.length, 1, "next args.length");
+    assert.sameValue(log[10].args[0], "next-arg-2", "next args[0]");
 
-    assert.sameValue(log[12].name, "get next then (2)");
-    assert.sameValue(log[12].thisValue.name, "next-promise-2", "get next then thisValue");
+    assert.sameValue(log[11].name, "get next then (2)");
+    assert.sameValue(log[11].thisValue.name, "next-promise-2", "get next then thisValue");
 
-    assert.sameValue(log[13].name, "call next then (2)");
-    assert.sameValue(log[13].thisValue.name, "next-promise-2", "next then thisValue");
-    assert.sameValue(log[13].args.length, 2, "next then args.length");
-    assert.sameValue(typeof log[13].args[0], "function", "next then args[0]");
-    assert.sameValue(typeof log[13].args[1], "function", "next then args[1]");
+    assert.sameValue(log[12].name, "call next then (2)");
+    assert.sameValue(log[12].thisValue.name, "next-promise-2", "next then thisValue");
+    assert.sameValue(log[12].args.length, 2, "next then args.length");
+    assert.sameValue(typeof log[12].args[0], "function", "next then args[0]");
+    assert.sameValue(typeof log[12].args[1], "function", "next then args[1]");
 
-    assert.sameValue(log[14].name, "get next done (2)");
-    assert.sameValue(log[14].thisValue.name, "next-result-2", "get next done thisValue");
+    assert.sameValue(log[13].name, "get next done (2)");
+    assert.sameValue(log[13].thisValue.name, "next-result-2", "get next done thisValue");
 
-    assert.sameValue(log[15].name, "get next value (2)");
-    assert.sameValue(log[15].thisValue.name, "next-result-2", "get next value thisValue");
+    assert.sameValue(log[14].name, "get next value (2)");
+    assert.sameValue(log[14].thisValue.name, "next-result-2", "get next value thisValue");
 
-    assert.sameValue(log[16].name, "after yield*");
-    assert.sameValue(log[16].value, "next-value-2");
+    assert.sameValue(log[15].name, "after yield*");
+    assert.sameValue(log[15].value, "next-value-2");
 
     assert.sameValue(v.value, "return-value");
     assert.sameValue(v.done, true);
 
-    assert.sameValue(log.length, 17, "log.length");
+    assert.sameValue(log.length, 16, "log.length");
   }).then($DONE, $DONE);
 }).catch($DONE);
 
diff --git a/test/language/expressions/async-generator/yield-star-async-return.js b/test/language/expressions/async-generator/yield-star-async-return.js
index 44ba2b275bb42ef89938a15f423e09bc65b5200f..c30ad777705198292f396f9c68778535c74525fe 100644
--- a/test/language/expressions/async-generator/yield-star-async-return.js
+++ b/test/language/expressions/async-generator/yield-star-async-return.js
@@ -23,25 +23,20 @@ info: |
         i. Assert: received.[[Type]] is return.
         ii. Let return be ? GetMethod(iterator, "return").
         iii. If return is undefined, return Completion(received).
-        iv. Let innerReturnResult be ? Call(return, iterator,
-            « received.[[Value]] »).
-        v. If generatorKind is async, then set innerReturnResult to
-           ? Await(innerReturnResult).
+        iv. Let innerReturnResult be ? Call(return, iterator, « received.[[Value]] »).
+        v. If generatorKind is async, then set innerReturnResult to ? Await(innerReturnResult).
         ...
         vii. Let done be ? IteratorComplete(innerReturnResult).
         viii. If done is true, then
              1. Let value be ? IteratorValue(innerReturnResult).
-             2. Return Completion{[[Type]]: return, [[Value]]: value,
-                [[Target]]: empty}.
-        ix. Let received be GeneratorYield(innerResult).
-
-    GeneratorYield ( iterNextObj )
+             2. If generatorKind is async, then set value to ? Await(value).
+             3. Return Completion{[[Type]]: return, [[Value]]: value, [[Target]]: empty}.
+        ix. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
+        ...
 
+    AsyncGeneratorYield ( value )
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
 
 ---*/
@@ -199,42 +194,39 @@ iter.next().then(v => {
     assert.sameValue(log[7].name, "get return value (1)");
     assert.sameValue(log[7].thisValue.name, "return-result-1", "get return value thisValue");
 
-    assert.sameValue(log[8].name, "get return done (1)");
-    assert.sameValue(log[8].thisValue.name, "return-result-1", "get return done thisValue");
-
     assert.sameValue(v.value, "return-value-1");
     assert.sameValue(v.done, false);
 
-    assert.sameValue(log.length, 9, "log.length");
+    assert.sameValue(log.length, 8, "log.length");
 
     iter.return("return-arg-2").then(v => {
-      assert.sameValue(log[9].name, "get return");
-      assert.sameValue(log[9].thisValue.name, "asyncIterator", "get return thisValue");
+      assert.sameValue(log[8].name, "get return");
+      assert.sameValue(log[8].thisValue.name, "asyncIterator", "get return thisValue");
 
-      assert.sameValue(log[10].name, "call return");
-      assert.sameValue(log[10].thisValue.name, "asyncIterator", "return thisValue");
-      assert.sameValue(log[10].args.length, 1, "return args.length");
-      assert.sameValue(log[10].args[0], "return-arg-2", "return args[0]");
+      assert.sameValue(log[9].name, "call return");
+      assert.sameValue(log[9].thisValue.name, "asyncIterator", "return thisValue");
+      assert.sameValue(log[9].args.length, 1, "return args.length");
+      assert.sameValue(log[9].args[0], "return-arg-2", "return args[0]");
 
-      assert.sameValue(log[11].name, "get return then (2)");
-      assert.sameValue(log[11].thisValue.name, "return-promise-2", "get return then thisValue");
+      assert.sameValue(log[10].name, "get return then (2)");
+      assert.sameValue(log[10].thisValue.name, "return-promise-2", "get return then thisValue");
 
-      assert.sameValue(log[12].name, "call return then (2)");
-      assert.sameValue(log[12].thisValue.name, "return-promise-2", "return then thisValue");
-      assert.sameValue(log[12].args.length, 2, "return then args.length");
-      assert.sameValue(typeof log[12].args[0], "function", "return then args[0]");
-      assert.sameValue(typeof log[12].args[1], "function", "return then args[1]");
+      assert.sameValue(log[11].name, "call return then (2)");
+      assert.sameValue(log[11].thisValue.name, "return-promise-2", "return then thisValue");
+      assert.sameValue(log[11].args.length, 2, "return then args.length");
+      assert.sameValue(typeof log[11].args[0], "function", "return then args[0]");
+      assert.sameValue(typeof log[11].args[1], "function", "return then args[1]");
 
-      assert.sameValue(log[13].name, "get return done (2)");
-      assert.sameValue(log[13].thisValue.name, "return-result-2", "get return done thisValue");
+      assert.sameValue(log[12].name, "get return done (2)");
+      assert.sameValue(log[12].thisValue.name, "return-result-2", "get return done thisValue");
 
-      assert.sameValue(log[14].name, "get return value (2)");
-      assert.sameValue(log[14].thisValue.name, "return-result-2", "get return value thisValue");
+      assert.sameValue(log[13].name, "get return value (2)");
+      assert.sameValue(log[13].thisValue.name, "return-result-2", "get return value thisValue");
 
       assert.sameValue(v.value, "return-value-2");
       assert.sameValue(v.done, true);
 
-      assert.sameValue(log.length, 15, "log.length");
+      assert.sameValue(log.length, 14, "log.length");
     }).then($DONE, $DONE);
   }).catch($DONE);
 }).catch($DONE);
diff --git a/test/language/expressions/async-generator/yield-star-async-throw.js b/test/language/expressions/async-generator/yield-star-async-throw.js
index c18f7bbef03ead307c310cf90753e4d8811d83fc..0f28369c7d48ee89414e3be375a969a095f7dd78 100644
--- a/test/language/expressions/async-generator/yield-star-async-throw.js
+++ b/test/language/expressions/async-generator/yield-star-async-throw.js
@@ -23,22 +23,20 @@ info: |
         i. Let throw be ? GetMethod(iterator, "throw").
         ii. If throw is not undefined, then
           1. Let innerResult be ? Call(throw, iterator, « received.[[Value]] »).
-          2. If generatorKind is async, then set innerResult to
-             ? Await(innerResult).
+          2. If generatorKind is async, then set innerResult to ? Await(innerResult).
           ...
           5. Let done be ? IteratorComplete(innerResult).
           6. If done is true, then
-            a. Return ? IteratorValue(innerResult).
-          7. Let received be GeneratorYield(innerResult).
+            a. Let resultValue be Return ? IteratorValue(innerResult).
+            b. If generatorKind is async, then set resultValue to ? Await(resultValue).
+            c. Return resultValue.
+          7. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
       ...
 
-    GeneratorYield ( iterNextObj )
+    AsyncGeneratorYield ( value )
 
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
 
 ---*/
@@ -201,45 +199,42 @@ iter.next().then(v => {
     assert.sameValue(log[7].name, "get throw value (1)");
     assert.sameValue(log[7].thisValue.name, "throw-result-1", "get throw value thisValue");
 
-    assert.sameValue(log[8].name, "get throw done (1)");
-    assert.sameValue(log[8].thisValue.name, "throw-result-1", "get throw done thisValue");
-
     assert.sameValue(v.value, "throw-value-1");
     assert.sameValue(v.done, false);
 
-    assert.sameValue(log.length, 9, "log.length");
+    assert.sameValue(log.length, 8, "log.length");
 
     iter.throw("throw-arg-2").then(v => {
-      assert.sameValue(log[9].name, "get throw");
-      assert.sameValue(log[9].thisValue.name, "asyncIterator", "get throw thisValue");
+      assert.sameValue(log[8].name, "get throw");
+      assert.sameValue(log[8].thisValue.name, "asyncIterator", "get throw thisValue");
 
-      assert.sameValue(log[10].name, "call throw");
-      assert.sameValue(log[10].thisValue.name, "asyncIterator", "throw thisValue");
-      assert.sameValue(log[10].args.length, 1, "throw args.length");
-      assert.sameValue(log[10].args[0], "throw-arg-2", "throw args[0]");
+      assert.sameValue(log[9].name, "call throw");
+      assert.sameValue(log[9].thisValue.name, "asyncIterator", "throw thisValue");
+      assert.sameValue(log[9].args.length, 1, "throw args.length");
+      assert.sameValue(log[9].args[0], "throw-arg-2", "throw args[0]");
 
-      assert.sameValue(log[11].name, "get throw then (2)");
-      assert.sameValue(log[11].thisValue.name, "throw-promise-2", "get throw thisValue");
+      assert.sameValue(log[10].name, "get throw then (2)");
+      assert.sameValue(log[10].thisValue.name, "throw-promise-2", "get throw thisValue");
 
-      assert.sameValue(log[12].name, "call throw then (2)");
-      assert.sameValue(log[12].thisValue.name, "throw-promise-2", "throw thisValue");
-      assert.sameValue(log[12].args.length, 2, "throw then args.length");
-      assert.sameValue(typeof log[12].args[0], "function", "throw then args[0]");
-      assert.sameValue(typeof log[12].args[1], "function", "throw then args[1]");
+      assert.sameValue(log[11].name, "call throw then (2)");
+      assert.sameValue(log[11].thisValue.name, "throw-promise-2", "throw thisValue");
+      assert.sameValue(log[11].args.length, 2, "throw then args.length");
+      assert.sameValue(typeof log[11].args[0], "function", "throw then args[0]");
+      assert.sameValue(typeof log[11].args[1], "function", "throw then args[1]");
 
-      assert.sameValue(log[13].name, "get throw done (2)");
-      assert.sameValue(log[13].thisValue.name, "throw-result-2", "get throw done thisValue");
+      assert.sameValue(log[12].name, "get throw done (2)");
+      assert.sameValue(log[12].thisValue.name, "throw-result-2", "get throw done thisValue");
 
-      assert.sameValue(log[14].name, "get throw value (2)");
-      assert.sameValue(log[14].thisValue.name, "throw-result-2", "get throw value thisValue");
+      assert.sameValue(log[13].name, "get throw value (2)");
+      assert.sameValue(log[13].thisValue.name, "throw-result-2", "get throw value thisValue");
 
-      assert.sameValue(log[15].name, "after yield*");
-      assert.sameValue(log[15].value, "throw-value-2");
+      assert.sameValue(log[14].name, "after yield*");
+      assert.sameValue(log[14].value, "throw-value-2");
 
       assert.sameValue(v.value, "return-value");
       assert.sameValue(v.done, true);
 
-      assert.sameValue(log.length, 16, "log.length");
+      assert.sameValue(log.length, 15, "log.length");
     }).then($DONE, $DONE);
   }).catch($DONE);
 }).catch($DONE);
diff --git a/test/language/expressions/class/async-gen-method-static-yield-star-async-next.js b/test/language/expressions/class/async-gen-method-static-yield-star-async-next.js
index 57ada56da139eb5e3035fdaf4aaef1735f833a8e..ee99eba47033ff99a35d1aa5f4aeb6d2dbc5e654 100644
--- a/test/language/expressions/class/async-gen-method-static-yield-star-async-next.js
+++ b/test/language/expressions/class/async-gen-method-static-yield-star-async-next.js
@@ -186,45 +186,42 @@ iter.next("next-arg-1").then(v => {
   assert.sameValue(log[8].name, "get next value (1)");
   assert.sameValue(log[8].thisValue.name, "next-result-1", "get next value thisValue");
 
-  assert.sameValue(log[9].name, "get next done (1)");
-  assert.sameValue(log[9].thisValue.name, "next-result-1", "get next done thisValue");
-
   assert.sameValue(v.value, "next-value-1");
   assert.sameValue(v.done, false);
 
-  assert.sameValue(log.length, 10, "log.length");
+  assert.sameValue(log.length, 9, "log.length");
 
   iter.next("next-arg-2").then(v => {
-    assert.sameValue(log[10].name, "get next");
-    assert.sameValue(log[10].thisValue.name, "asyncIterator", "get next thisValue");
+    assert.sameValue(log[9].name, "get next");
+    assert.sameValue(log[9].thisValue.name, "asyncIterator", "get next thisValue");
 
-    assert.sameValue(log[11].name, "call next");
-    assert.sameValue(log[11].thisValue.name, "asyncIterator", "next thisValue");
-    assert.sameValue(log[11].args.length, 1, "next args.length");
-    assert.sameValue(log[11].args[0], "next-arg-2", "next args[0]");
+    assert.sameValue(log[10].name, "call next");
+    assert.sameValue(log[10].thisValue.name, "asyncIterator", "next thisValue");
+    assert.sameValue(log[10].args.length, 1, "next args.length");
+    assert.sameValue(log[10].args[0], "next-arg-2", "next args[0]");
 
-    assert.sameValue(log[12].name, "get next then (2)");
-    assert.sameValue(log[12].thisValue.name, "next-promise-2", "get next then thisValue");
+    assert.sameValue(log[11].name, "get next then (2)");
+    assert.sameValue(log[11].thisValue.name, "next-promise-2", "get next then thisValue");
 
-    assert.sameValue(log[13].name, "call next then (2)");
-    assert.sameValue(log[13].thisValue.name, "next-promise-2", "next then thisValue");
-    assert.sameValue(log[13].args.length, 2, "next then args.length");
-    assert.sameValue(typeof log[13].args[0], "function", "next then args[0]");
-    assert.sameValue(typeof log[13].args[1], "function", "next then args[1]");
+    assert.sameValue(log[12].name, "call next then (2)");
+    assert.sameValue(log[12].thisValue.name, "next-promise-2", "next then thisValue");
+    assert.sameValue(log[12].args.length, 2, "next then args.length");
+    assert.sameValue(typeof log[12].args[0], "function", "next then args[0]");
+    assert.sameValue(typeof log[12].args[1], "function", "next then args[1]");
 
-    assert.sameValue(log[14].name, "get next done (2)");
-    assert.sameValue(log[14].thisValue.name, "next-result-2", "get next done thisValue");
+    assert.sameValue(log[13].name, "get next done (2)");
+    assert.sameValue(log[13].thisValue.name, "next-result-2", "get next done thisValue");
 
-    assert.sameValue(log[15].name, "get next value (2)");
-    assert.sameValue(log[15].thisValue.name, "next-result-2", "get next value thisValue");
+    assert.sameValue(log[14].name, "get next value (2)");
+    assert.sameValue(log[14].thisValue.name, "next-result-2", "get next value thisValue");
 
-    assert.sameValue(log[16].name, "after yield*");
-    assert.sameValue(log[16].value, "next-value-2");
+    assert.sameValue(log[15].name, "after yield*");
+    assert.sameValue(log[15].value, "next-value-2");
 
     assert.sameValue(v.value, "return-value");
     assert.sameValue(v.done, true);
 
-    assert.sameValue(log.length, 17, "log.length");
+    assert.sameValue(log.length, 16, "log.length");
   }).then($DONE, $DONE);
 }).catch($DONE);
 
diff --git a/test/language/expressions/class/async-gen-method-static-yield-star-async-return.js b/test/language/expressions/class/async-gen-method-static-yield-star-async-return.js
index 2570ccc187404710d1f95602f9148cff298776b4..3cf99ce33702e7ab5a56b9641aed442c536d144d 100644
--- a/test/language/expressions/class/async-gen-method-static-yield-star-async-return.js
+++ b/test/language/expressions/class/async-gen-method-static-yield-star-async-return.js
@@ -28,25 +28,20 @@ info: |
         i. Assert: received.[[Type]] is return.
         ii. Let return be ? GetMethod(iterator, "return").
         iii. If return is undefined, return Completion(received).
-        iv. Let innerReturnResult be ? Call(return, iterator,
-            « received.[[Value]] »).
-        v. If generatorKind is async, then set innerReturnResult to
-           ? Await(innerReturnResult).
+        iv. Let innerReturnResult be ? Call(return, iterator, « received.[[Value]] »).
+        v. If generatorKind is async, then set innerReturnResult to ? Await(innerReturnResult).
         ...
         vii. Let done be ? IteratorComplete(innerReturnResult).
         viii. If done is true, then
              1. Let value be ? IteratorValue(innerReturnResult).
-             2. Return Completion{[[Type]]: return, [[Value]]: value,
-                [[Target]]: empty}.
-        ix. Let received be GeneratorYield(innerResult).
-
-    GeneratorYield ( iterNextObj )
+             2. If generatorKind is async, then set value to ? Await(value).
+             3. Return Completion{[[Type]]: return, [[Value]]: value, [[Target]]: empty}.
+        ix. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
+        ...
 
+    AsyncGeneratorYield ( value )
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
 
 ---*/
@@ -206,42 +201,39 @@ iter.next().then(v => {
     assert.sameValue(log[7].name, "get return value (1)");
     assert.sameValue(log[7].thisValue.name, "return-result-1", "get return value thisValue");
 
-    assert.sameValue(log[8].name, "get return done (1)");
-    assert.sameValue(log[8].thisValue.name, "return-result-1", "get return done thisValue");
-
     assert.sameValue(v.value, "return-value-1");
     assert.sameValue(v.done, false);
 
-    assert.sameValue(log.length, 9, "log.length");
+    assert.sameValue(log.length, 8, "log.length");
 
     iter.return("return-arg-2").then(v => {
-      assert.sameValue(log[9].name, "get return");
-      assert.sameValue(log[9].thisValue.name, "asyncIterator", "get return thisValue");
+      assert.sameValue(log[8].name, "get return");
+      assert.sameValue(log[8].thisValue.name, "asyncIterator", "get return thisValue");
 
-      assert.sameValue(log[10].name, "call return");
-      assert.sameValue(log[10].thisValue.name, "asyncIterator", "return thisValue");
-      assert.sameValue(log[10].args.length, 1, "return args.length");
-      assert.sameValue(log[10].args[0], "return-arg-2", "return args[0]");
+      assert.sameValue(log[9].name, "call return");
+      assert.sameValue(log[9].thisValue.name, "asyncIterator", "return thisValue");
+      assert.sameValue(log[9].args.length, 1, "return args.length");
+      assert.sameValue(log[9].args[0], "return-arg-2", "return args[0]");
 
-      assert.sameValue(log[11].name, "get return then (2)");
-      assert.sameValue(log[11].thisValue.name, "return-promise-2", "get return then thisValue");
+      assert.sameValue(log[10].name, "get return then (2)");
+      assert.sameValue(log[10].thisValue.name, "return-promise-2", "get return then thisValue");
 
-      assert.sameValue(log[12].name, "call return then (2)");
-      assert.sameValue(log[12].thisValue.name, "return-promise-2", "return then thisValue");
-      assert.sameValue(log[12].args.length, 2, "return then args.length");
-      assert.sameValue(typeof log[12].args[0], "function", "return then args[0]");
-      assert.sameValue(typeof log[12].args[1], "function", "return then args[1]");
+      assert.sameValue(log[11].name, "call return then (2)");
+      assert.sameValue(log[11].thisValue.name, "return-promise-2", "return then thisValue");
+      assert.sameValue(log[11].args.length, 2, "return then args.length");
+      assert.sameValue(typeof log[11].args[0], "function", "return then args[0]");
+      assert.sameValue(typeof log[11].args[1], "function", "return then args[1]");
 
-      assert.sameValue(log[13].name, "get return done (2)");
-      assert.sameValue(log[13].thisValue.name, "return-result-2", "get return done thisValue");
+      assert.sameValue(log[12].name, "get return done (2)");
+      assert.sameValue(log[12].thisValue.name, "return-result-2", "get return done thisValue");
 
-      assert.sameValue(log[14].name, "get return value (2)");
-      assert.sameValue(log[14].thisValue.name, "return-result-2", "get return value thisValue");
+      assert.sameValue(log[13].name, "get return value (2)");
+      assert.sameValue(log[13].thisValue.name, "return-result-2", "get return value thisValue");
 
       assert.sameValue(v.value, "return-value-2");
       assert.sameValue(v.done, true);
 
-      assert.sameValue(log.length, 15, "log.length");
+      assert.sameValue(log.length, 14, "log.length");
     }).then($DONE, $DONE);
   }).catch($DONE);
 }).catch($DONE);
diff --git a/test/language/expressions/class/async-gen-method-static-yield-star-async-throw.js b/test/language/expressions/class/async-gen-method-static-yield-star-async-throw.js
index 2d068919e66288ebd5a4ef4681268adaa2719710..a61d9dbe99ccc2589d14e7cc9f9c597315361aa0 100644
--- a/test/language/expressions/class/async-gen-method-static-yield-star-async-throw.js
+++ b/test/language/expressions/class/async-gen-method-static-yield-star-async-throw.js
@@ -28,22 +28,20 @@ info: |
         i. Let throw be ? GetMethod(iterator, "throw").
         ii. If throw is not undefined, then
           1. Let innerResult be ? Call(throw, iterator, « received.[[Value]] »).
-          2. If generatorKind is async, then set innerResult to
-             ? Await(innerResult).
+          2. If generatorKind is async, then set innerResult to ? Await(innerResult).
           ...
           5. Let done be ? IteratorComplete(innerResult).
           6. If done is true, then
-            a. Return ? IteratorValue(innerResult).
-          7. Let received be GeneratorYield(innerResult).
+            a. Let resultValue be Return ? IteratorValue(innerResult).
+            b. If generatorKind is async, then set resultValue to ? Await(resultValue).
+            c. Return resultValue.
+          7. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
       ...
 
-    GeneratorYield ( iterNextObj )
+    AsyncGeneratorYield ( value )
 
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
 
 ---*/
@@ -208,45 +206,42 @@ iter.next().then(v => {
     assert.sameValue(log[7].name, "get throw value (1)");
     assert.sameValue(log[7].thisValue.name, "throw-result-1", "get throw value thisValue");
 
-    assert.sameValue(log[8].name, "get throw done (1)");
-    assert.sameValue(log[8].thisValue.name, "throw-result-1", "get throw done thisValue");
-
     assert.sameValue(v.value, "throw-value-1");
     assert.sameValue(v.done, false);
 
-    assert.sameValue(log.length, 9, "log.length");
+    assert.sameValue(log.length, 8, "log.length");
 
     iter.throw("throw-arg-2").then(v => {
-      assert.sameValue(log[9].name, "get throw");
-      assert.sameValue(log[9].thisValue.name, "asyncIterator", "get throw thisValue");
+      assert.sameValue(log[8].name, "get throw");
+      assert.sameValue(log[8].thisValue.name, "asyncIterator", "get throw thisValue");
 
-      assert.sameValue(log[10].name, "call throw");
-      assert.sameValue(log[10].thisValue.name, "asyncIterator", "throw thisValue");
-      assert.sameValue(log[10].args.length, 1, "throw args.length");
-      assert.sameValue(log[10].args[0], "throw-arg-2", "throw args[0]");
+      assert.sameValue(log[9].name, "call throw");
+      assert.sameValue(log[9].thisValue.name, "asyncIterator", "throw thisValue");
+      assert.sameValue(log[9].args.length, 1, "throw args.length");
+      assert.sameValue(log[9].args[0], "throw-arg-2", "throw args[0]");
 
-      assert.sameValue(log[11].name, "get throw then (2)");
-      assert.sameValue(log[11].thisValue.name, "throw-promise-2", "get throw thisValue");
+      assert.sameValue(log[10].name, "get throw then (2)");
+      assert.sameValue(log[10].thisValue.name, "throw-promise-2", "get throw thisValue");
 
-      assert.sameValue(log[12].name, "call throw then (2)");
-      assert.sameValue(log[12].thisValue.name, "throw-promise-2", "throw thisValue");
-      assert.sameValue(log[12].args.length, 2, "throw then args.length");
-      assert.sameValue(typeof log[12].args[0], "function", "throw then args[0]");
-      assert.sameValue(typeof log[12].args[1], "function", "throw then args[1]");
+      assert.sameValue(log[11].name, "call throw then (2)");
+      assert.sameValue(log[11].thisValue.name, "throw-promise-2", "throw thisValue");
+      assert.sameValue(log[11].args.length, 2, "throw then args.length");
+      assert.sameValue(typeof log[11].args[0], "function", "throw then args[0]");
+      assert.sameValue(typeof log[11].args[1], "function", "throw then args[1]");
 
-      assert.sameValue(log[13].name, "get throw done (2)");
-      assert.sameValue(log[13].thisValue.name, "throw-result-2", "get throw done thisValue");
+      assert.sameValue(log[12].name, "get throw done (2)");
+      assert.sameValue(log[12].thisValue.name, "throw-result-2", "get throw done thisValue");
 
-      assert.sameValue(log[14].name, "get throw value (2)");
-      assert.sameValue(log[14].thisValue.name, "throw-result-2", "get throw value thisValue");
+      assert.sameValue(log[13].name, "get throw value (2)");
+      assert.sameValue(log[13].thisValue.name, "throw-result-2", "get throw value thisValue");
 
-      assert.sameValue(log[15].name, "after yield*");
-      assert.sameValue(log[15].value, "throw-value-2");
+      assert.sameValue(log[14].name, "after yield*");
+      assert.sameValue(log[14].value, "throw-value-2");
 
       assert.sameValue(v.value, "return-value");
       assert.sameValue(v.done, true);
 
-      assert.sameValue(log.length, 16, "log.length");
+      assert.sameValue(log.length, 15, "log.length");
     }).then($DONE, $DONE);
   }).catch($DONE);
 }).catch($DONE);
diff --git a/test/language/expressions/class/async-gen-method-yield-star-async-next.js b/test/language/expressions/class/async-gen-method-yield-star-async-next.js
index 33306ad1146dd0148b2f45365e9f58c840a74267..58c027c35d9c01b67d817671e4b2556b77e85257 100644
--- a/test/language/expressions/class/async-gen-method-yield-star-async-next.js
+++ b/test/language/expressions/class/async-gen-method-yield-star-async-next.js
@@ -186,45 +186,42 @@ iter.next("next-arg-1").then(v => {
   assert.sameValue(log[8].name, "get next value (1)");
   assert.sameValue(log[8].thisValue.name, "next-result-1", "get next value thisValue");
 
-  assert.sameValue(log[9].name, "get next done (1)");
-  assert.sameValue(log[9].thisValue.name, "next-result-1", "get next done thisValue");
-
   assert.sameValue(v.value, "next-value-1");
   assert.sameValue(v.done, false);
 
-  assert.sameValue(log.length, 10, "log.length");
+  assert.sameValue(log.length, 9, "log.length");
 
   iter.next("next-arg-2").then(v => {
-    assert.sameValue(log[10].name, "get next");
-    assert.sameValue(log[10].thisValue.name, "asyncIterator", "get next thisValue");
+    assert.sameValue(log[9].name, "get next");
+    assert.sameValue(log[9].thisValue.name, "asyncIterator", "get next thisValue");
 
-    assert.sameValue(log[11].name, "call next");
-    assert.sameValue(log[11].thisValue.name, "asyncIterator", "next thisValue");
-    assert.sameValue(log[11].args.length, 1, "next args.length");
-    assert.sameValue(log[11].args[0], "next-arg-2", "next args[0]");
+    assert.sameValue(log[10].name, "call next");
+    assert.sameValue(log[10].thisValue.name, "asyncIterator", "next thisValue");
+    assert.sameValue(log[10].args.length, 1, "next args.length");
+    assert.sameValue(log[10].args[0], "next-arg-2", "next args[0]");
 
-    assert.sameValue(log[12].name, "get next then (2)");
-    assert.sameValue(log[12].thisValue.name, "next-promise-2", "get next then thisValue");
+    assert.sameValue(log[11].name, "get next then (2)");
+    assert.sameValue(log[11].thisValue.name, "next-promise-2", "get next then thisValue");
 
-    assert.sameValue(log[13].name, "call next then (2)");
-    assert.sameValue(log[13].thisValue.name, "next-promise-2", "next then thisValue");
-    assert.sameValue(log[13].args.length, 2, "next then args.length");
-    assert.sameValue(typeof log[13].args[0], "function", "next then args[0]");
-    assert.sameValue(typeof log[13].args[1], "function", "next then args[1]");
+    assert.sameValue(log[12].name, "call next then (2)");
+    assert.sameValue(log[12].thisValue.name, "next-promise-2", "next then thisValue");
+    assert.sameValue(log[12].args.length, 2, "next then args.length");
+    assert.sameValue(typeof log[12].args[0], "function", "next then args[0]");
+    assert.sameValue(typeof log[12].args[1], "function", "next then args[1]");
 
-    assert.sameValue(log[14].name, "get next done (2)");
-    assert.sameValue(log[14].thisValue.name, "next-result-2", "get next done thisValue");
+    assert.sameValue(log[13].name, "get next done (2)");
+    assert.sameValue(log[13].thisValue.name, "next-result-2", "get next done thisValue");
 
-    assert.sameValue(log[15].name, "get next value (2)");
-    assert.sameValue(log[15].thisValue.name, "next-result-2", "get next value thisValue");
+    assert.sameValue(log[14].name, "get next value (2)");
+    assert.sameValue(log[14].thisValue.name, "next-result-2", "get next value thisValue");
 
-    assert.sameValue(log[16].name, "after yield*");
-    assert.sameValue(log[16].value, "next-value-2");
+    assert.sameValue(log[15].name, "after yield*");
+    assert.sameValue(log[15].value, "next-value-2");
 
     assert.sameValue(v.value, "return-value");
     assert.sameValue(v.done, true);
 
-    assert.sameValue(log.length, 17, "log.length");
+    assert.sameValue(log.length, 16, "log.length");
   }).then($DONE, $DONE);
 }).catch($DONE);
 
diff --git a/test/language/expressions/class/async-gen-method-yield-star-async-return.js b/test/language/expressions/class/async-gen-method-yield-star-async-return.js
index d4fae2bd8eff33fdcc216451e93f23700d005ef3..2b6f87f409336b2fa35b868e7b892d21f61bba33 100644
--- a/test/language/expressions/class/async-gen-method-yield-star-async-return.js
+++ b/test/language/expressions/class/async-gen-method-yield-star-async-return.js
@@ -28,25 +28,20 @@ info: |
         i. Assert: received.[[Type]] is return.
         ii. Let return be ? GetMethod(iterator, "return").
         iii. If return is undefined, return Completion(received).
-        iv. Let innerReturnResult be ? Call(return, iterator,
-            « received.[[Value]] »).
-        v. If generatorKind is async, then set innerReturnResult to
-           ? Await(innerReturnResult).
+        iv. Let innerReturnResult be ? Call(return, iterator, « received.[[Value]] »).
+        v. If generatorKind is async, then set innerReturnResult to ? Await(innerReturnResult).
         ...
         vii. Let done be ? IteratorComplete(innerReturnResult).
         viii. If done is true, then
              1. Let value be ? IteratorValue(innerReturnResult).
-             2. Return Completion{[[Type]]: return, [[Value]]: value,
-                [[Target]]: empty}.
-        ix. Let received be GeneratorYield(innerResult).
-
-    GeneratorYield ( iterNextObj )
+             2. If generatorKind is async, then set value to ? Await(value).
+             3. Return Completion{[[Type]]: return, [[Value]]: value, [[Target]]: empty}.
+        ix. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
+        ...
 
+    AsyncGeneratorYield ( value )
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
 
 ---*/
@@ -206,42 +201,39 @@ iter.next().then(v => {
     assert.sameValue(log[7].name, "get return value (1)");
     assert.sameValue(log[7].thisValue.name, "return-result-1", "get return value thisValue");
 
-    assert.sameValue(log[8].name, "get return done (1)");
-    assert.sameValue(log[8].thisValue.name, "return-result-1", "get return done thisValue");
-
     assert.sameValue(v.value, "return-value-1");
     assert.sameValue(v.done, false);
 
-    assert.sameValue(log.length, 9, "log.length");
+    assert.sameValue(log.length, 8, "log.length");
 
     iter.return("return-arg-2").then(v => {
-      assert.sameValue(log[9].name, "get return");
-      assert.sameValue(log[9].thisValue.name, "asyncIterator", "get return thisValue");
+      assert.sameValue(log[8].name, "get return");
+      assert.sameValue(log[8].thisValue.name, "asyncIterator", "get return thisValue");
 
-      assert.sameValue(log[10].name, "call return");
-      assert.sameValue(log[10].thisValue.name, "asyncIterator", "return thisValue");
-      assert.sameValue(log[10].args.length, 1, "return args.length");
-      assert.sameValue(log[10].args[0], "return-arg-2", "return args[0]");
+      assert.sameValue(log[9].name, "call return");
+      assert.sameValue(log[9].thisValue.name, "asyncIterator", "return thisValue");
+      assert.sameValue(log[9].args.length, 1, "return args.length");
+      assert.sameValue(log[9].args[0], "return-arg-2", "return args[0]");
 
-      assert.sameValue(log[11].name, "get return then (2)");
-      assert.sameValue(log[11].thisValue.name, "return-promise-2", "get return then thisValue");
+      assert.sameValue(log[10].name, "get return then (2)");
+      assert.sameValue(log[10].thisValue.name, "return-promise-2", "get return then thisValue");
 
-      assert.sameValue(log[12].name, "call return then (2)");
-      assert.sameValue(log[12].thisValue.name, "return-promise-2", "return then thisValue");
-      assert.sameValue(log[12].args.length, 2, "return then args.length");
-      assert.sameValue(typeof log[12].args[0], "function", "return then args[0]");
-      assert.sameValue(typeof log[12].args[1], "function", "return then args[1]");
+      assert.sameValue(log[11].name, "call return then (2)");
+      assert.sameValue(log[11].thisValue.name, "return-promise-2", "return then thisValue");
+      assert.sameValue(log[11].args.length, 2, "return then args.length");
+      assert.sameValue(typeof log[11].args[0], "function", "return then args[0]");
+      assert.sameValue(typeof log[11].args[1], "function", "return then args[1]");
 
-      assert.sameValue(log[13].name, "get return done (2)");
-      assert.sameValue(log[13].thisValue.name, "return-result-2", "get return done thisValue");
+      assert.sameValue(log[12].name, "get return done (2)");
+      assert.sameValue(log[12].thisValue.name, "return-result-2", "get return done thisValue");
 
-      assert.sameValue(log[14].name, "get return value (2)");
-      assert.sameValue(log[14].thisValue.name, "return-result-2", "get return value thisValue");
+      assert.sameValue(log[13].name, "get return value (2)");
+      assert.sameValue(log[13].thisValue.name, "return-result-2", "get return value thisValue");
 
       assert.sameValue(v.value, "return-value-2");
       assert.sameValue(v.done, true);
 
-      assert.sameValue(log.length, 15, "log.length");
+      assert.sameValue(log.length, 14, "log.length");
     }).then($DONE, $DONE);
   }).catch($DONE);
 }).catch($DONE);
diff --git a/test/language/expressions/class/async-gen-method-yield-star-async-throw.js b/test/language/expressions/class/async-gen-method-yield-star-async-throw.js
index 460fd7004cb6d990036f21b31e7c085d3dd732f6..fa554577fac1ff00f81f7e497b22283d97ad7913 100644
--- a/test/language/expressions/class/async-gen-method-yield-star-async-throw.js
+++ b/test/language/expressions/class/async-gen-method-yield-star-async-throw.js
@@ -28,22 +28,20 @@ info: |
         i. Let throw be ? GetMethod(iterator, "throw").
         ii. If throw is not undefined, then
           1. Let innerResult be ? Call(throw, iterator, « received.[[Value]] »).
-          2. If generatorKind is async, then set innerResult to
-             ? Await(innerResult).
+          2. If generatorKind is async, then set innerResult to ? Await(innerResult).
           ...
           5. Let done be ? IteratorComplete(innerResult).
           6. If done is true, then
-            a. Return ? IteratorValue(innerResult).
-          7. Let received be GeneratorYield(innerResult).
+            a. Let resultValue be Return ? IteratorValue(innerResult).
+            b. If generatorKind is async, then set resultValue to ? Await(resultValue).
+            c. Return resultValue.
+          7. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
       ...
 
-    GeneratorYield ( iterNextObj )
+    AsyncGeneratorYield ( value )
 
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
 
 ---*/
@@ -208,45 +206,42 @@ iter.next().then(v => {
     assert.sameValue(log[7].name, "get throw value (1)");
     assert.sameValue(log[7].thisValue.name, "throw-result-1", "get throw value thisValue");
 
-    assert.sameValue(log[8].name, "get throw done (1)");
-    assert.sameValue(log[8].thisValue.name, "throw-result-1", "get throw done thisValue");
-
     assert.sameValue(v.value, "throw-value-1");
     assert.sameValue(v.done, false);
 
-    assert.sameValue(log.length, 9, "log.length");
+    assert.sameValue(log.length, 8, "log.length");
 
     iter.throw("throw-arg-2").then(v => {
-      assert.sameValue(log[9].name, "get throw");
-      assert.sameValue(log[9].thisValue.name, "asyncIterator", "get throw thisValue");
+      assert.sameValue(log[8].name, "get throw");
+      assert.sameValue(log[8].thisValue.name, "asyncIterator", "get throw thisValue");
 
-      assert.sameValue(log[10].name, "call throw");
-      assert.sameValue(log[10].thisValue.name, "asyncIterator", "throw thisValue");
-      assert.sameValue(log[10].args.length, 1, "throw args.length");
-      assert.sameValue(log[10].args[0], "throw-arg-2", "throw args[0]");
+      assert.sameValue(log[9].name, "call throw");
+      assert.sameValue(log[9].thisValue.name, "asyncIterator", "throw thisValue");
+      assert.sameValue(log[9].args.length, 1, "throw args.length");
+      assert.sameValue(log[9].args[0], "throw-arg-2", "throw args[0]");
 
-      assert.sameValue(log[11].name, "get throw then (2)");
-      assert.sameValue(log[11].thisValue.name, "throw-promise-2", "get throw thisValue");
+      assert.sameValue(log[10].name, "get throw then (2)");
+      assert.sameValue(log[10].thisValue.name, "throw-promise-2", "get throw thisValue");
 
-      assert.sameValue(log[12].name, "call throw then (2)");
-      assert.sameValue(log[12].thisValue.name, "throw-promise-2", "throw thisValue");
-      assert.sameValue(log[12].args.length, 2, "throw then args.length");
-      assert.sameValue(typeof log[12].args[0], "function", "throw then args[0]");
-      assert.sameValue(typeof log[12].args[1], "function", "throw then args[1]");
+      assert.sameValue(log[11].name, "call throw then (2)");
+      assert.sameValue(log[11].thisValue.name, "throw-promise-2", "throw thisValue");
+      assert.sameValue(log[11].args.length, 2, "throw then args.length");
+      assert.sameValue(typeof log[11].args[0], "function", "throw then args[0]");
+      assert.sameValue(typeof log[11].args[1], "function", "throw then args[1]");
 
-      assert.sameValue(log[13].name, "get throw done (2)");
-      assert.sameValue(log[13].thisValue.name, "throw-result-2", "get throw done thisValue");
+      assert.sameValue(log[12].name, "get throw done (2)");
+      assert.sameValue(log[12].thisValue.name, "throw-result-2", "get throw done thisValue");
 
-      assert.sameValue(log[14].name, "get throw value (2)");
-      assert.sameValue(log[14].thisValue.name, "throw-result-2", "get throw value thisValue");
+      assert.sameValue(log[13].name, "get throw value (2)");
+      assert.sameValue(log[13].thisValue.name, "throw-result-2", "get throw value thisValue");
 
-      assert.sameValue(log[15].name, "after yield*");
-      assert.sameValue(log[15].value, "throw-value-2");
+      assert.sameValue(log[14].name, "after yield*");
+      assert.sameValue(log[14].value, "throw-value-2");
 
       assert.sameValue(v.value, "return-value");
       assert.sameValue(v.done, true);
 
-      assert.sameValue(log.length, 16, "log.length");
+      assert.sameValue(log.length, 15, "log.length");
     }).then($DONE, $DONE);
   }).catch($DONE);
 }).catch($DONE);
diff --git a/test/language/expressions/object/method-definition/async-gen-yield-star-async-next.js b/test/language/expressions/object/method-definition/async-gen-yield-star-async-next.js
index dad1843b82773db7834d800ea2dbc7e450cc9d5a..99d8a550161fd9fd6ba3bd2b36463db72f389f89 100644
--- a/test/language/expressions/object/method-definition/async-gen-yield-star-async-next.js
+++ b/test/language/expressions/object/method-definition/async-gen-yield-star-async-next.js
@@ -179,45 +179,42 @@ iter.next("next-arg-1").then(v => {
   assert.sameValue(log[8].name, "get next value (1)");
   assert.sameValue(log[8].thisValue.name, "next-result-1", "get next value thisValue");
 
-  assert.sameValue(log[9].name, "get next done (1)");
-  assert.sameValue(log[9].thisValue.name, "next-result-1", "get next done thisValue");
-
   assert.sameValue(v.value, "next-value-1");
   assert.sameValue(v.done, false);
 
-  assert.sameValue(log.length, 10, "log.length");
+  assert.sameValue(log.length, 9, "log.length");
 
   iter.next("next-arg-2").then(v => {
-    assert.sameValue(log[10].name, "get next");
-    assert.sameValue(log[10].thisValue.name, "asyncIterator", "get next thisValue");
+    assert.sameValue(log[9].name, "get next");
+    assert.sameValue(log[9].thisValue.name, "asyncIterator", "get next thisValue");
 
-    assert.sameValue(log[11].name, "call next");
-    assert.sameValue(log[11].thisValue.name, "asyncIterator", "next thisValue");
-    assert.sameValue(log[11].args.length, 1, "next args.length");
-    assert.sameValue(log[11].args[0], "next-arg-2", "next args[0]");
+    assert.sameValue(log[10].name, "call next");
+    assert.sameValue(log[10].thisValue.name, "asyncIterator", "next thisValue");
+    assert.sameValue(log[10].args.length, 1, "next args.length");
+    assert.sameValue(log[10].args[0], "next-arg-2", "next args[0]");
 
-    assert.sameValue(log[12].name, "get next then (2)");
-    assert.sameValue(log[12].thisValue.name, "next-promise-2", "get next then thisValue");
+    assert.sameValue(log[11].name, "get next then (2)");
+    assert.sameValue(log[11].thisValue.name, "next-promise-2", "get next then thisValue");
 
-    assert.sameValue(log[13].name, "call next then (2)");
-    assert.sameValue(log[13].thisValue.name, "next-promise-2", "next then thisValue");
-    assert.sameValue(log[13].args.length, 2, "next then args.length");
-    assert.sameValue(typeof log[13].args[0], "function", "next then args[0]");
-    assert.sameValue(typeof log[13].args[1], "function", "next then args[1]");
+    assert.sameValue(log[12].name, "call next then (2)");
+    assert.sameValue(log[12].thisValue.name, "next-promise-2", "next then thisValue");
+    assert.sameValue(log[12].args.length, 2, "next then args.length");
+    assert.sameValue(typeof log[12].args[0], "function", "next then args[0]");
+    assert.sameValue(typeof log[12].args[1], "function", "next then args[1]");
 
-    assert.sameValue(log[14].name, "get next done (2)");
-    assert.sameValue(log[14].thisValue.name, "next-result-2", "get next done thisValue");
+    assert.sameValue(log[13].name, "get next done (2)");
+    assert.sameValue(log[13].thisValue.name, "next-result-2", "get next done thisValue");
 
-    assert.sameValue(log[15].name, "get next value (2)");
-    assert.sameValue(log[15].thisValue.name, "next-result-2", "get next value thisValue");
+    assert.sameValue(log[14].name, "get next value (2)");
+    assert.sameValue(log[14].thisValue.name, "next-result-2", "get next value thisValue");
 
-    assert.sameValue(log[16].name, "after yield*");
-    assert.sameValue(log[16].value, "next-value-2");
+    assert.sameValue(log[15].name, "after yield*");
+    assert.sameValue(log[15].value, "next-value-2");
 
     assert.sameValue(v.value, "return-value");
     assert.sameValue(v.done, true);
 
-    assert.sameValue(log.length, 17, "log.length");
+    assert.sameValue(log.length, 16, "log.length");
   }).then($DONE, $DONE);
 }).catch($DONE);
 
diff --git a/test/language/expressions/object/method-definition/async-gen-yield-star-async-return.js b/test/language/expressions/object/method-definition/async-gen-yield-star-async-return.js
index 512ab43c7e979ca2e6a80462832f5eb47181dfcb..cfcdd57e25e0d5e8a7a46939926b71e7593403e8 100644
--- a/test/language/expressions/object/method-definition/async-gen-yield-star-async-return.js
+++ b/test/language/expressions/object/method-definition/async-gen-yield-star-async-return.js
@@ -22,25 +22,20 @@ info: |
         i. Assert: received.[[Type]] is return.
         ii. Let return be ? GetMethod(iterator, "return").
         iii. If return is undefined, return Completion(received).
-        iv. Let innerReturnResult be ? Call(return, iterator,
-            « received.[[Value]] »).
-        v. If generatorKind is async, then set innerReturnResult to
-           ? Await(innerReturnResult).
+        iv. Let innerReturnResult be ? Call(return, iterator, « received.[[Value]] »).
+        v. If generatorKind is async, then set innerReturnResult to ? Await(innerReturnResult).
         ...
         vii. Let done be ? IteratorComplete(innerReturnResult).
         viii. If done is true, then
              1. Let value be ? IteratorValue(innerReturnResult).
-             2. Return Completion{[[Type]]: return, [[Value]]: value,
-                [[Target]]: empty}.
-        ix. Let received be GeneratorYield(innerResult).
-
-    GeneratorYield ( iterNextObj )
+             2. If generatorKind is async, then set value to ? Await(value).
+             3. Return Completion{[[Type]]: return, [[Value]]: value, [[Target]]: empty}.
+        ix. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
+        ...
 
+    AsyncGeneratorYield ( value )
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
 
 ---*/
@@ -199,42 +194,39 @@ iter.next().then(v => {
     assert.sameValue(log[7].name, "get return value (1)");
     assert.sameValue(log[7].thisValue.name, "return-result-1", "get return value thisValue");
 
-    assert.sameValue(log[8].name, "get return done (1)");
-    assert.sameValue(log[8].thisValue.name, "return-result-1", "get return done thisValue");
-
     assert.sameValue(v.value, "return-value-1");
     assert.sameValue(v.done, false);
 
-    assert.sameValue(log.length, 9, "log.length");
+    assert.sameValue(log.length, 8, "log.length");
 
     iter.return("return-arg-2").then(v => {
-      assert.sameValue(log[9].name, "get return");
-      assert.sameValue(log[9].thisValue.name, "asyncIterator", "get return thisValue");
+      assert.sameValue(log[8].name, "get return");
+      assert.sameValue(log[8].thisValue.name, "asyncIterator", "get return thisValue");
 
-      assert.sameValue(log[10].name, "call return");
-      assert.sameValue(log[10].thisValue.name, "asyncIterator", "return thisValue");
-      assert.sameValue(log[10].args.length, 1, "return args.length");
-      assert.sameValue(log[10].args[0], "return-arg-2", "return args[0]");
+      assert.sameValue(log[9].name, "call return");
+      assert.sameValue(log[9].thisValue.name, "asyncIterator", "return thisValue");
+      assert.sameValue(log[9].args.length, 1, "return args.length");
+      assert.sameValue(log[9].args[0], "return-arg-2", "return args[0]");
 
-      assert.sameValue(log[11].name, "get return then (2)");
-      assert.sameValue(log[11].thisValue.name, "return-promise-2", "get return then thisValue");
+      assert.sameValue(log[10].name, "get return then (2)");
+      assert.sameValue(log[10].thisValue.name, "return-promise-2", "get return then thisValue");
 
-      assert.sameValue(log[12].name, "call return then (2)");
-      assert.sameValue(log[12].thisValue.name, "return-promise-2", "return then thisValue");
-      assert.sameValue(log[12].args.length, 2, "return then args.length");
-      assert.sameValue(typeof log[12].args[0], "function", "return then args[0]");
-      assert.sameValue(typeof log[12].args[1], "function", "return then args[1]");
+      assert.sameValue(log[11].name, "call return then (2)");
+      assert.sameValue(log[11].thisValue.name, "return-promise-2", "return then thisValue");
+      assert.sameValue(log[11].args.length, 2, "return then args.length");
+      assert.sameValue(typeof log[11].args[0], "function", "return then args[0]");
+      assert.sameValue(typeof log[11].args[1], "function", "return then args[1]");
 
-      assert.sameValue(log[13].name, "get return done (2)");
-      assert.sameValue(log[13].thisValue.name, "return-result-2", "get return done thisValue");
+      assert.sameValue(log[12].name, "get return done (2)");
+      assert.sameValue(log[12].thisValue.name, "return-result-2", "get return done thisValue");
 
-      assert.sameValue(log[14].name, "get return value (2)");
-      assert.sameValue(log[14].thisValue.name, "return-result-2", "get return value thisValue");
+      assert.sameValue(log[13].name, "get return value (2)");
+      assert.sameValue(log[13].thisValue.name, "return-result-2", "get return value thisValue");
 
       assert.sameValue(v.value, "return-value-2");
       assert.sameValue(v.done, true);
 
-      assert.sameValue(log.length, 15, "log.length");
+      assert.sameValue(log.length, 14, "log.length");
     }).then($DONE, $DONE);
   }).catch($DONE);
 }).catch($DONE);
diff --git a/test/language/expressions/object/method-definition/async-gen-yield-star-async-throw.js b/test/language/expressions/object/method-definition/async-gen-yield-star-async-throw.js
index 448934cd3028835da917aeee0bb7ce8b7c4bb510..31e0305268af3bee29bcaaae9eebe32464cc76bd 100644
--- a/test/language/expressions/object/method-definition/async-gen-yield-star-async-throw.js
+++ b/test/language/expressions/object/method-definition/async-gen-yield-star-async-throw.js
@@ -22,22 +22,20 @@ info: |
         i. Let throw be ? GetMethod(iterator, "throw").
         ii. If throw is not undefined, then
           1. Let innerResult be ? Call(throw, iterator, « received.[[Value]] »).
-          2. If generatorKind is async, then set innerResult to
-             ? Await(innerResult).
+          2. If generatorKind is async, then set innerResult to ? Await(innerResult).
           ...
           5. Let done be ? IteratorComplete(innerResult).
           6. If done is true, then
-            a. Return ? IteratorValue(innerResult).
-          7. Let received be GeneratorYield(innerResult).
+            a. Let resultValue be Return ? IteratorValue(innerResult).
+            b. If generatorKind is async, then set resultValue to ? Await(resultValue).
+            c. Return resultValue.
+          7. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
       ...
 
-    GeneratorYield ( iterNextObj )
+    AsyncGeneratorYield ( value )
 
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
 
 ---*/
@@ -201,45 +199,42 @@ iter.next().then(v => {
     assert.sameValue(log[7].name, "get throw value (1)");
     assert.sameValue(log[7].thisValue.name, "throw-result-1", "get throw value thisValue");
 
-    assert.sameValue(log[8].name, "get throw done (1)");
-    assert.sameValue(log[8].thisValue.name, "throw-result-1", "get throw done thisValue");
-
     assert.sameValue(v.value, "throw-value-1");
     assert.sameValue(v.done, false);
 
-    assert.sameValue(log.length, 9, "log.length");
+    assert.sameValue(log.length, 8, "log.length");
 
     iter.throw("throw-arg-2").then(v => {
-      assert.sameValue(log[9].name, "get throw");
-      assert.sameValue(log[9].thisValue.name, "asyncIterator", "get throw thisValue");
+      assert.sameValue(log[8].name, "get throw");
+      assert.sameValue(log[8].thisValue.name, "asyncIterator", "get throw thisValue");
 
-      assert.sameValue(log[10].name, "call throw");
-      assert.sameValue(log[10].thisValue.name, "asyncIterator", "throw thisValue");
-      assert.sameValue(log[10].args.length, 1, "throw args.length");
-      assert.sameValue(log[10].args[0], "throw-arg-2", "throw args[0]");
+      assert.sameValue(log[9].name, "call throw");
+      assert.sameValue(log[9].thisValue.name, "asyncIterator", "throw thisValue");
+      assert.sameValue(log[9].args.length, 1, "throw args.length");
+      assert.sameValue(log[9].args[0], "throw-arg-2", "throw args[0]");
 
-      assert.sameValue(log[11].name, "get throw then (2)");
-      assert.sameValue(log[11].thisValue.name, "throw-promise-2", "get throw thisValue");
+      assert.sameValue(log[10].name, "get throw then (2)");
+      assert.sameValue(log[10].thisValue.name, "throw-promise-2", "get throw thisValue");
 
-      assert.sameValue(log[12].name, "call throw then (2)");
-      assert.sameValue(log[12].thisValue.name, "throw-promise-2", "throw thisValue");
-      assert.sameValue(log[12].args.length, 2, "throw then args.length");
-      assert.sameValue(typeof log[12].args[0], "function", "throw then args[0]");
-      assert.sameValue(typeof log[12].args[1], "function", "throw then args[1]");
+      assert.sameValue(log[11].name, "call throw then (2)");
+      assert.sameValue(log[11].thisValue.name, "throw-promise-2", "throw thisValue");
+      assert.sameValue(log[11].args.length, 2, "throw then args.length");
+      assert.sameValue(typeof log[11].args[0], "function", "throw then args[0]");
+      assert.sameValue(typeof log[11].args[1], "function", "throw then args[1]");
 
-      assert.sameValue(log[13].name, "get throw done (2)");
-      assert.sameValue(log[13].thisValue.name, "throw-result-2", "get throw done thisValue");
+      assert.sameValue(log[12].name, "get throw done (2)");
+      assert.sameValue(log[12].thisValue.name, "throw-result-2", "get throw done thisValue");
 
-      assert.sameValue(log[14].name, "get throw value (2)");
-      assert.sameValue(log[14].thisValue.name, "throw-result-2", "get throw value thisValue");
+      assert.sameValue(log[13].name, "get throw value (2)");
+      assert.sameValue(log[13].thisValue.name, "throw-result-2", "get throw value thisValue");
 
-      assert.sameValue(log[15].name, "after yield*");
-      assert.sameValue(log[15].value, "throw-value-2");
+      assert.sameValue(log[14].name, "after yield*");
+      assert.sameValue(log[14].value, "throw-value-2");
 
       assert.sameValue(v.value, "return-value");
       assert.sameValue(v.done, true);
 
-      assert.sameValue(log.length, 16, "log.length");
+      assert.sameValue(log.length, 15, "log.length");
     }).then($DONE, $DONE);
   }).catch($DONE);
 }).catch($DONE);
diff --git a/test/language/module-code/namespace/internals/delete-non-exported.js b/test/language/module-code/namespace/internals/delete-non-exported.js
index 9014c7298ea606332f6b3dd63684b1a21b459504..295caa3e7bfde7bb9373299b80ab2a2cd8feaedc 100644
--- a/test/language/module-code/namespace/internals/delete-non-exported.js
+++ b/test/language/module-code/namespace/internals/delete-non-exported.js
@@ -6,9 +6,11 @@ description: >
     [[Delete]] behavior for a key that does not describe an exported binding
 info: |
     [...]
-    2. Let exports be the value of O's [[Exports]] internal slot.
-    3. If P is an element of exports, return false.
-    4. Return true.
+    2. If Type(P) is Symbol, then
+        a. Return ? OrdinaryDelete(O, P).
+    3. Let exports be O.[[Exports]].
+    4. If P is an element of exports, return false.
+    5. Return true.
 flags: [module]
 features: [Reflect, Symbol, Symbol.toStringTag]
 ---*/
@@ -24,9 +26,9 @@ assert(
   Reflect.deleteProperty(ns, 'default'), 'Reflect.deleteProperty: default'
 );
 
-assert(delete ns[Symbol.toStringTag], 'delete: Symbol.toStringTag');
-assert(
-  Reflect.deleteProperty(ns, Symbol.toStringTag),
+assert.throws(TypeError, function() { delete ns[Symbol.toStringTag]; }, 'delete: Symbol.toStringTag');
+assert.sameValue(
+  Reflect.deleteProperty(ns, Symbol.toStringTag), false,
   'Reflect.deleteProperty: Symbol.toStringTag'
 );
 
diff --git a/test/language/statements/async-generator/yield-star-async-next.js b/test/language/statements/async-generator/yield-star-async-next.js
index 87845a14f1dc46d66fc7635f6f29071141c17c9d..bd1b879a9f81a3f5204ae95580e3dcae7b7f6346 100644
--- a/test/language/statements/async-generator/yield-star-async-next.js
+++ b/test/language/statements/async-generator/yield-star-async-next.js
@@ -179,45 +179,42 @@ iter.next("next-arg-1").then(v => {
   assert.sameValue(log[8].name, "get next value (1)");
   assert.sameValue(log[8].thisValue.name, "next-result-1", "get next value thisValue");
 
-  assert.sameValue(log[9].name, "get next done (1)");
-  assert.sameValue(log[9].thisValue.name, "next-result-1", "get next done thisValue");
-
   assert.sameValue(v.value, "next-value-1");
   assert.sameValue(v.done, false);
 
-  assert.sameValue(log.length, 10, "log.length");
+  assert.sameValue(log.length, 9, "log.length");
 
   iter.next("next-arg-2").then(v => {
-    assert.sameValue(log[10].name, "get next");
-    assert.sameValue(log[10].thisValue.name, "asyncIterator", "get next thisValue");
+    assert.sameValue(log[9].name, "get next");
+    assert.sameValue(log[9].thisValue.name, "asyncIterator", "get next thisValue");
 
-    assert.sameValue(log[11].name, "call next");
-    assert.sameValue(log[11].thisValue.name, "asyncIterator", "next thisValue");
-    assert.sameValue(log[11].args.length, 1, "next args.length");
-    assert.sameValue(log[11].args[0], "next-arg-2", "next args[0]");
+    assert.sameValue(log[10].name, "call next");
+    assert.sameValue(log[10].thisValue.name, "asyncIterator", "next thisValue");
+    assert.sameValue(log[10].args.length, 1, "next args.length");
+    assert.sameValue(log[10].args[0], "next-arg-2", "next args[0]");
 
-    assert.sameValue(log[12].name, "get next then (2)");
-    assert.sameValue(log[12].thisValue.name, "next-promise-2", "get next then thisValue");
+    assert.sameValue(log[11].name, "get next then (2)");
+    assert.sameValue(log[11].thisValue.name, "next-promise-2", "get next then thisValue");
 
-    assert.sameValue(log[13].name, "call next then (2)");
-    assert.sameValue(log[13].thisValue.name, "next-promise-2", "next then thisValue");
-    assert.sameValue(log[13].args.length, 2, "next then args.length");
-    assert.sameValue(typeof log[13].args[0], "function", "next then args[0]");
-    assert.sameValue(typeof log[13].args[1], "function", "next then args[1]");
+    assert.sameValue(log[12].name, "call next then (2)");
+    assert.sameValue(log[12].thisValue.name, "next-promise-2", "next then thisValue");
+    assert.sameValue(log[12].args.length, 2, "next then args.length");
+    assert.sameValue(typeof log[12].args[0], "function", "next then args[0]");
+    assert.sameValue(typeof log[12].args[1], "function", "next then args[1]");
 
-    assert.sameValue(log[14].name, "get next done (2)");
-    assert.sameValue(log[14].thisValue.name, "next-result-2", "get next done thisValue");
+    assert.sameValue(log[13].name, "get next done (2)");
+    assert.sameValue(log[13].thisValue.name, "next-result-2", "get next done thisValue");
 
-    assert.sameValue(log[15].name, "get next value (2)");
-    assert.sameValue(log[15].thisValue.name, "next-result-2", "get next value thisValue");
+    assert.sameValue(log[14].name, "get next value (2)");
+    assert.sameValue(log[14].thisValue.name, "next-result-2", "get next value thisValue");
 
-    assert.sameValue(log[16].name, "after yield*");
-    assert.sameValue(log[16].value, "next-value-2");
+    assert.sameValue(log[15].name, "after yield*");
+    assert.sameValue(log[15].value, "next-value-2");
 
     assert.sameValue(v.value, "return-value");
     assert.sameValue(v.done, true);
 
-    assert.sameValue(log.length, 17, "log.length");
+    assert.sameValue(log.length, 16, "log.length");
   }).then($DONE, $DONE);
 }).catch($DONE);
 
diff --git a/test/language/statements/async-generator/yield-star-async-return.js b/test/language/statements/async-generator/yield-star-async-return.js
index 6b6883d4531918150c28ec81f24f4f3fdb3dac3a..a84c37d0efa954a5a7f99c30f3edf628a9af5b70 100644
--- a/test/language/statements/async-generator/yield-star-async-return.js
+++ b/test/language/statements/async-generator/yield-star-async-return.js
@@ -23,25 +23,20 @@ info: |
         i. Assert: received.[[Type]] is return.
         ii. Let return be ? GetMethod(iterator, "return").
         iii. If return is undefined, return Completion(received).
-        iv. Let innerReturnResult be ? Call(return, iterator,
-            « received.[[Value]] »).
-        v. If generatorKind is async, then set innerReturnResult to
-           ? Await(innerReturnResult).
+        iv. Let innerReturnResult be ? Call(return, iterator, « received.[[Value]] »).
+        v. If generatorKind is async, then set innerReturnResult to ? Await(innerReturnResult).
         ...
         vii. Let done be ? IteratorComplete(innerReturnResult).
         viii. If done is true, then
              1. Let value be ? IteratorValue(innerReturnResult).
-             2. Return Completion{[[Type]]: return, [[Value]]: value,
-                [[Target]]: empty}.
-        ix. Let received be GeneratorYield(innerResult).
-
-    GeneratorYield ( iterNextObj )
+             2. If generatorKind is async, then set value to ? Await(value).
+             3. Return Completion{[[Type]]: return, [[Value]]: value, [[Target]]: empty}.
+        ix. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
+        ...
 
+    AsyncGeneratorYield ( value )
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
 
 ---*/
@@ -199,42 +194,39 @@ iter.next().then(v => {
     assert.sameValue(log[7].name, "get return value (1)");
     assert.sameValue(log[7].thisValue.name, "return-result-1", "get return value thisValue");
 
-    assert.sameValue(log[8].name, "get return done (1)");
-    assert.sameValue(log[8].thisValue.name, "return-result-1", "get return done thisValue");
-
     assert.sameValue(v.value, "return-value-1");
     assert.sameValue(v.done, false);
 
-    assert.sameValue(log.length, 9, "log.length");
+    assert.sameValue(log.length, 8, "log.length");
 
     iter.return("return-arg-2").then(v => {
-      assert.sameValue(log[9].name, "get return");
-      assert.sameValue(log[9].thisValue.name, "asyncIterator", "get return thisValue");
+      assert.sameValue(log[8].name, "get return");
+      assert.sameValue(log[8].thisValue.name, "asyncIterator", "get return thisValue");
 
-      assert.sameValue(log[10].name, "call return");
-      assert.sameValue(log[10].thisValue.name, "asyncIterator", "return thisValue");
-      assert.sameValue(log[10].args.length, 1, "return args.length");
-      assert.sameValue(log[10].args[0], "return-arg-2", "return args[0]");
+      assert.sameValue(log[9].name, "call return");
+      assert.sameValue(log[9].thisValue.name, "asyncIterator", "return thisValue");
+      assert.sameValue(log[9].args.length, 1, "return args.length");
+      assert.sameValue(log[9].args[0], "return-arg-2", "return args[0]");
 
-      assert.sameValue(log[11].name, "get return then (2)");
-      assert.sameValue(log[11].thisValue.name, "return-promise-2", "get return then thisValue");
+      assert.sameValue(log[10].name, "get return then (2)");
+      assert.sameValue(log[10].thisValue.name, "return-promise-2", "get return then thisValue");
 
-      assert.sameValue(log[12].name, "call return then (2)");
-      assert.sameValue(log[12].thisValue.name, "return-promise-2", "return then thisValue");
-      assert.sameValue(log[12].args.length, 2, "return then args.length");
-      assert.sameValue(typeof log[12].args[0], "function", "return then args[0]");
-      assert.sameValue(typeof log[12].args[1], "function", "return then args[1]");
+      assert.sameValue(log[11].name, "call return then (2)");
+      assert.sameValue(log[11].thisValue.name, "return-promise-2", "return then thisValue");
+      assert.sameValue(log[11].args.length, 2, "return then args.length");
+      assert.sameValue(typeof log[11].args[0], "function", "return then args[0]");
+      assert.sameValue(typeof log[11].args[1], "function", "return then args[1]");
 
-      assert.sameValue(log[13].name, "get return done (2)");
-      assert.sameValue(log[13].thisValue.name, "return-result-2", "get return done thisValue");
+      assert.sameValue(log[12].name, "get return done (2)");
+      assert.sameValue(log[12].thisValue.name, "return-result-2", "get return done thisValue");
 
-      assert.sameValue(log[14].name, "get return value (2)");
-      assert.sameValue(log[14].thisValue.name, "return-result-2", "get return value thisValue");
+      assert.sameValue(log[13].name, "get return value (2)");
+      assert.sameValue(log[13].thisValue.name, "return-result-2", "get return value thisValue");
 
       assert.sameValue(v.value, "return-value-2");
       assert.sameValue(v.done, true);
 
-      assert.sameValue(log.length, 15, "log.length");
+      assert.sameValue(log.length, 14, "log.length");
     }).then($DONE, $DONE);
   }).catch($DONE);
 }).catch($DONE);
diff --git a/test/language/statements/async-generator/yield-star-async-throw.js b/test/language/statements/async-generator/yield-star-async-throw.js
index 4c0c64e21af0153b5ee64c39249f14a934d8dda7..69bdd02551203409ca67ce3bdeeb070697196912 100644
--- a/test/language/statements/async-generator/yield-star-async-throw.js
+++ b/test/language/statements/async-generator/yield-star-async-throw.js
@@ -23,22 +23,20 @@ info: |
         i. Let throw be ? GetMethod(iterator, "throw").
         ii. If throw is not undefined, then
           1. Let innerResult be ? Call(throw, iterator, « received.[[Value]] »).
-          2. If generatorKind is async, then set innerResult to
-             ? Await(innerResult).
+          2. If generatorKind is async, then set innerResult to ? Await(innerResult).
           ...
           5. Let done be ? IteratorComplete(innerResult).
           6. If done is true, then
-            a. Return ? IteratorValue(innerResult).
-          7. Let received be GeneratorYield(innerResult).
+            a. Let resultValue be Return ? IteratorValue(innerResult).
+            b. If generatorKind is async, then set resultValue to ? Await(resultValue).
+            c. Return resultValue.
+          7. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
       ...
 
-    GeneratorYield ( iterNextObj )
+    AsyncGeneratorYield ( value )
 
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
 
 ---*/
@@ -201,45 +199,42 @@ iter.next().then(v => {
     assert.sameValue(log[7].name, "get throw value (1)");
     assert.sameValue(log[7].thisValue.name, "throw-result-1", "get throw value thisValue");
 
-    assert.sameValue(log[8].name, "get throw done (1)");
-    assert.sameValue(log[8].thisValue.name, "throw-result-1", "get throw done thisValue");
-
     assert.sameValue(v.value, "throw-value-1");
     assert.sameValue(v.done, false);
 
-    assert.sameValue(log.length, 9, "log.length");
+    assert.sameValue(log.length, 8, "log.length");
 
     iter.throw("throw-arg-2").then(v => {
-      assert.sameValue(log[9].name, "get throw");
-      assert.sameValue(log[9].thisValue.name, "asyncIterator", "get throw thisValue");
+      assert.sameValue(log[8].name, "get throw");
+      assert.sameValue(log[8].thisValue.name, "asyncIterator", "get throw thisValue");
 
-      assert.sameValue(log[10].name, "call throw");
-      assert.sameValue(log[10].thisValue.name, "asyncIterator", "throw thisValue");
-      assert.sameValue(log[10].args.length, 1, "throw args.length");
-      assert.sameValue(log[10].args[0], "throw-arg-2", "throw args[0]");
+      assert.sameValue(log[9].name, "call throw");
+      assert.sameValue(log[9].thisValue.name, "asyncIterator", "throw thisValue");
+      assert.sameValue(log[9].args.length, 1, "throw args.length");
+      assert.sameValue(log[9].args[0], "throw-arg-2", "throw args[0]");
 
-      assert.sameValue(log[11].name, "get throw then (2)");
-      assert.sameValue(log[11].thisValue.name, "throw-promise-2", "get throw thisValue");
+      assert.sameValue(log[10].name, "get throw then (2)");
+      assert.sameValue(log[10].thisValue.name, "throw-promise-2", "get throw thisValue");
 
-      assert.sameValue(log[12].name, "call throw then (2)");
-      assert.sameValue(log[12].thisValue.name, "throw-promise-2", "throw thisValue");
-      assert.sameValue(log[12].args.length, 2, "throw then args.length");
-      assert.sameValue(typeof log[12].args[0], "function", "throw then args[0]");
-      assert.sameValue(typeof log[12].args[1], "function", "throw then args[1]");
+      assert.sameValue(log[11].name, "call throw then (2)");
+      assert.sameValue(log[11].thisValue.name, "throw-promise-2", "throw thisValue");
+      assert.sameValue(log[11].args.length, 2, "throw then args.length");
+      assert.sameValue(typeof log[11].args[0], "function", "throw then args[0]");
+      assert.sameValue(typeof log[11].args[1], "function", "throw then args[1]");
 
-      assert.sameValue(log[13].name, "get throw done (2)");
-      assert.sameValue(log[13].thisValue.name, "throw-result-2", "get throw done thisValue");
+      assert.sameValue(log[12].name, "get throw done (2)");
+      assert.sameValue(log[12].thisValue.name, "throw-result-2", "get throw done thisValue");
 
-      assert.sameValue(log[14].name, "get throw value (2)");
-      assert.sameValue(log[14].thisValue.name, "throw-result-2", "get throw value thisValue");
+      assert.sameValue(log[13].name, "get throw value (2)");
+      assert.sameValue(log[13].thisValue.name, "throw-result-2", "get throw value thisValue");
 
-      assert.sameValue(log[15].name, "after yield*");
-      assert.sameValue(log[15].value, "throw-value-2");
+      assert.sameValue(log[14].name, "after yield*");
+      assert.sameValue(log[14].value, "throw-value-2");
 
       assert.sameValue(v.value, "return-value");
       assert.sameValue(v.done, true);
 
-      assert.sameValue(log.length, 16, "log.length");
+      assert.sameValue(log.length, 15, "log.length");
     }).then($DONE, $DONE);
   }).catch($DONE);
 }).catch($DONE);
diff --git a/test/language/statements/class/async-gen-method-static-yield-star-async-next.js b/test/language/statements/class/async-gen-method-static-yield-star-async-next.js
index 1dfe8e25d74ec4efe4143059a84111a1c8fa5f65..3660090579c7aaedd24cd80de2033a2d7f110858 100644
--- a/test/language/statements/class/async-gen-method-static-yield-star-async-next.js
+++ b/test/language/statements/class/async-gen-method-static-yield-star-async-next.js
@@ -186,45 +186,42 @@ iter.next("next-arg-1").then(v => {
   assert.sameValue(log[8].name, "get next value (1)");
   assert.sameValue(log[8].thisValue.name, "next-result-1", "get next value thisValue");
 
-  assert.sameValue(log[9].name, "get next done (1)");
-  assert.sameValue(log[9].thisValue.name, "next-result-1", "get next done thisValue");
-
   assert.sameValue(v.value, "next-value-1");
   assert.sameValue(v.done, false);
 
-  assert.sameValue(log.length, 10, "log.length");
+  assert.sameValue(log.length, 9, "log.length");
 
   iter.next("next-arg-2").then(v => {
-    assert.sameValue(log[10].name, "get next");
-    assert.sameValue(log[10].thisValue.name, "asyncIterator", "get next thisValue");
+    assert.sameValue(log[9].name, "get next");
+    assert.sameValue(log[9].thisValue.name, "asyncIterator", "get next thisValue");
 
-    assert.sameValue(log[11].name, "call next");
-    assert.sameValue(log[11].thisValue.name, "asyncIterator", "next thisValue");
-    assert.sameValue(log[11].args.length, 1, "next args.length");
-    assert.sameValue(log[11].args[0], "next-arg-2", "next args[0]");
+    assert.sameValue(log[10].name, "call next");
+    assert.sameValue(log[10].thisValue.name, "asyncIterator", "next thisValue");
+    assert.sameValue(log[10].args.length, 1, "next args.length");
+    assert.sameValue(log[10].args[0], "next-arg-2", "next args[0]");
 
-    assert.sameValue(log[12].name, "get next then (2)");
-    assert.sameValue(log[12].thisValue.name, "next-promise-2", "get next then thisValue");
+    assert.sameValue(log[11].name, "get next then (2)");
+    assert.sameValue(log[11].thisValue.name, "next-promise-2", "get next then thisValue");
 
-    assert.sameValue(log[13].name, "call next then (2)");
-    assert.sameValue(log[13].thisValue.name, "next-promise-2", "next then thisValue");
-    assert.sameValue(log[13].args.length, 2, "next then args.length");
-    assert.sameValue(typeof log[13].args[0], "function", "next then args[0]");
-    assert.sameValue(typeof log[13].args[1], "function", "next then args[1]");
+    assert.sameValue(log[12].name, "call next then (2)");
+    assert.sameValue(log[12].thisValue.name, "next-promise-2", "next then thisValue");
+    assert.sameValue(log[12].args.length, 2, "next then args.length");
+    assert.sameValue(typeof log[12].args[0], "function", "next then args[0]");
+    assert.sameValue(typeof log[12].args[1], "function", "next then args[1]");
 
-    assert.sameValue(log[14].name, "get next done (2)");
-    assert.sameValue(log[14].thisValue.name, "next-result-2", "get next done thisValue");
+    assert.sameValue(log[13].name, "get next done (2)");
+    assert.sameValue(log[13].thisValue.name, "next-result-2", "get next done thisValue");
 
-    assert.sameValue(log[15].name, "get next value (2)");
-    assert.sameValue(log[15].thisValue.name, "next-result-2", "get next value thisValue");
+    assert.sameValue(log[14].name, "get next value (2)");
+    assert.sameValue(log[14].thisValue.name, "next-result-2", "get next value thisValue");
 
-    assert.sameValue(log[16].name, "after yield*");
-    assert.sameValue(log[16].value, "next-value-2");
+    assert.sameValue(log[15].name, "after yield*");
+    assert.sameValue(log[15].value, "next-value-2");
 
     assert.sameValue(v.value, "return-value");
     assert.sameValue(v.done, true);
 
-    assert.sameValue(log.length, 17, "log.length");
+    assert.sameValue(log.length, 16, "log.length");
   }).then($DONE, $DONE);
 }).catch($DONE);
 
diff --git a/test/language/statements/class/async-gen-method-static-yield-star-async-return.js b/test/language/statements/class/async-gen-method-static-yield-star-async-return.js
index dc4b7c90db948e560e57d6791478502164000087..acea008434c97832562b3f9cdee866fc2ab86486 100644
--- a/test/language/statements/class/async-gen-method-static-yield-star-async-return.js
+++ b/test/language/statements/class/async-gen-method-static-yield-star-async-return.js
@@ -28,25 +28,20 @@ info: |
         i. Assert: received.[[Type]] is return.
         ii. Let return be ? GetMethod(iterator, "return").
         iii. If return is undefined, return Completion(received).
-        iv. Let innerReturnResult be ? Call(return, iterator,
-            « received.[[Value]] »).
-        v. If generatorKind is async, then set innerReturnResult to
-           ? Await(innerReturnResult).
+        iv. Let innerReturnResult be ? Call(return, iterator, « received.[[Value]] »).
+        v. If generatorKind is async, then set innerReturnResult to ? Await(innerReturnResult).
         ...
         vii. Let done be ? IteratorComplete(innerReturnResult).
         viii. If done is true, then
              1. Let value be ? IteratorValue(innerReturnResult).
-             2. Return Completion{[[Type]]: return, [[Value]]: value,
-                [[Target]]: empty}.
-        ix. Let received be GeneratorYield(innerResult).
-
-    GeneratorYield ( iterNextObj )
+             2. If generatorKind is async, then set value to ? Await(value).
+             3. Return Completion{[[Type]]: return, [[Value]]: value, [[Target]]: empty}.
+        ix. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
+        ...
 
+    AsyncGeneratorYield ( value )
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
 
 ---*/
@@ -206,42 +201,39 @@ iter.next().then(v => {
     assert.sameValue(log[7].name, "get return value (1)");
     assert.sameValue(log[7].thisValue.name, "return-result-1", "get return value thisValue");
 
-    assert.sameValue(log[8].name, "get return done (1)");
-    assert.sameValue(log[8].thisValue.name, "return-result-1", "get return done thisValue");
-
     assert.sameValue(v.value, "return-value-1");
     assert.sameValue(v.done, false);
 
-    assert.sameValue(log.length, 9, "log.length");
+    assert.sameValue(log.length, 8, "log.length");
 
     iter.return("return-arg-2").then(v => {
-      assert.sameValue(log[9].name, "get return");
-      assert.sameValue(log[9].thisValue.name, "asyncIterator", "get return thisValue");
+      assert.sameValue(log[8].name, "get return");
+      assert.sameValue(log[8].thisValue.name, "asyncIterator", "get return thisValue");
 
-      assert.sameValue(log[10].name, "call return");
-      assert.sameValue(log[10].thisValue.name, "asyncIterator", "return thisValue");
-      assert.sameValue(log[10].args.length, 1, "return args.length");
-      assert.sameValue(log[10].args[0], "return-arg-2", "return args[0]");
+      assert.sameValue(log[9].name, "call return");
+      assert.sameValue(log[9].thisValue.name, "asyncIterator", "return thisValue");
+      assert.sameValue(log[9].args.length, 1, "return args.length");
+      assert.sameValue(log[9].args[0], "return-arg-2", "return args[0]");
 
-      assert.sameValue(log[11].name, "get return then (2)");
-      assert.sameValue(log[11].thisValue.name, "return-promise-2", "get return then thisValue");
+      assert.sameValue(log[10].name, "get return then (2)");
+      assert.sameValue(log[10].thisValue.name, "return-promise-2", "get return then thisValue");
 
-      assert.sameValue(log[12].name, "call return then (2)");
-      assert.sameValue(log[12].thisValue.name, "return-promise-2", "return then thisValue");
-      assert.sameValue(log[12].args.length, 2, "return then args.length");
-      assert.sameValue(typeof log[12].args[0], "function", "return then args[0]");
-      assert.sameValue(typeof log[12].args[1], "function", "return then args[1]");
+      assert.sameValue(log[11].name, "call return then (2)");
+      assert.sameValue(log[11].thisValue.name, "return-promise-2", "return then thisValue");
+      assert.sameValue(log[11].args.length, 2, "return then args.length");
+      assert.sameValue(typeof log[11].args[0], "function", "return then args[0]");
+      assert.sameValue(typeof log[11].args[1], "function", "return then args[1]");
 
-      assert.sameValue(log[13].name, "get return done (2)");
-      assert.sameValue(log[13].thisValue.name, "return-result-2", "get return done thisValue");
+      assert.sameValue(log[12].name, "get return done (2)");
+      assert.sameValue(log[12].thisValue.name, "return-result-2", "get return done thisValue");
 
-      assert.sameValue(log[14].name, "get return value (2)");
-      assert.sameValue(log[14].thisValue.name, "return-result-2", "get return value thisValue");
+      assert.sameValue(log[13].name, "get return value (2)");
+      assert.sameValue(log[13].thisValue.name, "return-result-2", "get return value thisValue");
 
       assert.sameValue(v.value, "return-value-2");
       assert.sameValue(v.done, true);
 
-      assert.sameValue(log.length, 15, "log.length");
+      assert.sameValue(log.length, 14, "log.length");
     }).then($DONE, $DONE);
   }).catch($DONE);
 }).catch($DONE);
diff --git a/test/language/statements/class/async-gen-method-static-yield-star-async-throw.js b/test/language/statements/class/async-gen-method-static-yield-star-async-throw.js
index 905106e9affac8f067c576a284037708814eaa66..d166d73f0a46d56cd210277721ac0f55443eea17 100644
--- a/test/language/statements/class/async-gen-method-static-yield-star-async-throw.js
+++ b/test/language/statements/class/async-gen-method-static-yield-star-async-throw.js
@@ -28,22 +28,20 @@ info: |
         i. Let throw be ? GetMethod(iterator, "throw").
         ii. If throw is not undefined, then
           1. Let innerResult be ? Call(throw, iterator, « received.[[Value]] »).
-          2. If generatorKind is async, then set innerResult to
-             ? Await(innerResult).
+          2. If generatorKind is async, then set innerResult to ? Await(innerResult).
           ...
           5. Let done be ? IteratorComplete(innerResult).
           6. If done is true, then
-            a. Return ? IteratorValue(innerResult).
-          7. Let received be GeneratorYield(innerResult).
+            a. Let resultValue be Return ? IteratorValue(innerResult).
+            b. If generatorKind is async, then set resultValue to ? Await(resultValue).
+            c. Return resultValue.
+          7. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
       ...
 
-    GeneratorYield ( iterNextObj )
+    AsyncGeneratorYield ( value )
 
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
 
 ---*/
@@ -208,45 +206,42 @@ iter.next().then(v => {
     assert.sameValue(log[7].name, "get throw value (1)");
     assert.sameValue(log[7].thisValue.name, "throw-result-1", "get throw value thisValue");
 
-    assert.sameValue(log[8].name, "get throw done (1)");
-    assert.sameValue(log[8].thisValue.name, "throw-result-1", "get throw done thisValue");
-
     assert.sameValue(v.value, "throw-value-1");
     assert.sameValue(v.done, false);
 
-    assert.sameValue(log.length, 9, "log.length");
+    assert.sameValue(log.length, 8, "log.length");
 
     iter.throw("throw-arg-2").then(v => {
-      assert.sameValue(log[9].name, "get throw");
-      assert.sameValue(log[9].thisValue.name, "asyncIterator", "get throw thisValue");
+      assert.sameValue(log[8].name, "get throw");
+      assert.sameValue(log[8].thisValue.name, "asyncIterator", "get throw thisValue");
 
-      assert.sameValue(log[10].name, "call throw");
-      assert.sameValue(log[10].thisValue.name, "asyncIterator", "throw thisValue");
-      assert.sameValue(log[10].args.length, 1, "throw args.length");
-      assert.sameValue(log[10].args[0], "throw-arg-2", "throw args[0]");
+      assert.sameValue(log[9].name, "call throw");
+      assert.sameValue(log[9].thisValue.name, "asyncIterator", "throw thisValue");
+      assert.sameValue(log[9].args.length, 1, "throw args.length");
+      assert.sameValue(log[9].args[0], "throw-arg-2", "throw args[0]");
 
-      assert.sameValue(log[11].name, "get throw then (2)");
-      assert.sameValue(log[11].thisValue.name, "throw-promise-2", "get throw thisValue");
+      assert.sameValue(log[10].name, "get throw then (2)");
+      assert.sameValue(log[10].thisValue.name, "throw-promise-2", "get throw thisValue");
 
-      assert.sameValue(log[12].name, "call throw then (2)");
-      assert.sameValue(log[12].thisValue.name, "throw-promise-2", "throw thisValue");
-      assert.sameValue(log[12].args.length, 2, "throw then args.length");
-      assert.sameValue(typeof log[12].args[0], "function", "throw then args[0]");
-      assert.sameValue(typeof log[12].args[1], "function", "throw then args[1]");
+      assert.sameValue(log[11].name, "call throw then (2)");
+      assert.sameValue(log[11].thisValue.name, "throw-promise-2", "throw thisValue");
+      assert.sameValue(log[11].args.length, 2, "throw then args.length");
+      assert.sameValue(typeof log[11].args[0], "function", "throw then args[0]");
+      assert.sameValue(typeof log[11].args[1], "function", "throw then args[1]");
 
-      assert.sameValue(log[13].name, "get throw done (2)");
-      assert.sameValue(log[13].thisValue.name, "throw-result-2", "get throw done thisValue");
+      assert.sameValue(log[12].name, "get throw done (2)");
+      assert.sameValue(log[12].thisValue.name, "throw-result-2", "get throw done thisValue");
 
-      assert.sameValue(log[14].name, "get throw value (2)");
-      assert.sameValue(log[14].thisValue.name, "throw-result-2", "get throw value thisValue");
+      assert.sameValue(log[13].name, "get throw value (2)");
+      assert.sameValue(log[13].thisValue.name, "throw-result-2", "get throw value thisValue");
 
-      assert.sameValue(log[15].name, "after yield*");
-      assert.sameValue(log[15].value, "throw-value-2");
+      assert.sameValue(log[14].name, "after yield*");
+      assert.sameValue(log[14].value, "throw-value-2");
 
       assert.sameValue(v.value, "return-value");
       assert.sameValue(v.done, true);
 
-      assert.sameValue(log.length, 16, "log.length");
+      assert.sameValue(log.length, 15, "log.length");
     }).then($DONE, $DONE);
   }).catch($DONE);
 }).catch($DONE);
diff --git a/test/language/statements/class/async-gen-method-yield-star-async-next.js b/test/language/statements/class/async-gen-method-yield-star-async-next.js
index 7a43370f6c3afa6f2fa416bc4c7d05c1163b956b..c4d2f248d9d6ce2e3978eeb324770f659d04310b 100644
--- a/test/language/statements/class/async-gen-method-yield-star-async-next.js
+++ b/test/language/statements/class/async-gen-method-yield-star-async-next.js
@@ -186,45 +186,42 @@ iter.next("next-arg-1").then(v => {
   assert.sameValue(log[8].name, "get next value (1)");
   assert.sameValue(log[8].thisValue.name, "next-result-1", "get next value thisValue");
 
-  assert.sameValue(log[9].name, "get next done (1)");
-  assert.sameValue(log[9].thisValue.name, "next-result-1", "get next done thisValue");
-
   assert.sameValue(v.value, "next-value-1");
   assert.sameValue(v.done, false);
 
-  assert.sameValue(log.length, 10, "log.length");
+  assert.sameValue(log.length, 9, "log.length");
 
   iter.next("next-arg-2").then(v => {
-    assert.sameValue(log[10].name, "get next");
-    assert.sameValue(log[10].thisValue.name, "asyncIterator", "get next thisValue");
+    assert.sameValue(log[9].name, "get next");
+    assert.sameValue(log[9].thisValue.name, "asyncIterator", "get next thisValue");
 
-    assert.sameValue(log[11].name, "call next");
-    assert.sameValue(log[11].thisValue.name, "asyncIterator", "next thisValue");
-    assert.sameValue(log[11].args.length, 1, "next args.length");
-    assert.sameValue(log[11].args[0], "next-arg-2", "next args[0]");
+    assert.sameValue(log[10].name, "call next");
+    assert.sameValue(log[10].thisValue.name, "asyncIterator", "next thisValue");
+    assert.sameValue(log[10].args.length, 1, "next args.length");
+    assert.sameValue(log[10].args[0], "next-arg-2", "next args[0]");
 
-    assert.sameValue(log[12].name, "get next then (2)");
-    assert.sameValue(log[12].thisValue.name, "next-promise-2", "get next then thisValue");
+    assert.sameValue(log[11].name, "get next then (2)");
+    assert.sameValue(log[11].thisValue.name, "next-promise-2", "get next then thisValue");
 
-    assert.sameValue(log[13].name, "call next then (2)");
-    assert.sameValue(log[13].thisValue.name, "next-promise-2", "next then thisValue");
-    assert.sameValue(log[13].args.length, 2, "next then args.length");
-    assert.sameValue(typeof log[13].args[0], "function", "next then args[0]");
-    assert.sameValue(typeof log[13].args[1], "function", "next then args[1]");
+    assert.sameValue(log[12].name, "call next then (2)");
+    assert.sameValue(log[12].thisValue.name, "next-promise-2", "next then thisValue");
+    assert.sameValue(log[12].args.length, 2, "next then args.length");
+    assert.sameValue(typeof log[12].args[0], "function", "next then args[0]");
+    assert.sameValue(typeof log[12].args[1], "function", "next then args[1]");
 
-    assert.sameValue(log[14].name, "get next done (2)");
-    assert.sameValue(log[14].thisValue.name, "next-result-2", "get next done thisValue");
+    assert.sameValue(log[13].name, "get next done (2)");
+    assert.sameValue(log[13].thisValue.name, "next-result-2", "get next done thisValue");
 
-    assert.sameValue(log[15].name, "get next value (2)");
-    assert.sameValue(log[15].thisValue.name, "next-result-2", "get next value thisValue");
+    assert.sameValue(log[14].name, "get next value (2)");
+    assert.sameValue(log[14].thisValue.name, "next-result-2", "get next value thisValue");
 
-    assert.sameValue(log[16].name, "after yield*");
-    assert.sameValue(log[16].value, "next-value-2");
+    assert.sameValue(log[15].name, "after yield*");
+    assert.sameValue(log[15].value, "next-value-2");
 
     assert.sameValue(v.value, "return-value");
     assert.sameValue(v.done, true);
 
-    assert.sameValue(log.length, 17, "log.length");
+    assert.sameValue(log.length, 16, "log.length");
   }).then($DONE, $DONE);
 }).catch($DONE);
 
diff --git a/test/language/statements/class/async-gen-method-yield-star-async-return.js b/test/language/statements/class/async-gen-method-yield-star-async-return.js
index 7a373dd230b65c5f8b9107878ebc0df8055c9efd..cd2066d225018207498d553a5e7993ed2d8927b4 100644
--- a/test/language/statements/class/async-gen-method-yield-star-async-return.js
+++ b/test/language/statements/class/async-gen-method-yield-star-async-return.js
@@ -28,25 +28,20 @@ info: |
         i. Assert: received.[[Type]] is return.
         ii. Let return be ? GetMethod(iterator, "return").
         iii. If return is undefined, return Completion(received).
-        iv. Let innerReturnResult be ? Call(return, iterator,
-            « received.[[Value]] »).
-        v. If generatorKind is async, then set innerReturnResult to
-           ? Await(innerReturnResult).
+        iv. Let innerReturnResult be ? Call(return, iterator, « received.[[Value]] »).
+        v. If generatorKind is async, then set innerReturnResult to ? Await(innerReturnResult).
         ...
         vii. Let done be ? IteratorComplete(innerReturnResult).
         viii. If done is true, then
              1. Let value be ? IteratorValue(innerReturnResult).
-             2. Return Completion{[[Type]]: return, [[Value]]: value,
-                [[Target]]: empty}.
-        ix. Let received be GeneratorYield(innerResult).
-
-    GeneratorYield ( iterNextObj )
+             2. If generatorKind is async, then set value to ? Await(value).
+             3. Return Completion{[[Type]]: return, [[Value]]: value, [[Target]]: empty}.
+        ix. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
+        ...
 
+    AsyncGeneratorYield ( value )
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
 
 ---*/
@@ -206,42 +201,39 @@ iter.next().then(v => {
     assert.sameValue(log[7].name, "get return value (1)");
     assert.sameValue(log[7].thisValue.name, "return-result-1", "get return value thisValue");
 
-    assert.sameValue(log[8].name, "get return done (1)");
-    assert.sameValue(log[8].thisValue.name, "return-result-1", "get return done thisValue");
-
     assert.sameValue(v.value, "return-value-1");
     assert.sameValue(v.done, false);
 
-    assert.sameValue(log.length, 9, "log.length");
+    assert.sameValue(log.length, 8, "log.length");
 
     iter.return("return-arg-2").then(v => {
-      assert.sameValue(log[9].name, "get return");
-      assert.sameValue(log[9].thisValue.name, "asyncIterator", "get return thisValue");
+      assert.sameValue(log[8].name, "get return");
+      assert.sameValue(log[8].thisValue.name, "asyncIterator", "get return thisValue");
 
-      assert.sameValue(log[10].name, "call return");
-      assert.sameValue(log[10].thisValue.name, "asyncIterator", "return thisValue");
-      assert.sameValue(log[10].args.length, 1, "return args.length");
-      assert.sameValue(log[10].args[0], "return-arg-2", "return args[0]");
+      assert.sameValue(log[9].name, "call return");
+      assert.sameValue(log[9].thisValue.name, "asyncIterator", "return thisValue");
+      assert.sameValue(log[9].args.length, 1, "return args.length");
+      assert.sameValue(log[9].args[0], "return-arg-2", "return args[0]");
 
-      assert.sameValue(log[11].name, "get return then (2)");
-      assert.sameValue(log[11].thisValue.name, "return-promise-2", "get return then thisValue");
+      assert.sameValue(log[10].name, "get return then (2)");
+      assert.sameValue(log[10].thisValue.name, "return-promise-2", "get return then thisValue");
 
-      assert.sameValue(log[12].name, "call return then (2)");
-      assert.sameValue(log[12].thisValue.name, "return-promise-2", "return then thisValue");
-      assert.sameValue(log[12].args.length, 2, "return then args.length");
-      assert.sameValue(typeof log[12].args[0], "function", "return then args[0]");
-      assert.sameValue(typeof log[12].args[1], "function", "return then args[1]");
+      assert.sameValue(log[11].name, "call return then (2)");
+      assert.sameValue(log[11].thisValue.name, "return-promise-2", "return then thisValue");
+      assert.sameValue(log[11].args.length, 2, "return then args.length");
+      assert.sameValue(typeof log[11].args[0], "function", "return then args[0]");
+      assert.sameValue(typeof log[11].args[1], "function", "return then args[1]");
 
-      assert.sameValue(log[13].name, "get return done (2)");
-      assert.sameValue(log[13].thisValue.name, "return-result-2", "get return done thisValue");
+      assert.sameValue(log[12].name, "get return done (2)");
+      assert.sameValue(log[12].thisValue.name, "return-result-2", "get return done thisValue");
 
-      assert.sameValue(log[14].name, "get return value (2)");
-      assert.sameValue(log[14].thisValue.name, "return-result-2", "get return value thisValue");
+      assert.sameValue(log[13].name, "get return value (2)");
+      assert.sameValue(log[13].thisValue.name, "return-result-2", "get return value thisValue");
 
       assert.sameValue(v.value, "return-value-2");
       assert.sameValue(v.done, true);
 
-      assert.sameValue(log.length, 15, "log.length");
+      assert.sameValue(log.length, 14, "log.length");
     }).then($DONE, $DONE);
   }).catch($DONE);
 }).catch($DONE);
diff --git a/test/language/statements/class/async-gen-method-yield-star-async-throw.js b/test/language/statements/class/async-gen-method-yield-star-async-throw.js
index ffa3a5216ecf89712278c191fb340ebf4f8fdeb3..767d63512581db514fb7dab2ea8037d4e142b91a 100644
--- a/test/language/statements/class/async-gen-method-yield-star-async-throw.js
+++ b/test/language/statements/class/async-gen-method-yield-star-async-throw.js
@@ -28,22 +28,20 @@ info: |
         i. Let throw be ? GetMethod(iterator, "throw").
         ii. If throw is not undefined, then
           1. Let innerResult be ? Call(throw, iterator, « received.[[Value]] »).
-          2. If generatorKind is async, then set innerResult to
-             ? Await(innerResult).
+          2. If generatorKind is async, then set innerResult to ? Await(innerResult).
           ...
           5. Let done be ? IteratorComplete(innerResult).
           6. If done is true, then
-            a. Return ? IteratorValue(innerResult).
-          7. Let received be GeneratorYield(innerResult).
+            a. Let resultValue be Return ? IteratorValue(innerResult).
+            b. If generatorKind is async, then set resultValue to ? Await(resultValue).
+            c. Return resultValue.
+          7. If generatorKind is async, then let received be AsyncGeneratorYield(? IteratorValue(innerResult)).
       ...
 
-    GeneratorYield ( iterNextObj )
+    AsyncGeneratorYield ( value )
 
     ...
-    10. If generatorKind is async,
-      a. Let value be IteratorValue(iterNextObj).
-      b. Let done be IteratorComplete(iterNextObj).
-      c. Return ! AsyncGeneratorResolve(generator, value, done).
+    8. Return ! AsyncGeneratorResolve(generator, value, false).
     ...
 
 ---*/
@@ -208,45 +206,42 @@ iter.next().then(v => {
     assert.sameValue(log[7].name, "get throw value (1)");
     assert.sameValue(log[7].thisValue.name, "throw-result-1", "get throw value thisValue");
 
-    assert.sameValue(log[8].name, "get throw done (1)");
-    assert.sameValue(log[8].thisValue.name, "throw-result-1", "get throw done thisValue");
-
     assert.sameValue(v.value, "throw-value-1");
     assert.sameValue(v.done, false);
 
-    assert.sameValue(log.length, 9, "log.length");
+    assert.sameValue(log.length, 8, "log.length");
 
     iter.throw("throw-arg-2").then(v => {
-      assert.sameValue(log[9].name, "get throw");
-      assert.sameValue(log[9].thisValue.name, "asyncIterator", "get throw thisValue");
+      assert.sameValue(log[8].name, "get throw");
+      assert.sameValue(log[8].thisValue.name, "asyncIterator", "get throw thisValue");
 
-      assert.sameValue(log[10].name, "call throw");
-      assert.sameValue(log[10].thisValue.name, "asyncIterator", "throw thisValue");
-      assert.sameValue(log[10].args.length, 1, "throw args.length");
-      assert.sameValue(log[10].args[0], "throw-arg-2", "throw args[0]");
+      assert.sameValue(log[9].name, "call throw");
+      assert.sameValue(log[9].thisValue.name, "asyncIterator", "throw thisValue");
+      assert.sameValue(log[9].args.length, 1, "throw args.length");
+      assert.sameValue(log[9].args[0], "throw-arg-2", "throw args[0]");
 
-      assert.sameValue(log[11].name, "get throw then (2)");
-      assert.sameValue(log[11].thisValue.name, "throw-promise-2", "get throw thisValue");
+      assert.sameValue(log[10].name, "get throw then (2)");
+      assert.sameValue(log[10].thisValue.name, "throw-promise-2", "get throw thisValue");
 
-      assert.sameValue(log[12].name, "call throw then (2)");
-      assert.sameValue(log[12].thisValue.name, "throw-promise-2", "throw thisValue");
-      assert.sameValue(log[12].args.length, 2, "throw then args.length");
-      assert.sameValue(typeof log[12].args[0], "function", "throw then args[0]");
-      assert.sameValue(typeof log[12].args[1], "function", "throw then args[1]");
+      assert.sameValue(log[11].name, "call throw then (2)");
+      assert.sameValue(log[11].thisValue.name, "throw-promise-2", "throw thisValue");
+      assert.sameValue(log[11].args.length, 2, "throw then args.length");
+      assert.sameValue(typeof log[11].args[0], "function", "throw then args[0]");
+      assert.sameValue(typeof log[11].args[1], "function", "throw then args[1]");
 
-      assert.sameValue(log[13].name, "get throw done (2)");
-      assert.sameValue(log[13].thisValue.name, "throw-result-2", "get throw done thisValue");
+      assert.sameValue(log[12].name, "get throw done (2)");
+      assert.sameValue(log[12].thisValue.name, "throw-result-2", "get throw done thisValue");
 
-      assert.sameValue(log[14].name, "get throw value (2)");
-      assert.sameValue(log[14].thisValue.name, "throw-result-2", "get throw value thisValue");
+      assert.sameValue(log[13].name, "get throw value (2)");
+      assert.sameValue(log[13].thisValue.name, "throw-result-2", "get throw value thisValue");
 
-      assert.sameValue(log[15].name, "after yield*");
-      assert.sameValue(log[15].value, "throw-value-2");
+      assert.sameValue(log[14].name, "after yield*");
+      assert.sameValue(log[14].value, "throw-value-2");
 
       assert.sameValue(v.value, "return-value");
       assert.sameValue(v.done, true);
 
-      assert.sameValue(log.length, 16, "log.length");
+      assert.sameValue(log.length, 15, "log.length");
     }).then($DONE, $DONE);
   }).catch($DONE);
 }).catch($DONE);