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 /* futureValueType= dynamic */ {
    dynamic variable = 0;
    #L1:
    {
      final synthesized dynamic #2#0 = o;
      late final synthesized core::bool #2#2 = #C2 =={core::Object::==}{(core::Object) → core::bool} #2#0;
      late final synthesized core::bool #2#4 = #2#0 == null;
      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
           ^^^^";
      late final synthesized core::bool #2#12 = #C3 =={core::num::==}{(core::Object) → core::bool} #2#0;
      late final synthesized core::bool #2#14 = #C4 =={core::num::==}{(core::Object) → core::bool} #2#0;
      late final synthesized core::bool #2#20 = #C5 =={core::String::==}{(core::Object) → core::bool} #2#0;
      late final synthesized core::bool #2#24 = #C3 =={core::num::==}{(core::Object) → core::bool} #2#0!;
      late final synthesized core::bool #2#27 = #C4 =={core::num::==}{(core::Object) → core::bool} #2#0!;
      late final synthesized core::bool #2#31 = #C6 =={core::Object::==}{(core::Object) → core::bool} #2#0;
      late final synthesized core::bool #2#35 = #C7 =={core::Object::==}{(core::Object) → core::bool} #2#0;
      late final synthesized core::bool #2#37 = #C8 =={core::num::==}{(core::Object) → core::bool} #2#0;
      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.";
      late final synthesized core::bool #2#47 = #C9 =={core::num::==}{(core::Object) → core::bool} #2#0;
      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
                   ^^^^^^^^";
      late final synthesized core::bool #2#65 = #C10 =={core::Object::==}{(core::Object) → core::bool} #2#0;
      late final synthesized core::bool #2#67 = #C11 =={core::Object::==}{(core::Object) → core::bool} #2#0;
      late final synthesized core::bool #2#69 = #C12 =={core::Object::==}{(core::Object) → core::bool} #2#0;
      late final synthesized core::bool #2#71 = #C13 =={core::List::==}{(core::Object) → core::bool} #2#0;
      late final synthesized core::bool #2#73 = #C14 =={core::List::==}{(core::Object) → core::bool} #2#0;
      late final synthesized core::bool #2#75 = #C15 =={core::Object::==}{(core::Object) → core::bool} #2#0;
      late final synthesized core::bool #2#77 = #C16 =={core::Object::==}{(core::Object) → core::bool} #2#0;
      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.";
      late final synthesized core::bool #2#83 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0;
      late final synthesized core::bool #2#87 = #C18 =={core::Type::==}{(core::Object) → core::bool} #2#0;
      late final synthesized core::bool #2#89 = #C20 =={core::Object::==}{(core::Object) → core::bool} #2#0;
      {
        hoisted void fun;
        if(#2#2 || #2#4 || 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 || #2#14 || #C21 =={core::num::==}{(core::Object) → core::bool} #2#0 || #C22 =={core::num::==}{(core::Object) → core::bool} #2#0 || #2#20 || #C23 =={core::String::==}{(core::Object) → core::bool} #2#0 || #2#12 || (let final dynamic #t1 = #2#0! in #2#24) || (!(#2#0 == null) ?{core::bool} #2#12 : false) || (let final dynamic #t2 = #2#0! in !(#2#0! == null) ?{core::bool} #2#24 : false) || (!(#2#0 == null) ?{core::bool} let final dynamic #t3 = #2#0! in #2#24 : false) || (let final dynamic #t4 = #2#0! in #2#27) || (!(#2#0 == null) ?{core::bool} #2#14 : false) || (!(#2#0 == null) ?{core::bool} let final dynamic #t5 = #2#0! in #2#27 : false) || (let final dynamic #t6 = #2#0! in !(#2#0! == null) ?{core::bool} #2#27 : false) || (let final dynamic #t7 = #2#0 as core::int in #C3 =={core::num::==}{(core::Object) → core::bool} #2#0 as core::int) || #2#14 || #2#31 || #2#31 || #C24 =={core::Object::==}{(core::Object) → core::bool} #2#0 || #2#12 || #2#14 || #2#35 || #2#37 || #C25 =={core::num::==}{(core::Object) → core::bool} #2#0 || #2#0{core::int} is void && (let final dynamic #t8 = 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 || #2#47 || 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 || #2#31 || #C26 =={core::num::==}{(core::Object) → core::bool} #2#0 || #2#2 || #2#4 || #2#31 || #2#20 || #C27 =={core::Symbol::==}{(core::Object) → core::bool} #2#0 || #2#12 || #2#31 || #2#12 || #2#14 || #2#35 || #2#37 || 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 || #2#47 || 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 || #2#65 || #2#67 || #2#67 || #2#69 || #2#69 || #2#69 || #2#69 || #2#71 || #2#73 || #2#75 || #2#77 || #2#65 || #2#65 || #2#67 || #2#67 || #2#69 || #2#69 || #2#71 || #2#73 || #2#75 || #2#77 || 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 || #2#83 || #C28 =={core::num::==}{(core::Object) → core::bool} #2#0 || #2#47 || #2#12 || #2#14 || #2#37 || #2#87 || #2#87 || #2#89 || #2#89 || #2#87 || #2#87 || #2#87 || #2#87 || #2#89 || #2#89) {
          {
            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 = "foo"
  #C6 = 0
  #C7 = constructor-tearoff self::Class::named
  #C8 = 3
  #C9 = -1
  #C10 = self::Class {}
  #C11 = self::GenericClass<dynamic> {}
  #C12 = self::GenericClass<core::int> {}
  #C13 = <dynamic>[]
  #C14 = <core::int>[]
  #C15 = <dynamic, dynamic>{}
  #C16 = <core::int, core::String>{}
  #C17 = ()
  #C18 = TypeLiteralConstant(self::GenericClass<core::int>)
  #C19 = constructor-tearoff self::GenericClass::•
  #C20 = instantiation #C19 <core::int>
  #C21 = 42.5
  #C22 = -42.5
  #C23 = "foobar"
  #C24 = static-tearoff self::func
  #C25 = 2
  #C26 = 0.5
  #C27 = #a
  #C28 = 1
}


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)
