anchor.diff:  
   final _BITS32 = new BigInt.from(0xFFFFFFFF);
   
  -const add = const AddOperation();
  -const bitAnd = const BitAndOperation();
  +const add = const JavaScriptAddOperation();
  +const bitAnd = const JavaScriptBinaryBitOperation(const BitAndOperation());
   const bitNot = const BitNotOperation();
  -const bitOr = const BitOrOperation();
  -const bitXor = const BitXorOperation();
  +const bitOr = const JavaScriptBinaryBitOperation(const BitOrOperation());
  +const bitXor = const JavaScriptBinaryBitOperation(const BitXorOperation());
   const booleanAnd = const BooleanAndOperation();
   const booleanOr = const BooleanOrOperation();
  -const divide = const DivideOperation();
  +const divide =
  +    const JavaScriptBinaryArithmeticOperation(const DivideOperation());
   const equal = const EqualsOperation();
   const greaterEqual = const GreaterEqualOperation();
   const greater = const GreaterOperation();
  -const identity = const IdentityOperation();
  +const identity = const JavaScriptIdentityOperation();
   const ifNull = const IfNullOperation();
   const lessEqual = const LessEqualOperation();
   const less = const LessOperation();
  -const modulo = const ModuloOperation();
  -const multiply = const MultiplyOperation();
  -const negate = const NegateOperation();
  +const modulo =
  +    const JavaScriptBinaryArithmeticOperation(const ModuloOperation());
  +const multiply =
  +    const JavaScriptBinaryArithmeticOperation(const MultiplyOperation());
  +const negate = const JavaScriptNegateOperation();
   const not = const NotOperation();
  -const remainder = const RemainderOperation();
  -const shiftLeft = const ShiftLeftOperation();
  -const shiftRight = const ShiftRightOperation();
  -const subtract = const SubtractOperation();
  -const truncatingDivide = const TruncatingDivideOperation();
  -const codeUnitAt = const CodeUnitAtOperation();
  -const round = const RoundOperation();
  +const remainder = const JavaScriptRemainderOperation();
  +const shiftLeft =
  +    const JavaScriptBinaryBitOperation(const ShiftLeftOperation());
  +const shiftRight = const JavaScriptShiftRightOperation();
  +const subtract =
  +    const JavaScriptBinaryArithmeticOperation(const SubtractOperation());
  +const truncatingDivide = const JavaScriptBinaryArithmeticOperation(
  +    const TruncatingDivideOperation());
  +const codeUnitAt = const CodeUnitAtRuntimeOperation();
  +const round = const JavaScriptRoundOperation();
   const abs = const UnfoldedUnaryOperation('abs');
   
   /// Returns true if [value] will turn into NaN or infinity
  
positive.code: }
  
  class UnfoldedUnaryOperation implements UnaryOperation {
    @override
    final String name;
  
    const UnfoldedUnaryOperation(this.name);
  
    @override
    ConstantValue fold(ConstantValue constant) {
      return null;
    }
  
negative.code:     }
      return null;
    }
  }
  
  class JavaScriptRoundOperation implements UnaryOperation {
    const JavaScriptRoundOperation();
    String get name => round.name;
    ConstantValue fold(ConstantValue constant) {
      // Be careful to round() only values that do not throw on either the host or
      // target platform.
  