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 {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method foo() → dynamic
    return 40;
  method f() → dynamic
    return 3;
}
abstract class _C&Super&Mixin<V extends core::Object> = self::Super<self::_C&Super&Mixin::V> with mix::Mixin<self::_C&Super&Mixin::V> {
}
class C<V extends core::Object> extends self::_C&Super&Mixin<self::C::V> {
  synthetic constructor •() → void
    : super self::Super::•()
    ;
}
abstract class _D&Super&Mixin = self::Super<dynamic> with mix::Mixin<dynamic> {
}
class D extends self::_D&Super&Mixin {
  synthetic constructor •() → void
    : super self::Super::•()
    ;
}
class C2<V extends core::Object> = self::Super<self::C2::V> with mix::Mixin<self::C2::V> {
  synthetic constructor •() → void
    : super self::Super::•()
    ;
}
class D2 = self::Super<dynamic> with mix::Mixin<dynamic> {
  synthetic constructor •() → void
    : super self::Super::•()
    ;
}
static method main() → dynamic {
  core::print(new self::C::•<dynamic>().foo());
  core::print(new self::C2::•<dynamic>().foo());
}
