library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:6:37: Error: Binary operator 'xor' is written as '^' instead of the written out word.
// Try replacing 'xor' with '^'.
//   int get a => runtimeType.hashCode xor null.hashCode;
//                                     ^^^
//
// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:11:41: Error: Binary operator 'xor' is written as '^' instead of the written out word.
// Try replacing 'xor' with '^'.
//   int get e => 1 + runtimeType.hashCode xor null.hashCode + 3;
//                                         ^^^
//
// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:16:28: Error: Binary operator 'xor' is written as '^' instead of the written out word.
// Try replacing 'xor' with '^'.
//   int i(int x, int y) => x xor y;
//                            ^^^
//
// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:23:32: Error: Binary operator 'xor' is written as '^' instead of the written out word.
// Try replacing 'xor' with '^'.
//   int o(int x, int y) => 1 + x xor y + 3;
//                                ^^^
//
// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:36:31: Error: Binary operator 'xor' is written as '^' instead of the written out word.
// Try replacing 'xor' with '^'.
//   Key(int x, int y) : foo = x xor y, bar = x xor y {
//                               ^^^
//
// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:36:46: Error: Binary operator 'xor' is written as '^' instead of the written out word.
// Try replacing 'xor' with '^'.
//   Key(int x, int y) : foo = x xor y, bar = x xor y {
//                                              ^^^
//
// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:8:43: Error: Binary operator 'xor' is written as '^' instead of the written out word.
// Try replacing 'xor' with '^'.
//   int get c { return runtimeType.hashCode xor null.hashCode; }
//                                           ^^^
//
// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:13:47: Error: Binary operator 'xor' is written as '^' instead of the written out word.
// Try replacing 'xor' with '^'.
//   int get g { return 1 + runtimeType.hashCode xor null.hashCode + 3; }
//                                               ^^^
//
// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:18:34: Error: Binary operator 'xor' is written as '^' instead of the written out word.
// Try replacing 'xor' with '^'.
//   int k(int x, int y) { return x xor y; }
//                                  ^^^
//
// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:20:36: Error: Binary operator 'xor' is written as '^' instead of the written out word.
// Try replacing 'xor' with '^'.
//   int m(int x, int y) { int z =  x xor y; return z; }
//                                    ^^^
//
// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:25:38: Error: Binary operator 'xor' is written as '^' instead of the written out word.
// Try replacing 'xor' with '^'.
//   int q(int x, int y) { return 1 + x xor y + 3; }
//                                      ^^^
//
// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:29:9: Error: Binary operator 'xor' is written as '^' instead of the written out word.
// Try replacing 'xor' with '^'.
//     s(x xor y, x xor y);
//         ^^^
//
// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:29:18: Error: Binary operator 'xor' is written as '^' instead of the written out word.
// Try replacing 'xor' with '^'.
//     s(x xor y, x xor y);
//                  ^^^
//
// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:37:22: Error: Binary operator 'xor' is written as '^' instead of the written out word.
// Try replacing 'xor' with '^'.
//     print("hello ${x xor y}");
//                      ^^^
//
import self as self;
import "dart:core" as core;

abstract class Key extends core::Object {
  field core::int* foo;
  field core::int* bar;
  constructor •(core::int* x, core::int* y) → self::Key*
    : self::Key::foo = x.{core::int::^}(y), self::Key::bar = x.{core::int::^}(y), super core::Object::•() {
    core::print("hello ${x.{core::int::^}(y)}");
  }
  constructor NotDuplicate(core::int* x, core::int* y) → self::Key*
    : self::Key::foo = x.{core::int::^}(y), self::Key::bar = x.{core::int::^}(y), super core::Object::•() {
    core::print("hello ${x.{core::int::^}(y)}");
  }
  get a() → core::int*
    return this.{self::Key::runtimeType}.{core::Object::hashCode}.{core::int::^}(null.{core::Null::hashCode});
  get b() → core::int*
    return this.{self::Key::runtimeType}.{core::Object::hashCode}.{core::int::^}(null.{core::Null::hashCode});
  get c() → core::int* {
    return this.{self::Key::runtimeType}.{core::Object::hashCode}.{core::int::^}(null.{core::Null::hashCode});
  }
  get d() → core::int* {
    return this.{self::Key::runtimeType}.{core::Object::hashCode}.{core::int::^}(null.{core::Null::hashCode});
  }
  get e() → core::int*
    return 1.{core::num::+}(this.{self::Key::runtimeType}.{core::Object::hashCode}).{core::int::^}(null.{core::Null::hashCode}.{core::num::+}(3));
  get f() → core::int*
    return 1.{core::num::+}(this.{self::Key::runtimeType}.{core::Object::hashCode}).{core::int::^}(null.{core::Null::hashCode}.{core::num::+}(3));
  get g() → core::int* {
    return 1.{core::num::+}(this.{self::Key::runtimeType}.{core::Object::hashCode}).{core::int::^}(null.{core::Null::hashCode}.{core::num::+}(3));
  }
  get h() → core::int* {
    return 1.{core::num::+}(this.{self::Key::runtimeType}.{core::Object::hashCode}).{core::int::^}(null.{core::Null::hashCode}.{core::num::+}(3));
  }
  method i(core::int* x, core::int* y) → core::int*
    return x.{core::int::^}(y);
  method j(core::int* x, core::int* y) → core::int*
    return x.{core::int::^}(y);
  method k(core::int* x, core::int* y) → core::int* {
    return x.{core::int::^}(y);
  }
  method l(core::int* x, core::int* y) → core::int* {
    return x.{core::int::^}(y);
  }
  method m(core::int* x, core::int* y) → core::int* {
    core::int* z = x.{core::int::^}(y);
    return z;
  }
  method n(core::int* x, core::int* y) → core::int* {
    core::int* z = x.{core::int::^}(y);
    return z;
  }
  method o(core::int* x, core::int* y) → core::int*
    return 1.{core::num::+}(x).{core::int::^}(y.{core::num::+}(3));
  method p(core::int* x, core::int* y) → core::int*
    return 1.{core::num::+}(x).{core::int::^}(y.{core::num::+}(3));
  method q(core::int* x, core::int* y) → core::int* {
    return 1.{core::num::+}(x).{core::int::^}(y.{core::num::+}(3));
  }
  method r(core::int* x, core::int* y) → core::int* {
    return 1.{core::num::+}(x).{core::int::^}(y.{core::num::+}(3));
  }
  method s(core::int* x, core::int* y) → dynamic {
    this.{self::Key::s}(x.{core::int::^}(y), x.{core::int::^}(y));
    this.{self::Key::s}(x.{core::int::^}(y), x.{core::int::^}(y));
  }
  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
}
static method main() → dynamic {}
