library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/mix_in_num.dart:7:7: Error: 'num' is restricted and can't be extended or implemented.
// class C = A with num;
//       ^
//
// pkg/front_end/testcases/general/mix_in_num.dart:7:7: Error: The non-abstract class 'C' is missing implementations for these members:
//  - num.%
//  - num.*
//  - num.+
//  - num.-
//  - num./
//  - num.<
//  - num.<=
//  - num.>
//  - num.>=
//  - num.abs
//  - num.ceil
//  - num.ceilToDouble
//  - num.clamp
//  - num.compareTo
//  - num.floor
//  - num.floorToDouble
//  - num.isFinite
//  - num.isInfinite
//  - num.isNaN
//  - num.isNegative
//  - num.remainder
//  - num.round
//  - num.roundToDouble
//  - num.sign
//  - num.toDouble
//  - num.toInt
//  - num.toStringAsExponential
//  - num.toStringAsFixed
//  - num.toStringAsPrecision
//  - num.truncate
//  - num.truncateToDouble
//  - num.unary-
//  - num.~/
// Try to either
//  - provide an implementation,
//  - inherit an implementation from a superclass or mixin,
//  - mark the class as abstract, or
//  - provide a 'noSuchMethod' implementation.
//
// class C = A with num;
//       ^
// sdk/lib/core/num.dart:131:16: Context: 'num.%' is defined here.
//   num operator %(num other);
//                ^
// sdk/lib/core/num.dart:114:16: Context: 'num.*' is defined here.
//   num operator *(num other);
//                ^
// sdk/lib/core/num.dart:108:16: Context: 'num.+' is defined here.
//   num operator +(num other);
//                ^
// sdk/lib/core/num.dart:111:16: Context: 'num.-' is defined here.
//   num operator -(num other);
//                ^
// sdk/lib/core/num.dart:134:19: Context: 'num./' is defined here.
//   double operator /(num other);
//                   ^
// sdk/lib/core/num.dart:160:17: Context: 'num.<' is defined here.
//   bool operator <(num other);
//                 ^
// sdk/lib/core/num.dart:163:17: Context: 'num.<=' is defined here.
//   bool operator <=(num other);
//                 ^^
// sdk/lib/core/num.dart:166:17: Context: 'num.>' is defined here.
//   bool operator >(num other);
//                 ^
// sdk/lib/core/num.dart:169:17: Context: 'num.>=' is defined here.
//   bool operator >=(num other);
//                 ^^
// sdk/lib/core/num.dart:196:7: Context: 'num.abs' is defined here.
//   num abs();
//       ^^^
// sdk/lib/core/num.dart:241:7: Context: 'num.ceil' is defined here.
//   int ceil();
//       ^^^^
// sdk/lib/core/num.dart:299:10: Context: 'num.ceilToDouble' is defined here.
//   double ceilToDouble();
//          ^^^^^^^^^^^^
// sdk/lib/core/num.dart:328:7: Context: 'num.clamp' is defined here.
//   num clamp(num lowerLimit, num upperLimit);
//       ^^^^^
// sdk/lib/core/num.dart:105:7: Context: 'num.compareTo' is defined here.
//   int compareTo(num other);
//       ^^^^^^^^^
// sdk/lib/core/num.dart:234:7: Context: 'num.floor' is defined here.
//   int floor();
//       ^^^^^
// sdk/lib/core/num.dart:284:10: Context: 'num.floorToDouble' is defined here.
//   double floorToDouble();
//          ^^^^^^^^^^^^^
// sdk/lib/core/num.dart:193:12: Context: 'num.isFinite' is defined here.
//   bool get isFinite;
//            ^^^^^^^^
// sdk/lib/core/num.dart:185:12: Context: 'num.isInfinite' is defined here.
//   bool get isInfinite;
//            ^^^^^^^^^^
// sdk/lib/core/num.dart:172:12: Context: 'num.isNaN' is defined here.
//   bool get isNaN;
//            ^^^^^
// sdk/lib/core/num.dart:179:12: Context: 'num.isNegative' is defined here.
//   bool get isNegative;
//            ^^^^^^^^^^
// sdk/lib/core/num.dart:157:7: Context: 'num.remainder' is defined here.
//   num remainder(num other);
//       ^^^^^^^^^
// sdk/lib/core/num.dart:227:7: Context: 'num.round' is defined here.
//   int round();
//       ^^^^^
// sdk/lib/core/num.dart:269:10: Context: 'num.roundToDouble' is defined here.
//   double roundToDouble();
//          ^^^^^^^^^^^^^
// sdk/lib/core/num.dart:217:11: Context: 'num.sign' is defined here.
//   num get sign;
//           ^^^^
// sdk/lib/core/num.dart:340:10: Context: 'num.toDouble' is defined here.
//   double toDouble();
//          ^^^^^^^^
// sdk/lib/core/num.dart:331:7: Context: 'num.toInt' is defined here.
//   int toInt();
//       ^^^^^
// sdk/lib/core/num.dart:388:10: Context: 'num.toStringAsExponential' is defined here.
//   String toStringAsExponential([int? fractionDigits]);
//          ^^^^^^^^^^^^^^^^^^^^^
// sdk/lib/core/num.dart:366:10: Context: 'num.toStringAsFixed' is defined here.
//   String toStringAsFixed(int fractionDigits);
//          ^^^^^^^^^^^^^^^
// sdk/lib/core/num.dart:408:10: Context: 'num.toStringAsPrecision' is defined here.
//   String toStringAsPrecision(int precision);
//          ^^^^^^^^^^^^^^^^^^^
// sdk/lib/core/num.dart:249:7: Context: 'num.truncate' is defined here.
//   int truncate();
//       ^^^^^^^^
// sdk/lib/core/num.dart:316:10: Context: 'num.truncateToDouble' is defined here.
//   double truncateToDouble();
//          ^^^^^^^^^^^^^^^^
// sdk/lib/core/num.dart:148:16: Context: 'num.unary-' is defined here.
//   num operator -();
//                ^^^^^...
// sdk/lib/core/num.dart:145:16: Context: 'num.~/' is defined here.
//   int operator ~/(num other);
//                ^^
//
import self as self;
import "dart:core" as core;

class A extends core::Object {
  synthetic constructor •() → self::A*
    : super core::Object::•()
    ;
  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 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 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
}
class C = self::A with core::num {
  synthetic constructor •() → self::C*
    : super self::A::•()
    ;
  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/core_patch.dart */ _equalToInteger(core::int* other) → core::bool*
    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[other]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::bool*;
  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/core_patch.dart */ _mulFromInteger(core::int* other) → core::num*
    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[other]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::num*;
  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/core_patch.dart */ _moduloFromInteger(core::int* other) → core::num*
    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[other]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::num*;
  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/core_patch.dart */ _subFromInteger(core::int* other) → core::num*
    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[other]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::num*;
  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/core_patch.dart */ _addFromInteger(core::int* other) → core::num*
    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[other]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::num*;
  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/core_patch.dart */ _truncDivFromInteger(core::int* other) → core::int*
    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[other]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/core_patch.dart */ _greaterThanFromInteger(core::int* other) → core::bool*
    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[other]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::bool*;
  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/core_patch.dart */ _remainderFromInteger(core::int* other) → core::num*
    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[other]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::num*;
}
static method main() → dynamic {}

constants  {
  #C1 = #org-dartlang-testcase:///mix_in_num.dart::_equalToInteger
  #C2 = <core::Type*>[]
  #C3 = <dynamic>[]
  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
  #C5 = #org-dartlang-testcase:///mix_in_num.dart::_mulFromInteger
  #C6 = #org-dartlang-testcase:///mix_in_num.dart::_moduloFromInteger
  #C7 = #org-dartlang-testcase:///mix_in_num.dart::_subFromInteger
  #C8 = #org-dartlang-testcase:///mix_in_num.dart::_addFromInteger
  #C9 = #org-dartlang-testcase:///mix_in_num.dart::_truncDivFromInteger
  #C10 = #org-dartlang-testcase:///mix_in_num.dart::_greaterThanFromInteger
  #C11 = #org-dartlang-testcase:///mix_in_num.dart::_remainderFromInteger
}
