-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[cfe] Infer constness in enum element initializers
Part of #47453 Closes #48233 Change-Id: Iaa75ccac6622e874da5f6e5feb053fc19a220936 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/232382 Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Chloe Stefantsova <cstefantsova@google.com>
- Loading branch information
1 parent
9863451
commit 7263b35
Showing
10 changed files
with
175 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
// Copyright (c) 2022, 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. | ||
|
||
enum E { | ||
v([]); // No error. | ||
const E(_); | ||
} | ||
|
||
main() {} |
28 changes: 28 additions & 0 deletions
28
pkg/front_end/testcases/enhanced_enums/issue48232.dart.strong.expect
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
library /*isNonNullableByDefault*/; | ||
import self as self; | ||
import "dart:core" as core; | ||
|
||
class E extends core::_Enum /*isEnum*/ { | ||
static const field core::List<self::E> values = #C4; | ||
static const field self::E v = #C3; | ||
const constructor •(core::int index, core::String name, dynamic _) → self::E | ||
: super core::_Enum::•(index, name) | ||
; | ||
method toString() → core::String | ||
return "E.${this.{core::_Enum::_name}{core::String}}"; | ||
} | ||
static method main() → dynamic {} | ||
|
||
constants { | ||
#C1 = 0 | ||
#C2 = "v" | ||
#C3 = self::E {index:#C1, _name:#C2} | ||
#C4 = <self::E>[#C3] | ||
} | ||
|
||
|
||
Constructor coverage from constants: | ||
org-dartlang-testcase:///issue48232.dart: | ||
- E. (from org-dartlang-testcase:///issue48232.dart:7:9) | ||
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9) | ||
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9) |
28 changes: 28 additions & 0 deletions
28
pkg/front_end/testcases/enhanced_enums/issue48232.dart.strong.transformed.expect
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
library /*isNonNullableByDefault*/; | ||
import self as self; | ||
import "dart:core" as core; | ||
|
||
class E extends core::_Enum /*isEnum*/ { | ||
static const field core::List<self::E> values = #C4; | ||
static const field self::E v = #C3; | ||
const constructor •(core::int index, core::String name, dynamic _) → self::E | ||
: super core::_Enum::•(index, name) | ||
; | ||
method toString() → core::String | ||
return "E.${this.{core::_Enum::_name}{core::String}}"; | ||
} | ||
static method main() → dynamic {} | ||
|
||
constants { | ||
#C1 = 0 | ||
#C2 = "v" | ||
#C3 = self::E {index:#C1, _name:#C2} | ||
#C4 = <self::E>[#C3] | ||
} | ||
|
||
|
||
Constructor coverage from constants: | ||
org-dartlang-testcase:///issue48232.dart: | ||
- E. (from org-dartlang-testcase:///issue48232.dart:7:9) | ||
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9) | ||
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9) |
2 changes: 2 additions & 0 deletions
2
pkg/front_end/testcases/enhanced_enums/issue48232.dart.textual_outline.expect
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
enum E { v([]); const E(_); } | ||
main() {} |
28 changes: 28 additions & 0 deletions
28
pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.expect
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
library /*isNonNullableByDefault*/; | ||
import self as self; | ||
import "dart:core" as core; | ||
|
||
class E extends core::_Enum /*isEnum*/ { | ||
static const field core::List<self::E> values = #C4; | ||
static const field self::E v = #C3; | ||
const constructor •(core::int index, core::String name, dynamic _) → self::E | ||
: super core::_Enum::•(index, name) | ||
; | ||
method toString() → core::String | ||
return "E.${this.{core::_Enum::_name}{core::String}}"; | ||
} | ||
static method main() → dynamic {} | ||
|
||
constants { | ||
#C1 = 0 | ||
#C2 = "v" | ||
#C3 = self::E {index:#C1, _name:#C2} | ||
#C4 = <self::E*>[#C3] | ||
} | ||
|
||
|
||
Constructor coverage from constants: | ||
org-dartlang-testcase:///issue48232.dart: | ||
- E. (from org-dartlang-testcase:///issue48232.dart:7:9) | ||
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9) | ||
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9) |
28 changes: 28 additions & 0 deletions
28
pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.modular.expect
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
library /*isNonNullableByDefault*/; | ||
import self as self; | ||
import "dart:core" as core; | ||
|
||
class E extends core::_Enum /*isEnum*/ { | ||
static const field core::List<self::E> values = #C4; | ||
static const field self::E v = #C3; | ||
const constructor •(core::int index, core::String name, dynamic _) → self::E | ||
: super core::_Enum::•(index, name) | ||
; | ||
method toString() → core::String | ||
return "E.${this.{core::_Enum::_name}{core::String}}"; | ||
} | ||
static method main() → dynamic {} | ||
|
||
constants { | ||
#C1 = 0 | ||
#C2 = "v" | ||
#C3 = self::E {index:#C1, _name:#C2} | ||
#C4 = <self::E*>[#C3] | ||
} | ||
|
||
|
||
Constructor coverage from constants: | ||
org-dartlang-testcase:///issue48232.dart: | ||
- E. (from org-dartlang-testcase:///issue48232.dart:7:9) | ||
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9) | ||
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9) |
21 changes: 21 additions & 0 deletions
21
pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.outline.expect
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
library /*isNonNullableByDefault*/; | ||
import self as self; | ||
import "dart:core" as core; | ||
|
||
class E extends core::_Enum /*isEnum*/ { | ||
static const field core::List<self::E> values = const <self::E>[self::E::v]; | ||
static const field self::E v = const self::E::•(0, "v", const <dynamic>[]); | ||
const constructor •(core::int index, core::String name, dynamic _) → self::E | ||
: super core::_Enum::•(index, name) | ||
; | ||
method toString() → core::String | ||
return "E.${this.{core::_Enum::_name}{core::String}}"; | ||
} | ||
static method main() → dynamic | ||
; | ||
|
||
|
||
Extra constant evaluation status: | ||
Evaluated: ListLiteral @ org-dartlang-testcase:///issue48232.dart:5:6 -> ListConstant(const <E*>[const E{_Enum.index: 0, _Enum._name: "v"}]) | ||
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue48232.dart:6:5 -> InstanceConstant(const E{_Enum.index: 0, _Enum._name: "v"}) | ||
Extra constant evaluation: evaluated: 7, effectively constant: 2 |
28 changes: 28 additions & 0 deletions
28
pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.transformed.expect
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
library /*isNonNullableByDefault*/; | ||
import self as self; | ||
import "dart:core" as core; | ||
|
||
class E extends core::_Enum /*isEnum*/ { | ||
static const field core::List<self::E> values = #C4; | ||
static const field self::E v = #C3; | ||
const constructor •(core::int index, core::String name, dynamic _) → self::E | ||
: super core::_Enum::•(index, name) | ||
; | ||
method toString() → core::String | ||
return "E.${this.{core::_Enum::_name}{core::String}}"; | ||
} | ||
static method main() → dynamic {} | ||
|
||
constants { | ||
#C1 = 0 | ||
#C2 = "v" | ||
#C3 = self::E {index:#C1, _name:#C2} | ||
#C4 = <self::E*>[#C3] | ||
} | ||
|
||
|
||
Constructor coverage from constants: | ||
org-dartlang-testcase:///issue48232.dart: | ||
- E. (from org-dartlang-testcase:///issue48232.dart:7:9) | ||
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9) | ||
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters