library;
//
// Problems in library:
//
// pkg/front_end/testcases/extensions/operators.dart:125:3: Error: Explicit extension application cannot be used as an expression.
//   Operators(c) == c;
//   ^^^^^^^^^
//
// pkg/front_end/testcases/extensions/operators.dart:126:3: Error: Explicit extension application cannot be used as an expression.
//   Operators(c) != c;
//   ^^^^^^^^^
//
import self as self;
import "dart:core" as core;

class Complex extends core::Object /*hasConstConstructor*/  {
  final field core::double* real;
  final field core::double* imaginary;
  const constructor •(core::double* real, core::double* imaginary) → self::Complex*
    : self::Complex::real = real, self::Complex::imaginary = imaginary, super core::Object::•()
    ;
  method add(self::Complex* other) → self::Complex* {
    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::+}(other.{self::Complex::real}{core::double*}){(core::num*) →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::+}(other.{self::Complex::imaginary}{core::double*}){(core::num*) →* core::double*});
  }
  method sub(self::Complex* other) → self::Complex* {
    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::-}(other.{self::Complex::real}{core::double*}){(core::num*) →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::-}(other.{self::Complex::imaginary}{core::double*}){(core::num*) →* core::double*});
  }
  method negate() → self::Complex* {
    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::unary-}(){() →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::unary-}(){() →* core::double*});
  }
  get hashCode() → core::int*
    return this.{self::Complex::real}{core::double*}.{core::num::hashCode}{core::int*}.{core::num::*}(13){(core::num*) →* core::int*}.{core::num::+}(this.{self::Complex::imaginary}{core::double*}.{core::num::hashCode}{core::int*}.{core::num::*}(19){(core::num*) →* core::int*}){(core::num*) →* core::int*};
  operator ==(core::Object* other) → core::bool* {
    if(core::identical(this, other))
      return true;
    return other is self::Complex* && this.{self::Complex::real}{core::double*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Complex*}.{self::Complex::real}{core::double*} && this.{self::Complex::imaginary}{core::double*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Complex*}.{self::Complex::imaginary}{core::double*};
  }
  method toString() → core::String*
    return "Complex(${this.{self::Complex::real}{core::double*}},${this.{self::Complex::imaginary}{core::double*}})";
  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
extension Operators on self::Complex* {
  operator + = self::Operators|+;
  operator - = self::Operators|-;
  operator unary- = self::Operators|unary-;
}
static method Operators|+(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
  return #this.{self::Complex::add}(other){(self::Complex*) →* self::Complex*};
static method Operators|-(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
  return #this.{self::Complex::sub}(other){(self::Complex*) →* self::Complex*};
static method Operators|unary-(lowered final self::Complex* #this) → self::Complex*
  return #this.{self::Complex::negate}(){() →* self::Complex*};
static method main() → dynamic {
  self::implicit();
  self::explicit();
}
static method implicit() → dynamic {
  self::Complex* c_m2 = new self::Complex::•(-2.0, 2.0);
  self::Complex* c_m1 = new self::Complex::•(-1.0, 1.0);
  self::Complex* c0 = new self::Complex::•(0.0, 0.0);
  self::Complex* c1 = new self::Complex::•(1.0, -1.0);
  self::Complex* c2 = new self::Complex::•(2.0, -2.0);
  self::expect(c_m2, self::Operators|+(c0, c_m2));
  self::expect(c_m2, self::Operators|+(c_m2, c0));
  self::expect(c_m2, self::Operators|+(c_m1, c_m1));
  self::expect(c_m1, self::Operators|+(c0, c_m1));
  self::expect(c_m1, self::Operators|+(c_m1, c0));
  self::expect(c0, self::Operators|+(c_m2, c2));
  self::expect(c0, self::Operators|+(c2, c_m2));
  self::expect(c0, self::Operators|+(c_m1, c1));
  self::expect(c0, self::Operators|+(c1, c_m1));
  self::expect(c0, self::Operators|+(c0, c0));
  self::expect(c1, self::Operators|+(c0, c1));
  self::expect(c1, self::Operators|+(c1, c0));
  self::expect(c2, self::Operators|+(c0, c2));
  self::expect(c2, self::Operators|+(c2, c0));
  self::expect(c2, self::Operators|+(c1, c1));
  self::expect(c_m2, self::Operators|-(c0, c2));
  self::expect(c2, self::Operators|-(c2, c0));
  self::expect(c_m2, self::Operators|unary-(c2));
  self::expect(c_m1, self::Operators|-(c1, c2));
  self::expect(c1, self::Operators|-(c2, c1));
  self::expect(c_m1, self::Operators|-(c0, c1));
  self::expect(c1, self::Operators|-(c1, c0));
  self::expect(c_m1, self::Operators|unary-(c1));
  self::expect(c0, self::Operators|-(c2, c2));
  self::expect(c0, self::Operators|-(c1, c1));
  self::expect(c0, self::Operators|-(c0, c0));
  self::expect(c0, self::Operators|-(c_m1, c_m1));
  self::expect(c0, self::Operators|-(c_m2, c_m2));
  self::expect(c0, self::Operators|unary-(c0));
}
static method explicit() → dynamic {
  self::Complex* c_m2 = new self::Complex::•(-2.0, 2.0);
  self::Complex* c_m1 = new self::Complex::•(-1.0, 1.0);
  self::Complex* c0 = new self::Complex::•(0.0, 0.0);
  self::Complex* c1 = new self::Complex::•(1.0, -1.0);
  self::Complex* c2 = new self::Complex::•(2.0, -2.0);
  self::expect(c_m2, self::Operators|+(c0, c_m2));
  self::expect(c_m2, self::Operators|+(c_m2, c0));
  self::expect(c_m2, self::Operators|+(c_m1, c_m1));
  self::expect(c_m1, self::Operators|+(c0, c_m1));
  self::expect(c_m1, self::Operators|+(c_m1, c0));
  self::expect(c0, self::Operators|+(c_m2, c2));
  self::expect(c0, self::Operators|+(c2, c_m2));
  self::expect(c0, self::Operators|+(c_m1, c1));
  self::expect(c0, self::Operators|+(c1, c_m1));
  self::expect(c0, self::Operators|+(c0, c0));
  self::expect(c1, self::Operators|+(c0, c1));
  self::expect(c1, self::Operators|+(c1, c0));
  self::expect(c2, self::Operators|+(c0, c2));
  self::expect(c2, self::Operators|+(c2, c0));
  self::expect(c2, self::Operators|+(c1, c1));
  self::expect(c_m2, self::Operators|-(c0, c2));
  self::expect(c2, self::Operators|-(c2, c0));
  self::expect(c_m2, self::Operators|unary-(c2));
  self::expect(c_m1, self::Operators|-(c1, c2));
  self::expect(c1, self::Operators|-(c2, c1));
  self::expect(c_m1, self::Operators|-(c0, c1));
  self::expect(c1, self::Operators|-(c1, c0));
  self::expect(c_m1, self::Operators|unary-(c1));
  self::expect(c0, self::Operators|-(c2, c2));
  self::expect(c0, self::Operators|-(c1, c1));
  self::expect(c0, self::Operators|-(c0, c0));
  self::expect(c0, self::Operators|-(c_m1, c_m1));
  self::expect(c0, self::Operators|-(c_m2, c_m2));
  self::expect(c0, self::Operators|unary-(c0));
}
static method errors(self::Complex* c) → void {
  invalid-expression "pkg/front_end/testcases/extensions/operators.dart:125:3: Error: Explicit extension application cannot be used as an expression.
  Operators(c) == c;
  ^^^^^^^^^" =={core::Object::==}{(core::Object*) →* core::bool*} c;
  !(invalid-expression "pkg/front_end/testcases/extensions/operators.dart:126:3: Error: Explicit extension application cannot be used as an expression.
  Operators(c) != c;
  ^^^^^^^^^" =={core::Object::==}{(core::Object*) →* core::bool*} c);
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
    throw "Mismatch: expected=${expected}, actual=${actual}";
  }
}
