14514f5e3Sopenharmony_ci/* 24514f5e3Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License. 54514f5e3Sopenharmony_ci * You may obtain a copy of the License at 64514f5e3Sopenharmony_ci * 74514f5e3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84514f5e3Sopenharmony_ci * 94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and 134514f5e3Sopenharmony_ci * limitations under the License. 144514f5e3Sopenharmony_ci */ 154514f5e3Sopenharmony_ci 164514f5e3Sopenharmony_civar AsyncGeneratorFunction = Object.getPrototypeOf(async function* () {}).constructor; 174514f5e3Sopenharmony_ciprint(Object.isExtensible(AsyncGeneratorFunction)); 184514f5e3Sopenharmony_ci 194514f5e3Sopenharmony_cifunction fun1(){ 204514f5e3Sopenharmony_ci var returnGets_1 = 0; 214514f5e3Sopenharmony_ci var asyncIterable_1 = { 224514f5e3Sopenharmony_ci [Symbol.asyncIterator]: function() { 234514f5e3Sopenharmony_ci return this; 244514f5e3Sopenharmony_ci }, 254514f5e3Sopenharmony_ci next: function() { 264514f5e3Sopenharmony_ci return {value: 1, done: false}; 274514f5e3Sopenharmony_ci }, 284514f5e3Sopenharmony_ci get return() { 294514f5e3Sopenharmony_ci returnGets_1 += 1; 304514f5e3Sopenharmony_ci return null; 314514f5e3Sopenharmony_ci }, 324514f5e3Sopenharmony_ci }; 334514f5e3Sopenharmony_ci 344514f5e3Sopenharmony_ci async function* asyncGenerator() { 354514f5e3Sopenharmony_ci yield* asyncIterable_1; 364514f5e3Sopenharmony_ci } 374514f5e3Sopenharmony_ci 384514f5e3Sopenharmony_ci var asyncIterator_1 = asyncGenerator(); 394514f5e3Sopenharmony_ci asyncIterator_1.next().then(function() { 404514f5e3Sopenharmony_ci return asyncIterator_1.return(2).then(function(result) { 414514f5e3Sopenharmony_ci print(result.value); 424514f5e3Sopenharmony_ci print(result.done); 434514f5e3Sopenharmony_ci print(returnGets_1); 444514f5e3Sopenharmony_ci }); 454514f5e3Sopenharmony_ci }); 464514f5e3Sopenharmony_ci} 474514f5e3Sopenharmony_cifun1(); 484514f5e3Sopenharmony_ci 494514f5e3Sopenharmony_cifunction fun2(){ 504514f5e3Sopenharmony_ci var asyncIterable_2 = { 514514f5e3Sopenharmony_ci [Symbol.asyncIterator]: function() { 524514f5e3Sopenharmony_ci return this; 534514f5e3Sopenharmony_ci }, 544514f5e3Sopenharmony_ci next: function() { 554514f5e3Sopenharmony_ci return {value: 1, done: false}; 564514f5e3Sopenharmony_ci }, 574514f5e3Sopenharmony_ci }; 584514f5e3Sopenharmony_ci 594514f5e3Sopenharmony_ci async function* asyncGenerator() { 604514f5e3Sopenharmony_ci yield* asyncIterable_2; 614514f5e3Sopenharmony_ci } 624514f5e3Sopenharmony_ci 634514f5e3Sopenharmony_ci var asyncIterator_2 = asyncGenerator(); 644514f5e3Sopenharmony_ci asyncIterator_2.next().then(function() { 654514f5e3Sopenharmony_ci var promise = Promise.resolve(2).then(() => 3); 664514f5e3Sopenharmony_ci return asyncIterator_2.return(promise).then(function(result) { 674514f5e3Sopenharmony_ci print(result.value); 684514f5e3Sopenharmony_ci print(result.done); 694514f5e3Sopenharmony_ci }); 704514f5e3Sopenharmony_ci }); 714514f5e3Sopenharmony_ci} 724514f5e3Sopenharmony_cifun2(); 734514f5e3Sopenharmony_ci 744514f5e3Sopenharmony_cifunction fun3(){ 754514f5e3Sopenharmony_ci var token_1 = {}; 764514f5e3Sopenharmony_ci 774514f5e3Sopenharmony_ci var asyncIter_3 = { 784514f5e3Sopenharmony_ci [Symbol.asyncIterator]() { 794514f5e3Sopenharmony_ci return this; 804514f5e3Sopenharmony_ci }, 814514f5e3Sopenharmony_ci next() { 824514f5e3Sopenharmony_ci return { 834514f5e3Sopenharmony_ci done: false, 844514f5e3Sopenharmony_ci value: undefined, 854514f5e3Sopenharmony_ci }; 864514f5e3Sopenharmony_ci }, 874514f5e3Sopenharmony_ci return() { 884514f5e3Sopenharmony_ci return { 894514f5e3Sopenharmony_ci done: false, 904514f5e3Sopenharmony_ci get value() { 914514f5e3Sopenharmony_ci throw token_1; 924514f5e3Sopenharmony_ci } 934514f5e3Sopenharmony_ci }; 944514f5e3Sopenharmony_ci } 954514f5e3Sopenharmony_ci }; 964514f5e3Sopenharmony_ci 974514f5e3Sopenharmony_ci async function* f_3() { 984514f5e3Sopenharmony_ci var thrown_3; 994514f5e3Sopenharmony_ci try { 1004514f5e3Sopenharmony_ci yield* asyncIter_3; 1014514f5e3Sopenharmony_ci } catch (e) { 1024514f5e3Sopenharmony_ci thrown_3 = e; 1034514f5e3Sopenharmony_ci } 1044514f5e3Sopenharmony_ci return thrown_3; 1054514f5e3Sopenharmony_ci } 1064514f5e3Sopenharmony_ci 1074514f5e3Sopenharmony_ci var iter_3 = f_3(); 1084514f5e3Sopenharmony_ci 1094514f5e3Sopenharmony_ci iter_3.next().then(() => { 1104514f5e3Sopenharmony_ci iter_3.return().then(({value}) => { 1114514f5e3Sopenharmony_ci print(value); 1124514f5e3Sopenharmony_ci }); 1134514f5e3Sopenharmony_ci }); 1144514f5e3Sopenharmony_ci} 1154514f5e3Sopenharmony_cifun3();