dart-sdk/tests/language/async/nested_test.dart
Ömer Sinan Ağacan b449e99118 [dart2wasm] Fix async* transformation of nested async* functions
With nested `async*` functions, the state of whether we're in an
`async*` function should be restored as the previous state after leaving
the nested function, instead of as `false`.

Fixes #55397.

Change-Id: I5f2a964847ae34e98584f3adad6df7857b81e474
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/361600
Commit-Queue: Ömer Ağacan <omersa@google.com>
Reviewed-by: Slava Egorov <vegorov@google.com>
2024-04-08 12:42:29 +00:00

32 lines
735 B
Dart

// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import "package:async_helper/async_helper.dart";
import "package:expect/expect.dart";
Stream<String> stream() async* {
yield 'a';
yield 'b';
}
Stream<String> expandedStream() async* {
final expanded = stream().asyncExpand((s) async* {
yield 'before';
yield s;
yield 'after';
});
yield* expanded;
}
test() async {
Expect.listEquals(['before', 'a', 'after', 'before', 'b', 'after'],
await expandedStream().toList());
}
void main() {
asyncStart();
test().then((_) => asyncEnd());
}