library;
//
// Problems in library:
//
// pkg/front_end/testcases/coverage/int64_literal_test.dart:13:21: Error: The integer literal 9223372036854775808 can't be represented in 64 bits.
// Try using the BigInt class if you need an integer larger than 9,223,372,036,854,775,807 or less than -9,223,372,036,854,775,808.
//   minInt64Value = -(9223372036854775808); // Error
//                     ^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/coverage/int64_literal_test.dart:21:19: Error: The integer literal 9223372036854775808 can't be represented in 64 bits.
// Try using the BigInt class if you need an integer larger than 9,223,372,036,854,775,807 or less than -9,223,372,036,854,775,808.
//   maxInt64Value = 9223372036854775808 - 1; // Error
//                   ^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/coverage/int64_literal_test.dart:23:20: Error: The integer literal 9223372036854775809 can't be represented in 64 bits.
// Try using the BigInt class if you need an integer larger than 9,223,372,036,854,775,807 or less than -9,223,372,036,854,775,808.
//   maxInt64Value = -9223372036854775809; // Error
//                    ^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/coverage/int64_literal_test.dart:26:20: Error: The integer literal 0x8000000000000001 can't be represented in 64 bits.
// Try using the BigInt class if you need an integer larger than 9,223,372,036,854,775,807 or less than -9,223,372,036,854,775,808.
//   maxInt64Value = -0x8000000000000001; // Error
//                    ^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

static const field core::int i21 = #C1;
static method foo() → void {
  core::int minInt64Value = 1.{core::int::unary-}(){() → core::int}.{core::num::*}(#C1){(core::num) → core::int}.{core::num::*}(#C1){(core::num) → core::int}.{core::num::*}(#C1){(core::num) → core::int};
  minInt64Value = 9223372036854775807.{core::int::unary-}(){() → core::int}.{core::num::-}(1){(core::num) → core::int};
  minInt64Value = -9223372036854775808.{core::int::unary-}(){() → core::int};
  minInt64Value = invalid-expression "pkg/front_end/testcases/coverage/int64_literal_test.dart:13:21: Error: The integer literal 9223372036854775808 can't be represented in 64 bits.
Try using the BigInt class if you need an integer larger than 9,223,372,036,854,775,807 or less than -9,223,372,036,854,775,808.
  minInt64Value = -(9223372036854775808); // Error
                    ^^^^^^^^^^^^^^^^^^^"{dynamic}.unary-() as{TypeError,ForDynamic} core::int;
  minInt64Value = -9223372036854775808.{core::int::unary-}(){() → core::int};
  minInt64Value = -9223372036854775808;
  minInt64Value = -9223372036854775808.{core::int::unary-}(){() → core::int};
  core::int maxInt64Value = 1.{core::num::*}(#C1){(core::num) → core::int}.{core::num::*}(#C1){(core::num) → core::int}.{core::num::*}(#C1){(core::num) → core::int}.{core::num::-}(1){(core::num) → core::int};
  maxInt64Value = 9223372036854775807;
  maxInt64Value = 9223372036854775807;
  maxInt64Value = invalid-expression "pkg/front_end/testcases/coverage/int64_literal_test.dart:21:19: Error: The integer literal 9223372036854775808 can't be represented in 64 bits.
Try using the BigInt class if you need an integer larger than 9,223,372,036,854,775,807 or less than -9,223,372,036,854,775,808.
  maxInt64Value = 9223372036854775808 - 1; // Error
                  ^^^^^^^^^^^^^^^^^^^"{dynamic}.-(1) as{TypeError,ForDynamic} core::int;
  maxInt64Value = -9223372036854775808.{core::int::unary-}(){() → core::int}.{core::num::-}(1){(core::num) → core::int};
  maxInt64Value = invalid-expression "pkg/front_end/testcases/coverage/int64_literal_test.dart:23:20: Error: The integer literal 9223372036854775809 can't be represented in 64 bits.
Try using the BigInt class if you need an integer larger than 9,223,372,036,854,775,807 or less than -9,223,372,036,854,775,808.
  maxInt64Value = -9223372036854775809; // Error
                   ^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic} core::int;
  maxInt64Value = -9223372036854775808.{core::num::-}(1){(core::num) → core::int};
  maxInt64Value = -9223372036854775808.{core::int::unary-}(){() → core::int}.{core::num::-}(1){(core::num) → core::int};
  maxInt64Value = invalid-expression "pkg/front_end/testcases/coverage/int64_literal_test.dart:26:20: Error: The integer literal 0x8000000000000001 can't be represented in 64 bits.
Try using the BigInt class if you need an integer larger than 9,223,372,036,854,775,807 or less than -9,223,372,036,854,775,808.
  maxInt64Value = -0x8000000000000001; // Error
                   ^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic} core::int;
  maxInt64Value = -9223372036854775807.{core::int::unary-}(){() → core::int};
}

constants  {
  #C1 = 2097152
}
