library;
//
// Problems in library:
//
// pkg/front_end/testcases/extensions/ambiguous.dart:28:5: Error: The method 'method' is defined in multiple extensions for 'C' and neither is more specific.
//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
//   c.method();
//     ^^^^^^
// pkg/front_end/testcases/extensions/ambiguous.dart:6:8: Context: This is one of the extension members.
//   void method() {}
//        ^^^^^^
// pkg/front_end/testcases/extensions/ambiguous.dart:16:8: Context: This is one of the extension members.
//   void method() {}
//        ^^^^^^
//
// pkg/front_end/testcases/extensions/ambiguous.dart:29:5: Error: The property 'method' is defined in multiple extensions for 'C' and neither is more specific.
//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
//   c.method;
//     ^^^^^^
// pkg/front_end/testcases/extensions/ambiguous.dart:6:8: Context: This is one of the extension members.
//   void method() {}
//        ^^^^^^
// pkg/front_end/testcases/extensions/ambiguous.dart:16:8: Context: This is one of the extension members.
//   void method() {}
//        ^^^^^^
//
// pkg/front_end/testcases/extensions/ambiguous.dart:30:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
//   c.getter;
//     ^^^^^^
// pkg/front_end/testcases/extensions/ambiguous.dart:7:11: Context: This is one of the extension members.
//   int get getter => 42;
//           ^^^^^^
// pkg/front_end/testcases/extensions/ambiguous.dart:17:11: Context: This is one of the extension members.
//   int get getter => 42;
//           ^^^^^^
//
// pkg/front_end/testcases/extensions/ambiguous.dart:31:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
//   c.setter;
//     ^^^^^^
// pkg/front_end/testcases/extensions/ambiguous.dart:8:12: Context: This is one of the extension members.
//   void set setter(int value) {}
//            ^^^^^^
// pkg/front_end/testcases/extensions/ambiguous.dart:18:12: Context: This is one of the extension members.
//   void set setter(int value) {}
//            ^^^^^^
//
// pkg/front_end/testcases/extensions/ambiguous.dart:32:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
//   c.getter = 42;
//     ^^^^^^
// pkg/front_end/testcases/extensions/ambiguous.dart:7:11: Context: This is one of the extension members.
//   int get getter => 42;
//           ^^^^^^
// pkg/front_end/testcases/extensions/ambiguous.dart:17:11: Context: This is one of the extension members.
//   int get getter => 42;
//           ^^^^^^
//
// pkg/front_end/testcases/extensions/ambiguous.dart:33:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
//   c.setter = 42;
//     ^^^^^^
// pkg/front_end/testcases/extensions/ambiguous.dart:8:12: Context: This is one of the extension members.
//   void set setter(int value) {}
//            ^^^^^^
// pkg/front_end/testcases/extensions/ambiguous.dart:18:12: Context: This is one of the extension members.
//   void set setter(int value) {}
//            ^^^^^^
//
// pkg/front_end/testcases/extensions/ambiguous.dart:34:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
//   c.property;
//     ^^^^^^^^
// pkg/front_end/testcases/extensions/ambiguous.dart:9:11: Context: This is one of the extension members.
//   int get property => 42;
//           ^^^^^^^^
// pkg/front_end/testcases/extensions/ambiguous.dart:19:12: Context: This is one of the extension members.
//   void set property(int value) {}
//            ^^^^^^^^
//
// pkg/front_end/testcases/extensions/ambiguous.dart:35:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
//   c.property = 42;
//     ^^^^^^^^
// pkg/front_end/testcases/extensions/ambiguous.dart:9:11: Context: This is one of the extension members.
//   int get property => 42;
//           ^^^^^^^^
// pkg/front_end/testcases/extensions/ambiguous.dart:19:12: Context: This is one of the extension members.
//   void set property(int value) {}
//            ^^^^^^^^
//
// pkg/front_end/testcases/extensions/ambiguous.dart:36:5: Error: The operator '+' is defined in multiple extensions for 'C' and neither is more specific.
//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
//   c + 0;
//     ^
// pkg/front_end/testcases/extensions/ambiguous.dart:10:16: Context: This is one of the extension members.
//   int operator +(int i) => i;
//                ^
// pkg/front_end/testcases/extensions/ambiguous.dart:20:16: Context: This is one of the extension members.
//   int operator +(int i) => i;
//                ^
//
// pkg/front_end/testcases/extensions/ambiguous.dart:37:3: Error: The operator 'unary-' is defined in multiple extensions for 'C' and neither is more specific.
//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
//   -c;
//   ^
// pkg/front_end/testcases/extensions/ambiguous.dart:11:16: Context: This is one of the extension members.
//   int operator -() => 0;
//                ^
// pkg/front_end/testcases/extensions/ambiguous.dart:21:16: Context: This is one of the extension members.
//   int operator -() => 0;
//                ^
//
// pkg/front_end/testcases/extensions/ambiguous.dart:38:4: Error: The operator '[]' is defined in multiple extensions for 'C' and neither is more specific.
//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
//   c[42];
//    ^
// pkg/front_end/testcases/extensions/ambiguous.dart:12:16: Context: This is one of the extension members.
//   int operator [](int i) => i;
//                ^^
// pkg/front_end/testcases/extensions/ambiguous.dart:22:17: Context: This is one of the extension members.
//   void operator []=(int i, int j) {}
//                 ^^^
//
// pkg/front_end/testcases/extensions/ambiguous.dart:39:4: Error: The operator '[]=' is defined in multiple extensions for 'C' and neither is more specific.
//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
//   c[42] = 0;
//    ^
// pkg/front_end/testcases/extensions/ambiguous.dart:12:16: Context: This is one of the extension members.
//   int operator [](int i) => i;
//                ^^
// pkg/front_end/testcases/extensions/ambiguous.dart:22:17: Context: This is one of the extension members.
//   void operator []=(int i, int j) {}
//                 ^^^
//
import self as self;
import "dart:core" as core;

class C extends core::Object {
  synthetic constructor •() → self::C*
    : super core::Object::•()
    ;
  abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
  abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
  abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → core::int*; -> core::Object::hashCode
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → core::String*; -> core::Object::toString
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
  abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
}
extension A on self::C* {
  method method = self::A|method;
  tearoff method = self::A|get#method;
  get getter = self::A|get#getter;
  get property = self::A|get#property;
  operator + = self::A|+;
  operator unary- = self::A|unary-;
  operator [] = self::A|[];
  set setter = self::A|set#setter;
}
extension B on self::C* {
  method method = self::B|method;
  tearoff method = self::B|get#method;
  get getter = self::B|get#getter;
  operator + = self::B|+;
  operator unary- = self::B|unary-;
  operator []= = self::B|[]=;
  set setter = self::B|set#setter;
  set property = self::B|set#property;
}
static method A|method(final self::C* #this) → void {}
static method A|get#method(final self::C* #this) → () →* void
  return () → void => self::A|method(#this);
static method A|get#getter(final self::C* #this) → core::int*
  return 42;
static method A|set#setter(final self::C* #this, core::int* value) → void {}
static method A|get#property(final self::C* #this) → core::int*
  return 42;
static method A|+(final self::C* #this, core::int* i) → core::int*
  return i;
static method A|unary-(final self::C* #this) → core::int*
  return 0;
static method A|[](final self::C* #this, core::int* i) → core::int*
  return i;
static method B|method(final self::C* #this) → void {}
static method B|get#method(final self::C* #this) → () →* void
  return () → void => self::B|method(#this);
static method B|get#getter(final self::C* #this) → core::int*
  return 42;
static method B|set#setter(final self::C* #this, core::int* value) → void {}
static method B|set#property(final self::C* #this, core::int* value) → void {}
static method B|+(final self::C* #this, core::int* i) → core::int*
  return i;
static method B|unary-(final self::C* #this) → core::int*
  return 0;
static method B|[]=(final self::C* #this, core::int* i, core::int* j) → void {}
static method errors(self::C* c) → dynamic {
  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:28:5: Error: The method 'method' is defined in multiple extensions for 'C' and neither is more specific.
 - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
  c.method();
    ^^^^^^";
  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:29:5: Error: The property 'method' is defined in multiple extensions for 'C' and neither is more specific.
 - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
  c.method;
    ^^^^^^";
  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:30:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
 - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
  c.getter;
    ^^^^^^";
  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:31:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
 - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
  c.setter;
    ^^^^^^";
  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:32:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
 - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
  c.getter = 42;
    ^^^^^^";
  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:33:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
 - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
  c.setter = 42;
    ^^^^^^";
  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:34:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
 - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
  c.property;
    ^^^^^^^^";
  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:35:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
 - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
  c.property = 42;
    ^^^^^^^^";
  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:36:5: Error: The operator '+' is defined in multiple extensions for 'C' and neither is more specific.
 - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
  c + 0;
    ^";
  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:37:3: Error: The operator 'unary-' is defined in multiple extensions for 'C' and neither is more specific.
 - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
  -c;
  ^";
  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:38:4: Error: The operator '[]' is defined in multiple extensions for 'C' and neither is more specific.
 - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
  c[42];
   ^";
  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:39:4: Error: The operator '[]=' is defined in multiple extensions for 'C' and neither is more specific.
 - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
  c[42] = 0;
   ^";
}
static method main() → dynamic {}
