library;
//
// Problems in library:
//
// pkg/front_end/testcases/class_modifiers/ffi_exception.dart:11:7: Error: Can't use 'Double' as a mixin because it has constructors.
// class WithFinal with Double {} /* Error */
//       ^
// sdk/lib/ffi/native_type.dart:*: Context: This constructor prevents using 'Double' as a mixin.
//   const Double();
//         ^
//
// pkg/front_end/testcases/class_modifiers/ffi_exception.dart:11:22: Error: The class 'Double' can't be used as a mixin because it isn't a mixin class nor a mixin.
// class WithFinal with Double {} /* Error */
//                      ^
//
// pkg/front_end/testcases/class_modifiers/ffi_exception.dart:13:34: Error: The class 'Double' can't be implemented outside of its library because it's a final class.
// class ImplementsFinal implements Double {} /* Error */
//                                  ^
//
// pkg/front_end/testcases/class_modifiers/ffi_exception.dart:15:28: Error: The class 'Double' can't be extended outside of its library because it's a final class.
// class ExtendsFinal extends Double {} /* Error */
//                            ^
//
// pkg/front_end/testcases/class_modifiers/ffi_exception.dart:22:33: Error: The class 'Opaque' can't be implemented outside of its library because it's a base class.
// class ImplementsBase implements Opaque {} /* Error */
//                                 ^
//
// pkg/front_end/testcases/class_modifiers/ffi_exception.dart:26:32: Error: The class 'Finalizable' can't be extended outside of its library because it's an interface class.
// class ExtendsInterface extends Finalizable {} /* Error */
//                                ^
//
import self as self;
import "dart:core" as core;
import "dart:ffi" as ffi;

import "dart:ffi";

class WithFinal extends self::_WithFinal&Object&Double {
  synthetic constructor •() → self::WithFinal
    ;
}
class ImplementsFinal extends core::Object implements ffi::Double {
  synthetic constructor •() → self::ImplementsFinal
    ;
}
class ExtendsFinal extends ffi::Double {
  synthetic constructor •() → self::ExtendsFinal
    ;
}
class ExtendsBase extends ffi::Opaque {
  synthetic constructor •() → self::ExtendsBase
    ;
}
class ImplementsBase extends core::Object implements ffi::Opaque {
  synthetic constructor •() → self::ImplementsBase
    ;
}
class ExtendsInterface extends ffi::Finalizable {
  synthetic constructor •() → self::ExtendsInterface
    ;
}
abstract final class _WithFinal&Object&Double = core::Object with ffi::Double /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithFinal&Object&Double
    : super core::Object::•()
    ;
}
