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();