library;
import self as self;
import "dart:core" as core;
import "./mixin_library.dart" as mix;

class Super<S extends core::Object> extends core::Object {
  default constructor •() → void
    : super core::Object::•()
    ;
  method foo() → dynamic
    return 40;
  method f() → dynamic
    return 3;
}
abstract class _Super&Mixin^#T0^#T0<#T0 extends core::Object> = self::Super<self::_Super&Mixin^#T0^#T0::#T0> with mix::Mixin<self::_Super&Mixin^#T0^#T0::#T0> {
}
class C<V extends core::Object> extends self::_Super&Mixin^#T0^#T0<self::C::V> {
  default constructor •() → void
    : super self::Super::•()
    ;
}
abstract class _Super&Mixin = self::Super<dynamic> with mix::Mixin<dynamic> {
  abstract forwarding-stub method g(generic-covariant-impl dynamic a) → dynamic;
  abstract forwarding-stub set t(generic-covariant-impl dynamic _) → void;
}
class D extends self::_Super&Mixin {
  default constructor •() → void
    : super self::Super::•()
    ;
  abstract forwarding-stub set t(generic-covariant-impl dynamic _) → void;
}
class C2<V extends core::Object> = self::Super<self::C2::V> with mix::Mixin<self::C2::V> {
  constructor •() → void
    : super self::Super::•()
    ;
}
class D2 = self::Super<dynamic> with mix::Mixin<dynamic> {
  constructor •() → void
    : super self::Super::•()
    ;
  abstract forwarding-stub method g(generic-covariant-impl dynamic a) → dynamic;
  abstract forwarding-stub set t(generic-covariant-impl dynamic _) → void;
}
static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.\n  foo() => super.foo() + f();\n                 ^"]/* from null */;
static method main() → dynamic {
  core::print(new self::C::•<dynamic>().{mix::Mixin::foo}());
  core::print(new self::C2::•<dynamic>().{mix::Mixin::foo}());
}
