library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/ignore_function.dart:18:7: Error: Can't use 'Function' as a name here.
// class Function {
//       ^^^^^^^^
//
import self as self;
import "dart:core" as core;

import "dart:core" as core;

class A extends core::Object {
  synthetic constructor •() → self::A
    ;
  operator ==(core::Object other) → core::bool
    ;
}
class B extends core::Object implements self::Function {
  synthetic constructor •() → self::B
    ;
  operator ==(core::Object other) → core::bool
    ;
}
class Function extends core::Object {
  synthetic constructor •() → self::Function
    ;
  operator ==(core::Object other) → core::bool
    ;
}
static method main() → dynamic
  ;
