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 */
//                                ^
//
// pkg/front_end/testcases/class_modifiers/ffi_exception.dart:26:7: Error: The superclass, 'Finalizable', has no unnamed constructor that takes no arguments.
// 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
    : super self::_WithFinal&Object&Double::•()
    ;
}
class ImplementsFinal extends core::Object implements ffi::Double {
  synthetic constructor •() → self::ImplementsFinal
    : super core::Object::•()
    ;
}
class ExtendsFinal extends ffi::Double {
  synthetic constructor •() → self::ExtendsFinal
    : super ffi::Double::•()
    ;
}
class ExtendsBase extends ffi::Opaque {
  synthetic constructor •() → self::ExtendsBase
    : super ffi::Opaque::•()
    ;
}
class ImplementsBase extends core::Object implements ffi::Opaque {
  synthetic constructor •() → self::ImplementsBase
    : super core::Object::•()
    ;
}
class ExtendsInterface extends ffi::Finalizable {
  synthetic constructor •() → self::ExtendsInterface
    : invalid-initializer
    ;
}
abstract final class _WithFinal&Object&Double = core::Object with ffi::Double /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithFinal&Object&Double
    : super core::Object::•()
    ;
}
