diff --git a/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart b/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart new file mode 100644 index 00000000000..a34b2714262 --- /dev/null +++ b/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart @@ -0,0 +1,49 @@ +// 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 Enum { + a(), + b(), + c(), +} + +method1(Enum e) { + switch (e) { + case Enum.a: + case Enum.b: + case Enum.c: + } +} + +method2(Enum e) { + switch (e) { + case Enum.a: + case Enum.b: + case Enum.c: + } +} + +method3(Enum e) { + switch (e) { + case Enum.a: + case Enum.b: + case Enum.c: + } +} + +method4(Enum e) { + switch (e) { + case Enum.a: + case Enum.b: + case Enum.c: + } +} + +method5(Enum e) { + switch (e) { + case Enum.a: + case Enum.b: + case Enum.c: + } +} diff --git a/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.strong.expect new file mode 100644 index 00000000000..dea81c9830c --- /dev/null +++ b/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.strong.expect @@ -0,0 +1,171 @@ +library /*isNonNullableByDefault*/; +// +// Problems in library: +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:22:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:20:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:23:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:20:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:29:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.a: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:28:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:30:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:28:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:31:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:28:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:37:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.a: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:36:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:38:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:36:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:39:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:36:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:45:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.a: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:44:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:46:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:44:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:47:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:44:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +import self as self; +import "dart:core" as core; + +class Enum extends core::_Enum /*isEnum*/ { + static const field core::List> values = #C10; + enum-element static const field self::Enum a = #C3; + enum-element static const field self::Enum b = #C6; + enum-element static const field self::Enum c = #C9; + const constructor •(core::int #index, core::String #name) → self::Enum + : super core::_Enum::•(#index, #name) + ; + method _enumToString() → core::String + return "Enum.${this.{core::_Enum::_name}{core::String}}"; +} +static method method1(self::Enum e) → dynamic { + switch(e) /*isExplicitlyExhaustive*/ { + #L1: + case #C3: + case #C6: + case #C9: + {} + } +} +static method method2(self::Enum e) → dynamic { + switch(e) /*isExplicitlyExhaustive*/ { + #L2: + case #C3: + case #C6: + case #C9: + {} + } +} +static method method3(self::Enum e) → dynamic { + switch(e) /*isExplicitlyExhaustive*/ { + #L3: + case #C3: + case #C6: + case #C9: + {} + } +} +static method method4(self::Enum e) → dynamic { + switch(e) /*isExplicitlyExhaustive*/ { + #L4: + case #C3: + case #C6: + case #C9: + {} + } +} +static method method5(self::Enum e) → dynamic { + switch(e) /*isExplicitlyExhaustive*/ { + #L5: + case #C3: + case #C6: + case #C9: + {} + } +} + +constants { + #C1 = 0 + #C2 = "a" + #C3 = self::Enum {index:#C1, _name:#C2} + #C4 = 1 + #C5 = "b" + #C6 = self::Enum {index:#C4, _name:#C5} + #C7 = 2 + #C8 = "c" + #C9 = self::Enum {index:#C7, _name:#C8} + #C10 = >[#C3, #C6, #C9] +} + + +Constructor coverage from constants: +org-dartlang-testcase:///generic_enum_switch.dart: +- Enum. (from org-dartlang-testcase:///generic_enum_switch.dart:5:6) +- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart) +- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart) diff --git a/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.strong.transformed.expect new file mode 100644 index 00000000000..dea81c9830c --- /dev/null +++ b/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.strong.transformed.expect @@ -0,0 +1,171 @@ +library /*isNonNullableByDefault*/; +// +// Problems in library: +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:22:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:20:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:23:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:20:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:29:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.a: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:28:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:30:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:28:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:31:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:28:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:37:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.a: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:36:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:38:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:36:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:39:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:36:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:45:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.a: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:44:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:46:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:44:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:47:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:44:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +import self as self; +import "dart:core" as core; + +class Enum extends core::_Enum /*isEnum*/ { + static const field core::List> values = #C10; + enum-element static const field self::Enum a = #C3; + enum-element static const field self::Enum b = #C6; + enum-element static const field self::Enum c = #C9; + const constructor •(core::int #index, core::String #name) → self::Enum + : super core::_Enum::•(#index, #name) + ; + method _enumToString() → core::String + return "Enum.${this.{core::_Enum::_name}{core::String}}"; +} +static method method1(self::Enum e) → dynamic { + switch(e) /*isExplicitlyExhaustive*/ { + #L1: + case #C3: + case #C6: + case #C9: + {} + } +} +static method method2(self::Enum e) → dynamic { + switch(e) /*isExplicitlyExhaustive*/ { + #L2: + case #C3: + case #C6: + case #C9: + {} + } +} +static method method3(self::Enum e) → dynamic { + switch(e) /*isExplicitlyExhaustive*/ { + #L3: + case #C3: + case #C6: + case #C9: + {} + } +} +static method method4(self::Enum e) → dynamic { + switch(e) /*isExplicitlyExhaustive*/ { + #L4: + case #C3: + case #C6: + case #C9: + {} + } +} +static method method5(self::Enum e) → dynamic { + switch(e) /*isExplicitlyExhaustive*/ { + #L5: + case #C3: + case #C6: + case #C9: + {} + } +} + +constants { + #C1 = 0 + #C2 = "a" + #C3 = self::Enum {index:#C1, _name:#C2} + #C4 = 1 + #C5 = "b" + #C6 = self::Enum {index:#C4, _name:#C5} + #C7 = 2 + #C8 = "c" + #C9 = self::Enum {index:#C7, _name:#C8} + #C10 = >[#C3, #C6, #C9] +} + + +Constructor coverage from constants: +org-dartlang-testcase:///generic_enum_switch.dart: +- Enum. (from org-dartlang-testcase:///generic_enum_switch.dart:5:6) +- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart) +- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart) diff --git a/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.textual_outline.expect new file mode 100644 index 00000000000..f8dce38e52f --- /dev/null +++ b/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.textual_outline.expect @@ -0,0 +1,11 @@ +enum Enum { + a(), + b(), + c(), +} + +method1(Enum e) {} +method2(Enum e) {} +method3(Enum e) {} +method4(Enum e) {} +method5(Enum e) {} diff --git a/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.textual_outline_modelled.expect new file mode 100644 index 00000000000..f8dce38e52f --- /dev/null +++ b/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.textual_outline_modelled.expect @@ -0,0 +1,11 @@ +enum Enum { + a(), + b(), + c(), +} + +method1(Enum e) {} +method2(Enum e) {} +method3(Enum e) {} +method4(Enum e) {} +method5(Enum e) {} diff --git a/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.weak.expect new file mode 100644 index 00000000000..acc555ae599 --- /dev/null +++ b/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.weak.expect @@ -0,0 +1,202 @@ +library /*isNonNullableByDefault*/; +// +// Problems in library: +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:22:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:20:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:23:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:20:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:29:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.a: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:28:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:30:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:28:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:31:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:28:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:37:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.a: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:36:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:38:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:36:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:39:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:36:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:45:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.a: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:44:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:46:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:44:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:47:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:44:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +import self as self; +import "dart:core" as core; +import "dart:_internal" as _in; + +class Enum extends core::_Enum /*isEnum*/ { + static const field core::List> values = #C10; + enum-element static const field self::Enum a = #C3; + enum-element static const field self::Enum b = #C6; + enum-element static const field self::Enum c = #C9; + const constructor •(core::int #index, core::String #name) → self::Enum + : super core::_Enum::•(#index, #name) + ; + method _enumToString() → core::String + return "Enum.${this.{core::_Enum::_name}{core::String}}"; +} +static method method1(self::Enum e) → dynamic { + #L1: + switch(e) /*isExplicitlyExhaustive*/ { + #L2: + case #C3: + case #C6: + case #C9: + { + break #L1; + } + #L3: + default: + throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type."); + } +} +static method method2(self::Enum e) → dynamic { + #L4: + switch(e) /*isExplicitlyExhaustive*/ { + #L5: + case #C3: + case #C6: + case #C9: + { + break #L4; + } + #L6: + default: + throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type."); + } +} +static method method3(self::Enum e) → dynamic { + #L7: + switch(e) /*isExplicitlyExhaustive*/ { + #L8: + case #C3: + case #C6: + case #C9: + { + break #L7; + } + #L9: + default: + throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type."); + } +} +static method method4(self::Enum e) → dynamic { + #L10: + switch(e) /*isExplicitlyExhaustive*/ { + #L11: + case #C3: + case #C6: + case #C9: + { + break #L10; + } + #L12: + default: + throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type."); + } +} +static method method5(self::Enum e) → dynamic { + #L13: + switch(e) /*isExplicitlyExhaustive*/ { + #L14: + case #C3: + case #C6: + case #C9: + { + break #L13; + } + #L15: + default: + throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type."); + } +} + +constants { + #C1 = 0 + #C2 = "a" + #C3 = self::Enum {index:#C1, _name:#C2} + #C4 = 1 + #C5 = "b" + #C6 = self::Enum {index:#C4, _name:#C5} + #C7 = 2 + #C8 = "c" + #C9 = self::Enum {index:#C7, _name:#C8} + #C10 = *>[#C3, #C6, #C9] +} + + +Constructor coverage from constants: +org-dartlang-testcase:///generic_enum_switch.dart: +- Enum. (from org-dartlang-testcase:///generic_enum_switch.dart:5:6) +- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart) +- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart) diff --git a/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.weak.modular.expect new file mode 100644 index 00000000000..acc555ae599 --- /dev/null +++ b/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.weak.modular.expect @@ -0,0 +1,202 @@ +library /*isNonNullableByDefault*/; +// +// Problems in library: +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:22:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:20:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:23:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:20:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:29:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.a: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:28:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:30:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:28:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:31:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:28:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:37:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.a: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:36:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:38:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:36:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:39:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:36:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:45:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.a: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:44:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:46:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:44:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:47:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:44:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +import self as self; +import "dart:core" as core; +import "dart:_internal" as _in; + +class Enum extends core::_Enum /*isEnum*/ { + static const field core::List> values = #C10; + enum-element static const field self::Enum a = #C3; + enum-element static const field self::Enum b = #C6; + enum-element static const field self::Enum c = #C9; + const constructor •(core::int #index, core::String #name) → self::Enum + : super core::_Enum::•(#index, #name) + ; + method _enumToString() → core::String + return "Enum.${this.{core::_Enum::_name}{core::String}}"; +} +static method method1(self::Enum e) → dynamic { + #L1: + switch(e) /*isExplicitlyExhaustive*/ { + #L2: + case #C3: + case #C6: + case #C9: + { + break #L1; + } + #L3: + default: + throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type."); + } +} +static method method2(self::Enum e) → dynamic { + #L4: + switch(e) /*isExplicitlyExhaustive*/ { + #L5: + case #C3: + case #C6: + case #C9: + { + break #L4; + } + #L6: + default: + throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type."); + } +} +static method method3(self::Enum e) → dynamic { + #L7: + switch(e) /*isExplicitlyExhaustive*/ { + #L8: + case #C3: + case #C6: + case #C9: + { + break #L7; + } + #L9: + default: + throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type."); + } +} +static method method4(self::Enum e) → dynamic { + #L10: + switch(e) /*isExplicitlyExhaustive*/ { + #L11: + case #C3: + case #C6: + case #C9: + { + break #L10; + } + #L12: + default: + throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type."); + } +} +static method method5(self::Enum e) → dynamic { + #L13: + switch(e) /*isExplicitlyExhaustive*/ { + #L14: + case #C3: + case #C6: + case #C9: + { + break #L13; + } + #L15: + default: + throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type."); + } +} + +constants { + #C1 = 0 + #C2 = "a" + #C3 = self::Enum {index:#C1, _name:#C2} + #C4 = 1 + #C5 = "b" + #C6 = self::Enum {index:#C4, _name:#C5} + #C7 = 2 + #C8 = "c" + #C9 = self::Enum {index:#C7, _name:#C8} + #C10 = *>[#C3, #C6, #C9] +} + + +Constructor coverage from constants: +org-dartlang-testcase:///generic_enum_switch.dart: +- Enum. (from org-dartlang-testcase:///generic_enum_switch.dart:5:6) +- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart) +- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart) diff --git a/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.weak.outline.expect new file mode 100644 index 00000000000..c6c94021d61 --- /dev/null +++ b/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.weak.outline.expect @@ -0,0 +1,33 @@ +library /*isNonNullableByDefault*/; +import self as self; +import "dart:core" as core; + +class Enum extends core::_Enum /*isEnum*/ { + static const field core::List> values = const >[self::Enum::a, self::Enum::b, self::Enum::c]; + enum-element static const field self::Enum a = const self::Enum::•(0, "a"); + enum-element static const field self::Enum b = const self::Enum::•(1, "b"); + enum-element static const field self::Enum c = const self::Enum::•(2, "c"); + const constructor •(core::int #index, core::String #name) → self::Enum + : super core::_Enum::•(#index, #name) + ; + method _enumToString() → core::String + return "Enum.${this.{core::_Enum::_name}{core::String}}"; +} +static method method1(self::Enum e) → dynamic + ; +static method method2(self::Enum e) → dynamic + ; +static method method3(self::Enum e) → dynamic + ; +static method method4(self::Enum e) → dynamic + ; +static method method5(self::Enum e) → dynamic + ; + + +Extra constant evaluation status: +Evaluated: ListLiteral @ org-dartlang-testcase:///generic_enum_switch.dart:5:6 -> ListConstant(const *>[const Enum{_Enum.index: 0, _Enum._name: "a"}, const Enum{_Enum.index: 1, _Enum._name: "b"}, const Enum{_Enum.index: 2, _Enum._name: "c"}]) +Evaluated: ConstructorInvocation @ org-dartlang-testcase:///generic_enum_switch.dart:6:3 -> InstanceConstant(const Enum{_Enum.index: 0, _Enum._name: "a"}) +Evaluated: ConstructorInvocation @ org-dartlang-testcase:///generic_enum_switch.dart:7:3 -> InstanceConstant(const Enum{_Enum.index: 1, _Enum._name: "b"}) +Evaluated: ConstructorInvocation @ org-dartlang-testcase:///generic_enum_switch.dart:8:3 -> InstanceConstant(const Enum{_Enum.index: 2, _Enum._name: "c"}) +Extra constant evaluation: evaluated: 9, effectively constant: 4 diff --git a/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.weak.transformed.expect new file mode 100644 index 00000000000..acc555ae599 --- /dev/null +++ b/pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart.weak.transformed.expect @@ -0,0 +1,202 @@ +library /*isNonNullableByDefault*/; +// +// Problems in library: +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:22:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:20:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:23:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:20:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:29:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.a: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:28:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:30:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:28:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:31:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:28:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:37:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.a: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:36:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:38:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:36:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:39:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:36:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:45:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.a: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:44:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:46:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.b: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:44:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:47:15: Error: Type 'Enum' of the case expression is not a subtype of type 'Enum' of this switch expression. +// - 'Enum' is from 'pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart'. +// case Enum.c: +// ^ +// pkg/front_end/testcases/enhanced_enums/generic_enum_switch.dart:44:11: Context: The switch expression is here. +// switch (e) { +// ^ +// +import self as self; +import "dart:core" as core; +import "dart:_internal" as _in; + +class Enum extends core::_Enum /*isEnum*/ { + static const field core::List> values = #C10; + enum-element static const field self::Enum a = #C3; + enum-element static const field self::Enum b = #C6; + enum-element static const field self::Enum c = #C9; + const constructor •(core::int #index, core::String #name) → self::Enum + : super core::_Enum::•(#index, #name) + ; + method _enumToString() → core::String + return "Enum.${this.{core::_Enum::_name}{core::String}}"; +} +static method method1(self::Enum e) → dynamic { + #L1: + switch(e) /*isExplicitlyExhaustive*/ { + #L2: + case #C3: + case #C6: + case #C9: + { + break #L1; + } + #L3: + default: + throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type."); + } +} +static method method2(self::Enum e) → dynamic { + #L4: + switch(e) /*isExplicitlyExhaustive*/ { + #L5: + case #C3: + case #C6: + case #C9: + { + break #L4; + } + #L6: + default: + throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type."); + } +} +static method method3(self::Enum e) → dynamic { + #L7: + switch(e) /*isExplicitlyExhaustive*/ { + #L8: + case #C3: + case #C6: + case #C9: + { + break #L7; + } + #L9: + default: + throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type."); + } +} +static method method4(self::Enum e) → dynamic { + #L10: + switch(e) /*isExplicitlyExhaustive*/ { + #L11: + case #C3: + case #C6: + case #C9: + { + break #L10; + } + #L12: + default: + throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type."); + } +} +static method method5(self::Enum e) → dynamic { + #L13: + switch(e) /*isExplicitlyExhaustive*/ { + #L14: + case #C3: + case #C6: + case #C9: + { + break #L13; + } + #L15: + default: + throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type."); + } +} + +constants { + #C1 = 0 + #C2 = "a" + #C3 = self::Enum {index:#C1, _name:#C2} + #C4 = 1 + #C5 = "b" + #C6 = self::Enum {index:#C4, _name:#C5} + #C7 = 2 + #C8 = "c" + #C9 = self::Enum {index:#C7, _name:#C8} + #C10 = *>[#C3, #C6, #C9] +} + + +Constructor coverage from constants: +org-dartlang-testcase:///generic_enum_switch.dart: +- Enum. (from org-dartlang-testcase:///generic_enum_switch.dart:5:6) +- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart) +- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)