library test;
import self as self;
import "dart:core" as core;

static field core::bool* a_equal = 1.{core::num::==}(2);
static field core::bool* a_notEqual = !1.{core::num::==}(2);
static field core::int* a_bitXor = 1.{core::int::^}(2);
static field core::int* a_bitAnd = 1.{core::int::&}(2);
static field core::int* a_bitOr = 1.{core::int::|}(2);
static field core::int* a_bitShiftRight = 1.{core::int::>>}(2);
static field core::int* a_bitShiftLeft = 1.{core::int::<<}(2);
static field core::int* a_add = 1.{core::num::+}(2);
static field core::int* a_subtract = 1.{core::num::-}(2);
static field core::int* a_multiply = 1.{core::num::*}(2);
static field core::double* a_divide = 1.{core::num::/}(2);
static field core::int* a_floorDivide = 1.{core::num::~/}(2);
static field core::bool* a_greater = 1.{core::num::>}(2);
static field core::bool* a_less = 1.{core::num::<}(2);
static field core::bool* a_greaterEqual = 1.{core::num::>=}(2);
static field core::bool* a_lessEqual = 1.{core::num::<=}(2);
static field core::int* a_modulo = 1.{core::num::%}(2);
static method main() → dynamic {
  self::a_equal;
  self::a_notEqual;
  self::a_bitXor;
  self::a_bitAnd;
  self::a_bitOr;
  self::a_bitShiftRight;
  self::a_bitShiftLeft;
  self::a_add;
  self::a_subtract;
  self::a_multiply;
  self::a_divide;
  self::a_floorDivide;
  self::a_greater;
  self::a_less;
  self::a_greaterEqual;
  self::a_lessEqual;
  self::a_modulo;
}


Extra constant evaluation status:
Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:8:36 -> BoolConstant(false)
Evaluated: Not @ org-dartlang-testcase:///infer_binary_int_int.dart:9:39 -> BoolConstant(true)
Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:10:36 -> IntConstant(3)
Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:11:36 -> IntConstant(0)
Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:12:35 -> IntConstant(3)
Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:13:44 -> IntConstant(0)
Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:14:43 -> IntConstant(4)
Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:15:33 -> IntConstant(3)
Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:16:38 -> IntConstant(-1)
Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:17:38 -> IntConstant(2)
Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:18:37 -> DoubleConstant(0.5)
Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:19:43 -> IntConstant(0)
Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:20:37 -> BoolConstant(false)
Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:21:34 -> BoolConstant(true)
Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:22:43 -> BoolConstant(false)
Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:23:40 -> BoolConstant(true)
Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:24:36 -> IntConstant(1)
Extra constant evaluation: evaluated: 34, effectively constant: 17
