//
// Problems in component:
//
// pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart:9:15: Error: The type 'T' is not a constant because it depends on a type parameter, only instantiated types are allowed.
//   C({a: 0, b: T}) : trace = "a: $a, b: $b";
//               ^
// pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart:9:12: Context: While analyzing:
//   C({a: 0, b: T}) : trace = "a: $a, b: $b";
//            ^
//
library;
import self as self;
import "dart:core" as core;
import "package:expect/expect.dart" as exp;

import "package:expect/expect.dart";

class C<T extends core::Object* = dynamic> extends core::Object {
  field core::String* trace;
  constructor •({dynamic a = #C1, dynamic b = invalid-expression "The type 'T' is not a constant because it depends on a type parameter, only instantiated types are allowed."}) → self::C<self::C::T*>*
    : self::C::trace = "a: ${a}, b: ${b}", super core::Object::•()
    ;
}
class M extends core::Object {
  synthetic constructor •() → self::M*
    : super core::Object::•()
    ;
}
class D = self::C<core::String*> with self::M {
  synthetic constructor •({dynamic a = #C1, dynamic b = #C2}) → self::D*
    : super self::C::•(a: a, b: b)
    ;
}
class E extends self::D {
  synthetic constructor •() → self::E*
    : super self::D::•()
    ;
}
abstract class _F&C&M = self::C<core::int*> with self::M {
  synthetic constructor •({dynamic a = #C1, dynamic b = #C3}) → self::_F&C&M*
    : super self::C::•(a: a, b: b)
    ;
}
class F extends self::_F&C&M {
  synthetic constructor •() → self::F*
    : super self::_F&C&M::•()
    ;
}
static method main() → dynamic {
  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<core::Object*>().trace);
  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<dynamic>().trace);
  exp::Expect::stringEquals("a: 0, b: String", new self::D::•().trace);
  exp::Expect::stringEquals("a: 0, b: String", new self::E::•().trace);
  exp::Expect::stringEquals("a: 0, b: int", new self::F::•().trace);
}

constants  {
  #C1 = 0
  #C2 = TypeLiteralConstant(dart.core::String*)
  #C3 = TypeLiteralConstant(dart.core::int*)
}
