Skip to content

Commit

Permalink
Ensure we have a scope for variables when visiting fields
Browse files Browse the repository at this point in the history
Fixes #36864

Change-Id: I66d70cc30b26bd069d4ab5e2b98f0f5954f3ef59
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/101460
Auto-Submit: Sigmund Cherem <[email protected]>
Commit-Queue: Johnni Winther <[email protected]>
Reviewed-by: Johnni Winther <[email protected]>
  • Loading branch information
sigmundch authored and [email protected] committed May 6, 2019
1 parent 821c75c commit 9ac7bd7
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
3 changes: 3 additions & 0 deletions pkg/compiler/lib/src/ir/static_type.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1401,8 +1401,11 @@ abstract class StaticTypeVisitor extends StaticTypeBase {
@override
Null visitField(ir.Field node) {
thisType = new ThisInterfaceType.from(node.enclosingClass?.thisType);
_currentVariables = new Set<ir.VariableDeclaration>();
visitNode(node.initializer);
handleField(node);
_invalidatedVariables.removeAll(_currentVariables);
_currentVariables = null;
thisType = null;
}

Expand Down
27 changes: 27 additions & 0 deletions tests/compiler/dart2js_extra/block_expression_on_field_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright (c) 2019, 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.

/// Regression test for #36864
///
/// Block expressions in top-level fields used to crash the compiler.
import "package:expect/expect.dart";

final _a = {
...{1}
};

class B {
static Set _b = {
...{2}
};
Set _c = {
...{3}
};
}

main() {
Expect.setEquals({1}, _a);
Expect.setEquals({2}, B._b);
Expect.setEquals({3}, (new B()._c));
}

0 comments on commit 9ac7bd7

Please sign in to comment.