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 extends self::A implements core::num /*isEliminatedMixin*/  {
  synthetic constructor •() → self::C*
    : super self::A::•()
    ;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/core_patch.dart */ _equalToInteger(core::int other) → core::bool;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/core_patch.dart */ _mulFromInteger(core::int other) → core::num;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/core_patch.dart */ _moduloFromInteger(core::int other) → core::num;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/core_patch.dart */ _subFromInteger(core::int other) → core::num;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/core_patch.dart */ _addFromInteger(core::int other) → core::num;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/core_patch.dart */ _truncDivFromInteger(core::int other) → core::int;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/core_patch.dart */ _greaterThanFromInteger(core::int other) → core::bool;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/core_patch.dart */ _remainderFromInteger(core::int other) → core::num;
  abstract operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ ==(core::Object other) → core::bool;
  abstract get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ hashCode() → core::int;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ compareTo(generic-covariant-impl core::num other) → core::int;
  abstract operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ +(core::num other) → core::num;
  abstract operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ -(core::num other) → core::num;
  abstract operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ *(core::num other) → core::num;
  abstract operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ %(core::num other) → core::num;
  abstract operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ /(core::num other) → core::double;
  abstract operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ ~/(core::num other) → core::int;
  abstract operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ unary-() → core::num;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ remainder(core::num other) → core::num;
  abstract operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ <(core::num other) → core::bool;
  abstract operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ <=(core::num other) → core::bool;
  abstract operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ >(core::num other) → core::bool;
  abstract operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ >=(core::num other) → core::bool;
  abstract get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ isNaN() → core::bool;
  abstract get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ isNegative() → core::bool;
  abstract get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ isInfinite() → core::bool;
  abstract get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ isFinite() → core::bool;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ abs() → core::num;
  abstract get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ sign() → core::num;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ round() → core::int;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ floor() → core::int;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ ceil() → core::int;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ truncate() → core::int;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ roundToDouble() → core::double;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ floorToDouble() → core::double;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ ceilToDouble() → core::double;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ truncateToDouble() → core::double;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ clamp(core::num lowerLimit, core::num upperLimit) → core::num;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ toInt() → core::int;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ toDouble() → core::double;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ toStringAsFixed(core::int fractionDigits) → core::String;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ toStringAsExponential([core::int? fractionDigits = #C1]) → core::String;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ toStringAsPrecision(core::int precision) → core::String;
  abstract method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ toString() → core::String;
  static method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ parse(core::String input, [@#C3 (core::String) →? core::num onError = #C1]) → core::num {
    core::num? result = core::num::tryParse(input);
    if(!result.{core::num::==}(null))
      return result{core::num};
    if(onError.{core::Object::==}(null))
      throw new core::FormatException::•(input);
    return onError{(core::String) → core::num}.call(input);
  }
  static method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/core/num.dart */ tryParse(core::String input) → core::num? {
    core::String source = input.{core::String::trim}();
    return let final core::int? #t1 = core::int::tryParse(source) in #t1.{core::num::==}(null) ?{core::num?} core::double::tryParse(source) : #t1{core::int};
  }
}
static method main() → dynamic {}

constants  {
  #C1 = null
  #C2 = "next release"
  #C3 = core::Deprecated {message:#C2}
}
