library;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/parser_recovery_in_pattern_arguments.dart:13:16: Error: Expected an identifier, but got ':'.
// Try inserting an identifier before ':'.
//   var {const C(:var t): a1} = foo();
//                ^
//
// pkg/front_end/testcases/patterns/parser_recovery_in_pattern_arguments.dart:13:17: Error: Expected an identifier, but got 'var'.
// Try inserting an identifier before 'var'.
//   var {const C(:var t): a1} = foo();
//                 ^^^
//
// pkg/front_end/testcases/patterns/parser_recovery_in_pattern_arguments.dart:13:17: Error: Expected ')' before this.
//   var {const C(:var t): a1} = foo();
//                 ^^^
//
import self as self;
import "dart:core" as core;

class C<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field self::C::T% t;
  const constructor •(self::C::T% t) → self::C<self::C::T%>
    : self::C::t = t, super core::Object::•()
    ;
}
static method foo() → core::Map<self::C<core::String>, core::int>
  return throw 0;
static method test() → dynamic {
  hoisted has-declared-initializer core::int a1;
  {
    final synthesized core::Map<self::C<core::String>, core::int> #0#0 = self::foo();
    synthesized core::int? #0#3;
    synthesized core::bool #0#3#isSet = false;
    final const synthesized invalid-type #0#1 = invalid-expression "pkg/front_end/testcases/patterns/parser_recovery_in_pattern_arguments.dart:13:14: Error: This couldn't be parsed.
  var {const C(:var t): a1} = foo();
             ^";
    if(!((!((#0#3#isSet ?{core::int?} #0#3{core::int?} : let final core::bool* #t1 = #0#3#isSet = true in #0#3 = #0#0.{core::Map::[]}(invalid-expression "pkg/front_end/testcases/patterns/parser_recovery_in_pattern_arguments.dart:13:14: Error: This couldn't be parsed.
  var {const C(:var t): a1} = foo();
             ^"){(core::Object?) → core::int?}) == null) || null is core::int && #0#0.{core::Map::containsKey}(invalid-expression "pkg/front_end/testcases/patterns/parser_recovery_in_pattern_arguments.dart:13:14: Error: This couldn't be parsed.
  var {const C(:var t): a1} = foo();
             ^"){(core::Object?) → core::bool}) && (let final core::int #t2 = a1 = let core::int? #t3 = #0#3#isSet ?{core::int?} #0#3{core::int?} : let final core::bool* #t4 = #0#3#isSet = true in #0#3 = #0#0.{core::Map::[]}(invalid-expression "pkg/front_end/testcases/patterns/parser_recovery_in_pattern_arguments.dart:13:14: Error: This couldn't be parsed.
  var {const C(:var t): a1} = foo();
             ^"){(core::Object?) → core::int?} in #t3 == null ?{core::int} #t3 as{Unchecked} core::int : #t3{core::int} in true)))
      throw{for-error-handling} new core::StateError::•("Pattern matching error");
  }
}


Extra constant evaluation status:
Evaluated: LogicalExpression @ org-dartlang-testcase:///parser_recovery_in_pattern_arguments.dart:13:23 -> BoolConstant(false)
Extra constant evaluation: evaluated: 36, effectively constant: 1
