library;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/const_patterns.dart:26:12: Error: Method invocation is not a constant expression.
//       case super(): // Error
//            ^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:43:13: Error: Only negation of a numeric literal is supported as a constant pattern.
// Try wrapping the expression in 'const ( ... )'.
//       case -value: // Error
//             ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:45:13: Error: Only negation of a numeric literal is supported as a constant pattern.
// Try wrapping the expression in 'const ( ... )'.
//       case -local: // Error
//             ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:48:13: Error: Only negation of a numeric literal is supported as a constant pattern.
// Try wrapping the expression in 'const ( ... )'.
//       case -prefix.value: // Error
//             ^^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:48:20: Error: Only negation of a numeric literal is supported as a constant pattern.
// Try wrapping the expression in 'const ( ... )'.
//       case -prefix.value: // Error
//                    ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:50:14: Error: The binary operator + is not supported as a constant pattern.
// Try wrapping the expression in 'const ( ... )'.
//       case 1 + 2: // Error
//              ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:51:14: Error: The binary operator * is not supported as a constant pattern.
// Try wrapping the expression in 'const ( ... )'.
//       case 1 * 2: // Error
//              ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:52:20: Error: Expected ':' before this.
//       case void fun() {}: // Error
//                    ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:52:24: Error: Expected ';' after this.
//       case void fun() {}: // Error
//                        ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:52:25: Error: Expected an identifier, but got ':'.
// Try inserting an identifier before ':'.
//       case void fun() {}: // Error
//                         ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:52:25: Error: Unexpected token ':'.
//       case void fun() {}: // Error
//                         ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:53:12: Error: `assert` can't be used as an expression.
//       case assert(false): // Error
//            ^^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:54:20: Error: Not a constant expression.
//       case switch (o) { _ => true }: // Error
//                    ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:56:12: Error: The unary operator ! is not supported as a constant pattern.
// Try wrapping the expression in 'const ( ... )'.
//       case !false: // Error
//            ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:57:12: Error: The unary operator ~ is not supported as a constant pattern.
// Try wrapping the expression in 'const ( ... )'.
//       case ~0: // Error
//            ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:58:14: Error: Not a constant expression.
//       case ++variable: // Error
//              ^^^^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:59:18: Error: The expression can't be prefixed by 'const' to form a constant pattern.
// Try wrapping the expression in 'const ( ... )' instead.
//       case const 0: // Error
//                  ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:60:18: Error: The expression can't be prefixed by 'const' to form a constant pattern.
// Try wrapping the expression in 'const ( ... )' instead.
//       case const 0x0: // Error
//                  ^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:61:18: Error: The expression can't be prefixed by 'const' to form a constant pattern.
// Try wrapping the expression in 'const ( ... )' instead.
//       case const 0.5: // Error
//                  ^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:62:18: Error: The expression can't be prefixed by 'const' to form a constant pattern.
// Try wrapping the expression in 'const ( ... )' instead.
//       case const true: // Error
//                  ^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:63:18: Error: The expression can't be prefixed by 'const' to form a constant pattern.
// Try wrapping the expression in 'const ( ... )' instead.
//       case const null: // Error
//                  ^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:64:18: Error: The expression can't be prefixed by 'const' to form a constant pattern.
// Try wrapping the expression in 'const ( ... )' instead.
//       case const -0: // Error
//                  ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:65:18: Error: The expression can't be prefixed by 'const' to form a constant pattern.
// Try wrapping the expression in 'const ( ... )' instead.
//       case const 'foo': // Error
//                  ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:66:18: Error: The expression can't be prefixed by 'const' to form a constant pattern.
// Try wrapping the expression in 'const ( ... )' instead.
//       case const #a: // Error
//                  ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:67:18: Error: The expression can't be prefixed by 'const' to form a constant pattern.
// Try wrapping the expression in 'const ( ... )' instead.
//       case const value: // Error
//                  ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:68:18: Error: The expression can't be prefixed by 'const' to form a constant pattern.
// Try wrapping the expression in 'const ( ... )' instead.
//       case const local: // Error
//                  ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:69:25: Error: The expression can't be prefixed by 'const' to form a constant pattern.
// Try wrapping the expression in 'const ( ... )' instead.
//       case const prefix.value: // Error
//                         ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:70:18: Error: The expression can't be prefixed by 'const' to form a constant pattern.
// Try wrapping the expression in 'const ( ... )' instead.
//       case const -prefix.value: // Error
//                  ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:71:31: Error: The expression can't be prefixed by 'const' to form a constant pattern.
// Try wrapping the expression in 'const ( ... )' instead.
//       case const prefix.Class.named: // Error
//                               ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:72:18: Error: The expression can't be prefixed by 'const' to form a constant pattern.
// Try wrapping the expression in 'const ( ... )' instead.
//       case const 1 + 2: // Error
//                  ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:73:23: Error: A function expression can't have a name.
//       case const void fun() {}: // Error
//                       ^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:74:18: Error: `assert` can't be used as an expression.
//       case const assert(false): // Error
//                  ^^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:75:26: Error: Not a constant expression.
//       case const switch (o) { _ => true }: // Error
//                          ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:77:18: Error: The unary operator ! is not supported as a constant pattern.
// Try wrapping the expression in 'const ( ... )'.
//       case const !false: // Error
//                  ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:78:18: Error: The unary operator ~ is not supported as a constant pattern.
// Try wrapping the expression in 'const ( ... )'.
//       case const ~0: // Error
//                  ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:79:20: Error: Not a constant expression.
//       case const ++variable: // Error
//                    ^^^^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:92:18: Error: Duplicate 'const' keyword in constant expression.
// Try removing one of the 'const' keywords.
//       case const const Class(): // Error
//                  ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:93:18: Error: Duplicate 'const' keyword in constant expression.
// Try removing one of the 'const' keywords.
//       case const const Class(0): // Error
//                  ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:94:18: Error: Duplicate 'const' keyword in constant expression.
// Try removing one of the 'const' keywords.
//       case const const GenericClass(): // Error
//                  ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:95:18: Error: Duplicate 'const' keyword in constant expression.
// Try removing one of the 'const' keywords.
//       case const const GenericClass(a: 0): // Error
//                  ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:96:18: Error: Duplicate 'const' keyword in constant expression.
// Try removing one of the 'const' keywords.
//       case const const GenericClass<int>(): // Error
//                  ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:97:18: Error: Duplicate 'const' keyword in constant expression.
// Try removing one of the 'const' keywords.
//       case const const GenericClass<int>(a: 0): // Error
//                  ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:98:18: Error: Duplicate 'const' keyword in constant expression.
// Try removing one of the 'const' keywords.
//       case const const []: // Error
//                  ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:99:18: Error: Duplicate 'const' keyword in constant expression.
// Try removing one of the 'const' keywords.
//       case const const <int>[]: // Error
//                  ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:100:18: Error: Duplicate 'const' keyword in constant expression.
// Try removing one of the 'const' keywords.
//       case const const {}: // Error
//                  ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:101:18: Error: Duplicate 'const' keyword in constant expression.
// Try removing one of the 'const' keywords.
//       case const const <int, String>{}: // Error
//                  ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:102:18: Error: New expression is not a constant expression.
//       case const new Class(): // Error
//                  ^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:103:12: Error: New expression is not a constant expression.
//       case new Class(): // Error
//            ^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:104:18: Error: The empty record literal is not supported as a constant pattern.
//       case const (): // Error
//                  ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:105:18: Error: Duplicate 'const' keyword in constant expression.
// Try removing one of the 'const' keywords.
//       case const const (): // Error
//                  ^^^^^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:111:24: Error: This expression is not supported as a constant pattern.
// Try wrapping the expression in 'const ( ... )'.
//       case GenericClass<int>: // Error
//                        ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:112:31: Error: This expression is not supported as a constant pattern.
// Try wrapping the expression in 'const ( ... )'.
//       case prefix.GenericClass<int>: // Error
//                               ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:113:24: Error: This expression is not supported as a constant pattern.
// Try wrapping the expression in 'const ( ... )'.
//       case GenericClass<int>.new: // Error
//                        ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:114:31: Error: This expression is not supported as a constant pattern.
// Try wrapping the expression in 'const ( ... )'.
//       case prefix.GenericClass<int>.new: // Error
//                               ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:115:30: Error: This expression is not supported as a constant pattern.
// Try wrapping the expression in 'const ( ... )'.
//       case const GenericClass<int>: // Error
//                              ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:116:37: Error: This expression is not supported as a constant pattern.
// Try wrapping the expression in 'const ( ... )'.
//       case const prefix.GenericClass<int>: // Error
//                                     ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:24:12: Error: Not a constant expression.
//       case this: // Error
//            ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:25:12: Error: Not a constant expression.
//       case this(): // Error
//            ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:54:12: Error: Not a constant expression.
//       case switch (o) { _ => true }: // Error
//            ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:55:12: Error: Not a constant expression.
//       case await 0: // Error
//            ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:73:18: Error: Not a constant expression.
//       case const void fun() {}: // Error
//                  ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:75:18: Error: Not a constant expression.
//       case const switch (o) { _ => true }: // Error
//                  ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:76:18: Error: Not a constant expression.
//       case const await 0: // Error
//                  ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:102:22: Error: New expression is not a constant expression.
//       case const new Class(): // Error
//                      ^
//
// pkg/front_end/testcases/patterns/const_patterns.dart:103:16: Error: New expression is not a constant expression.
//       case new Class(): // Error
//                ^
//
import self as self;
import "dart:core" as core;

import "org-dartlang-testcase:///const_patterns.dart" as prefix;

class Class extends core::Object /*hasConstConstructor*/  {
  const constructor •([dynamic a = #C1]) → self::Class
    : super core::Object::•()
    ;
  const constructor named() → self::Class
    : super core::Object::•()
    ;
  method call() → dynamic {}
  method test(dynamic o) → dynamic async /* emittedValueType= dynamic */ {
    dynamic variable = 0;
    #L1:
    {
      final synthesized dynamic #2#0 = o;
      synthesized core::bool #2#2;
      synthesized core::bool #2#2#isSet = false;
      synthesized core::bool #2#4;
      synthesized core::bool #2#4#isSet = false;
      final const synthesized self::Class #2#5 = invalid-expression "Not a constant expression.";
      final const synthesized dynamic #2#7 = invalid-expression "Not a constant expression.";
      final const synthesized invalid-type #2#9 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:26:12: Error: Method invocation is not a constant expression.
      case super(): // Error
           ^^^^";
      synthesized core::bool #2#12;
      synthesized core::bool #2#12#isSet = false;
      synthesized core::bool #2#14;
      synthesized core::bool #2#14#isSet = false;
      synthesized core::bool #2#20;
      synthesized core::bool #2#20#isSet = false;
      synthesized core::bool #2#24;
      synthesized core::bool #2#24#isSet = false;
      synthesized core::bool #2#27;
      synthesized core::bool #2#27#isSet = false;
      synthesized core::bool #2#31;
      synthesized core::bool #2#31#isSet = false;
      synthesized core::bool #2#35;
      synthesized core::bool #2#35#isSet = false;
      synthesized core::bool #2#37;
      synthesized core::bool #2#37#isSet = false;
      final const synthesized invalid-type #2#40 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:53:12: Error: `assert` can't be used as an expression.
      case assert(false): // Error
           ^^^^^^";
      final const synthesized core::bool #2#42 = invalid-expression "Not a constant expression.";
      final const synthesized core::int #2#44 = invalid-expression "Not a constant expression.";
      synthesized core::bool #2#47;
      synthesized core::bool #2#47#isSet = false;
      final const synthesized invalid-type #2#48 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:58:14: Error: Not a constant expression.
      case ++variable: // Error
             ^^^^^^^^";
      final const synthesized invalid-type #2#54 = invalid-expression "Not a constant expression.";
      final const synthesized invalid-type #2#56 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:74:18: Error: `assert` can't be used as an expression.
      case const assert(false): // Error
                 ^^^^^^";
      final const synthesized core::bool #2#58 = invalid-expression "Not a constant expression.";
      final const synthesized core::int #2#60 = invalid-expression "Not a constant expression.";
      final const synthesized invalid-type #2#62 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:79:20: Error: Not a constant expression.
      case const ++variable: // Error
                   ^^^^^^^^";
      synthesized core::bool #2#65;
      synthesized core::bool #2#65#isSet = false;
      synthesized core::bool #2#67;
      synthesized core::bool #2#67#isSet = false;
      synthesized core::bool #2#69;
      synthesized core::bool #2#69#isSet = false;
      synthesized core::bool #2#71;
      synthesized core::bool #2#71#isSet = false;
      synthesized core::bool #2#73;
      synthesized core::bool #2#73#isSet = false;
      synthesized core::bool #2#75;
      synthesized core::bool #2#75#isSet = false;
      synthesized core::bool #2#77;
      synthesized core::bool #2#77#isSet = false;
      final const synthesized self::Class #2#78 = invalid-expression "New expression is not a constant expression.";
      final const synthesized self::Class #2#80 = invalid-expression "New expression is not a constant expression.";
      synthesized core::bool #2#83;
      synthesized core::bool #2#83#isSet = false;
      synthesized core::bool #2#87;
      synthesized core::bool #2#87#isSet = false;
      synthesized core::bool #2#89;
      synthesized core::bool #2#89#isSet = false;
      {
        hoisted void fun;
        if((#2#2#isSet ?{core::bool} #2#2{core::bool} : let final dynamic #t1 = #2#2#isSet = true in #2#2 = #C2 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#4#isSet ?{core::bool} #2#4{core::bool} : let final dynamic #t2 = #2#4#isSet = true in #2#4 = #2#0 == null) || invalid-expression "Not a constant expression." =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "Not a constant expression." =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:26:12: Error: Method invocation is not a constant expression.
      case super(): // Error
           ^^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || (#2#12#isSet ?{core::bool} #2#12{core::bool} : let final dynamic #t3 = #2#12#isSet = true in #2#12 = #C3 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#14#isSet ?{core::bool} #2#14{core::bool} : let final dynamic #t4 = #2#14#isSet = true in #2#14 = #C4 =={core::num::==}{(core::Object) → core::bool} #2#0) || #C5 =={core::num::==}{(core::Object) → core::bool} #2#0 || #C6 =={core::num::==}{(core::Object) → core::bool} #2#0 || (#2#20#isSet ?{core::bool} #2#20{core::bool} : let final dynamic #t5 = #2#20#isSet = true in #2#20 = #C7 =={core::String::==}{(core::Object) → core::bool} #2#0) || #C8 =={core::String::==}{(core::Object) → core::bool} #2#0 || (#2#12#isSet ?{core::bool} #2#12{core::bool} : let final dynamic #t6 = #2#12#isSet = true in #2#12 = #C3 =={core::num::==}{(core::Object) → core::bool} #2#0) || (let final dynamic #t7 = #2#0! in #2#24#isSet ?{core::bool} #2#24{core::bool} : let final dynamic #t8 = #2#24#isSet = true in #2#24 = #C3 =={core::num::==}{(core::Object) → core::bool} #2#0!) || !(#2#0 == null) && (#2#12#isSet ?{core::bool} #2#12{core::bool} : let final dynamic #t9 = #2#12#isSet = true in #2#12 = #C3 =={core::num::==}{(core::Object) → core::bool} #2#0) || (let final dynamic #t10 = #2#0! in !(#2#0! == null) && (#2#24#isSet ?{core::bool} #2#24{core::bool} : let final dynamic #t11 = #2#24#isSet = true in #2#24 = #C3 =={core::num::==}{(core::Object) → core::bool} #2#0!)) || !(#2#0 == null) && (let final dynamic #t12 = #2#0! in #2#24#isSet ?{core::bool} #2#24{core::bool} : let final dynamic #t13 = #2#24#isSet = true in #2#24 = #C3 =={core::num::==}{(core::Object) → core::bool} #2#0!) || (let final dynamic #t14 = #2#0! in #2#27#isSet ?{core::bool} #2#27{core::bool} : let final dynamic #t15 = #2#27#isSet = true in #2#27 = #C4 =={core::num::==}{(core::Object) → core::bool} #2#0!) || !(#2#0 == null) && (#2#14#isSet ?{core::bool} #2#14{core::bool} : let final dynamic #t16 = #2#14#isSet = true in #2#14 = #C4 =={core::num::==}{(core::Object) → core::bool} #2#0) || !(#2#0 == null) && (let final dynamic #t17 = #2#0! in #2#27#isSet ?{core::bool} #2#27{core::bool} : let final dynamic #t18 = #2#27#isSet = true in #2#27 = #C4 =={core::num::==}{(core::Object) → core::bool} #2#0!) || (let final dynamic #t19 = #2#0! in !(#2#0! == null) && (#2#27#isSet ?{core::bool} #2#27{core::bool} : let final dynamic #t20 = #2#27#isSet = true in #2#27 = #C4 =={core::num::==}{(core::Object) → core::bool} #2#0!)) || (let final dynamic #t21 = #2#0 as core::int in #C3 =={core::num::==}{(core::Object) → core::bool} #2#0 as core::int) || (#2#14#isSet ?{core::bool} #2#14{core::bool} : let final dynamic #t22 = #2#14#isSet = true in #2#14 = #C4 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#31#isSet ?{core::bool} #2#31{core::bool} : let final dynamic #t23 = #2#31#isSet = true in #2#31 = #C9 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#31#isSet ?{core::bool} #2#31{core::bool} : let final dynamic #t24 = #2#31#isSet = true in #2#31 = #C9 =={core::Object::==}{(core::Object) → core::bool} #2#0) || #C10 =={core::Object::==}{(core::Object) → core::bool} #2#0 || (#2#12#isSet ?{core::bool} #2#12{core::bool} : let final dynamic #t25 = #2#12#isSet = true in #2#12 = #C3 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#14#isSet ?{core::bool} #2#14{core::bool} : let final dynamic #t26 = #2#14#isSet = true in #2#14 = #C4 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#35#isSet ?{core::bool} #2#35{core::bool} : let final dynamic #t27 = #2#35#isSet = true in #2#35 = #C11 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#37#isSet ?{core::bool} #2#37{core::bool} : let final dynamic #t28 = #2#37#isSet = true in #2#37 = #C12 =={core::num::==}{(core::Object) → core::bool} #2#0) || #C13 =={core::num::==}{(core::Object) → core::bool} #2#0 || #2#0{core::int} is void && (let final dynamic #t29 = fun = #2#0{core::int} in true)) {
          {
            () → Null {};
            invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:52:25: Error: This couldn't be parsed.
      case void fun() {}: // Error
                        ^";
            break #L1;
          }
        }
      }
      {
        if(invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:53:12: Error: `assert` can't be used as an expression.
      case assert(false): // Error
           ^^^^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "Not a constant expression." =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "Not a constant expression." =={core::num::==}{(core::Object) → core::bool} #2#0 || (#2#2#isSet ?{core::bool} #2#2{core::bool} : let final dynamic #t30 = #2#2#isSet = true in #2#2 = #C2 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#47#isSet ?{core::bool} #2#47{core::bool} : let final dynamic #t31 = #2#47#isSet = true in #2#47 = #C14 =={core::num::==}{(core::Object) → core::bool} #2#0) || invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:58:14: Error: Not a constant expression.
      case ++variable: // Error
             ^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || (#2#31#isSet ?{core::bool} #2#31{core::bool} : let final dynamic #t32 = #2#31#isSet = true in #2#31 = #C9 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#31#isSet ?{core::bool} #2#31{core::bool} : let final dynamic #t33 = #2#31#isSet = true in #2#31 = #C9 =={core::Object::==}{(core::Object) → core::bool} #2#0) || #C15 =={core::num::==}{(core::Object) → core::bool} #2#0 || (#2#2#isSet ?{core::bool} #2#2{core::bool} : let final dynamic #t34 = #2#2#isSet = true in #2#2 = #C2 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#4#isSet ?{core::bool} #2#4{core::bool} : let final dynamic #t35 = #2#4#isSet = true in #2#4 = #2#0 == null) || (#2#31#isSet ?{core::bool} #2#31{core::bool} : let final dynamic #t36 = #2#31#isSet = true in #2#31 = #C9 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#20#isSet ?{core::bool} #2#20{core::bool} : let final dynamic #t37 = #2#20#isSet = true in #2#20 = #C7 =={core::String::==}{(core::Object) → core::bool} #2#0) || #C16 =={core::Symbol::==}{(core::Object) → core::bool} #2#0 || (#2#12#isSet ?{core::bool} #2#12{core::bool} : let final dynamic #t38 = #2#12#isSet = true in #2#12 = #C3 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#31#isSet ?{core::bool} #2#31{core::bool} : let final dynamic #t39 = #2#31#isSet = true in #2#31 = #C9 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#12#isSet ?{core::bool} #2#12{core::bool} : let final dynamic #t40 = #2#12#isSet = true in #2#12 = #C3 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#14#isSet ?{core::bool} #2#14{core::bool} : let final dynamic #t41 = #2#14#isSet = true in #2#14 = #C4 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#35#isSet ?{core::bool} #2#35{core::bool} : let final dynamic #t42 = #2#35#isSet = true in #2#35 = #C11 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#37#isSet ?{core::bool} #2#37{core::bool} : let final dynamic #t43 = #2#37#isSet = true in #2#37 = #C12 =={core::num::==}{(core::Object) → core::bool} #2#0) || invalid-expression "Not a constant expression." =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:74:18: Error: `assert` can't be used as an expression.
      case const assert(false): // Error
                 ^^^^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "Not a constant expression." =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "Not a constant expression." =={core::num::==}{(core::Object) → core::bool} #2#0 || (#2#2#isSet ?{core::bool} #2#2{core::bool} : let final dynamic #t44 = #2#2#isSet = true in #2#2 = #C2 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#47#isSet ?{core::bool} #2#47{core::bool} : let final dynamic #t45 = #2#47#isSet = true in #2#47 = #C14 =={core::num::==}{(core::Object) → core::bool} #2#0) || invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:79:20: Error: Not a constant expression.
      case const ++variable: // Error
                   ^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || (#2#65#isSet ?{core::bool} #2#65{core::bool} : let final dynamic #t46 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65{core::bool} : let final dynamic #t47 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67{core::bool} : let final dynamic #t48 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67{core::bool} : let final dynamic #t49 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69{core::bool} : let final dynamic #t50 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69{core::bool} : let final dynamic #t51 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69{core::bool} : let final dynamic #t52 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69{core::bool} : let final dynamic #t53 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#71#isSet ?{core::bool} #2#71{core::bool} : let final dynamic #t54 = #2#71#isSet = true in #2#71 = #C20 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#73#isSet ?{core::bool} #2#73{core::bool} : let final dynamic #t55 = #2#73#isSet = true in #2#73 = #C21 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#75#isSet ?{core::bool} #2#75{core::bool} : let final dynamic #t56 = #2#75#isSet = true in #2#75 = #C22 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#77#isSet ?{core::bool} #2#77{core::bool} : let final dynamic #t57 = #2#77#isSet = true in #2#77 = #C23 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65{core::bool} : let final dynamic #t58 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65{core::bool} : let final dynamic #t59 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67{core::bool} : let final dynamic #t60 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67{core::bool} : let final dynamic #t61 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69{core::bool} : let final dynamic #t62 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69{core::bool} : let final dynamic #t63 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#71#isSet ?{core::bool} #2#71{core::bool} : let final dynamic #t64 = #2#71#isSet = true in #2#71 = #C20 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#73#isSet ?{core::bool} #2#73{core::bool} : let final dynamic #t65 = #2#73#isSet = true in #2#73 = #C21 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#75#isSet ?{core::bool} #2#75{core::bool} : let final dynamic #t66 = #2#75#isSet = true in #2#75 = #C22 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#77#isSet ?{core::bool} #2#77{core::bool} : let final dynamic #t67 = #2#77#isSet = true in #2#77 = #C23 =={core::Object::==}{(core::Object) → core::bool} #2#0) || invalid-expression "New expression is not a constant expression." =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "New expression is not a constant expression." =={core::Object::==}{(core::Object) → core::bool} #2#0 || (#2#83#isSet ?{core::bool} #2#83{core::bool} : let final dynamic #t68 = #2#83#isSet = true in #2#83 = #C24 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#83#isSet ?{core::bool} #2#83{core::bool} : let final dynamic #t69 = #2#83#isSet = true in #2#83 = #C24 =={core::Object::==}{(core::Object) → core::bool} #2#0) || #C25 =={core::num::==}{(core::Object) → core::bool} #2#0 || (#2#47#isSet ?{core::bool} #2#47{core::bool} : let final dynamic #t70 = #2#47#isSet = true in #2#47 = #C14 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#12#isSet ?{core::bool} #2#12{core::bool} : let final dynamic #t71 = #2#12#isSet = true in #2#12 = #C3 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#14#isSet ?{core::bool} #2#14{core::bool} : let final dynamic #t72 = #2#14#isSet = true in #2#14 = #C4 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#37#isSet ?{core::bool} #2#37{core::bool} : let final dynamic #t73 = #2#37#isSet = true in #2#37 = #C12 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87{core::bool} : let final dynamic #t74 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87{core::bool} : let final dynamic #t75 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89{core::bool} : let final dynamic #t76 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89{core::bool} : let final dynamic #t77 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87{core::bool} : let final dynamic #t78 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87{core::bool} : let final dynamic #t79 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87{core::bool} : let final dynamic #t80 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87{core::bool} : let final dynamic #t81 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89{core::bool} : let final dynamic #t82 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89{core::bool} : let final dynamic #t83 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0)) {
          {
            core::print(0);
          }
        }
      }
    }
  }
}
class GenericClass<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  const constructor •({dynamic a = #C1}) → self::GenericClass<self::GenericClass::T%>
    : super core::Object::•()
    ;
}
static const field core::int value = #C3;
static method func() → void {}

constants  {
  #C1 = null
  #C2 = true
  #C3 = 42
  #C4 = -42
  #C5 = 42.5
  #C6 = -42.5
  #C7 = "foo"
  #C8 = "foobar"
  #C9 = 0
  #C10 = static-tearoff self::func
  #C11 = constructor-tearoff self::Class::named
  #C12 = 3
  #C13 = 2
  #C14 = -1
  #C15 = 0.5
  #C16 = #a
  #C17 = self::Class {}
  #C18 = self::GenericClass<dynamic> {}
  #C19 = self::GenericClass<core::int> {}
  #C20 = <dynamic>[]
  #C21 = <core::int>[]
  #C22 = <dynamic, dynamic>{}
  #C23 = <core::int, core::String>{}
  #C24 = ()
  #C25 = 1
  #C26 = TypeLiteralConstant(self::GenericClass<core::int>)
  #C27 = constructor-tearoff self::GenericClass::•
  #C28 = instantiation #C27 <core::int>
}


Constructor coverage from constants:
org-dartlang-testcase:///const_patterns.dart:
- Class. (from org-dartlang-testcase:///const_patterns.dart:12:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- GenericClass. (from org-dartlang-testcase:///const_patterns.dart:127:9)
