1d0a7b28e3
When compiling a `while` in an `async` function, we need to allocate the context for the `while` *before* compiling the `while` condition, because any variables introduced in `while` condition will be stored in the `while` context, rather than the parent context. Instead of fixing where we allocate `while` context, we could update `CaptureFinder` to add variables in the condition to the parent context, and update `for` code generator, as it currently allocates `for` context before the conditions. I don't know if that has any advantages, for now it should be OK to update `while` code generator. `for` code generator allocates the context before the conditions and does not have this issue. Fixes #54406. Change-Id: I3c6bb7558a352d78c8f8a46a56d9bd3af68841a5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/342760 Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Ömer Ağacan <omersa@google.com>
15 lines
443 B
Dart
15 lines
443 B
Dart
// Copyright (c) 2023, 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.
|
|
|
|
// Tests a compile-time crash when a `while` in an async function has a `let`
|
|
// expression introduced by CFE.
|
|
|
|
String? get pageSettings => "a";
|
|
|
|
void main() async {
|
|
while (pageSettings?.length != 1) {
|
|
await null;
|
|
}
|
|
}
|