library /*isNonNullableByDefault*/;
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
    ;
  method sub(self::Complex other) → self::Complex
    ;
  method negate() → self::Complex
    ;
  get hashCode() → core::int
    ;
  operator ==(core::Object other) → core::bool
    ;
  method toString() → core::String
    ;
}
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
  ;
static method Operators|-(lowered final self::Complex #this, self::Complex other) → self::Complex
  ;
static method Operators|unary-(lowered final self::Complex #this) → self::Complex
  ;
static method main() → dynamic
  ;
static method implicit() → dynamic
  ;
static method explicit() → dynamic
  ;
static method errors(self::Complex c) → void
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
