anchor.diff:      }
       return null;
     }
  -}
  -
  -class JavaScriptRoundOperation implements UnaryOperation {
  -  const JavaScriptRoundOperation();
  -  String get name => round.name;
  +
  +  @override
  +  apply(left, right) => left.codeUnitAt(right);
  +}
  +
  +class RoundOperation implements UnaryOperation {
  +  @override
  +  final String name = 'round';
  +
  +  const RoundOperation();
  +
  +  @override
     ConstantValue fold(ConstantValue constant) {
       // Be careful to round() only values that do not throw on either the host or
       // target platform.
  
positive.code:     return result;
    }
  
    apply(left, right) => dartBitOperation.apply(left, right);
  }
  
  class BitAndOperation extends BinaryBitOperation {
    final String name = '&';
    const BitAndOperation();
    BigInt foldInts(BigInt left, BigInt right) => left & right;
    apply(left, right) => left & right;
  }
  
  class BitOrOperation extends BinaryBitOperation {
    final String name = '|';
    const BitOrOperation();
    BigInt foldInts(BigInt left, BigInt right) => left | right;
    apply(left, right) => left | right;
  }
  
  class BitXorOperation extends BinaryBitOperation {
    final String name = '^';
    const BitXorOperation();
    BigInt foldInts(BigInt left, BigInt right) => left ^ right;
    apply(left, right) => left ^ right;
  }
  
  class ShiftLeftOperation extends BinaryBitOperation {
    final String name = '<<';
    const ShiftLeftOperation();
    BigInt foldInts(BigInt left, BigInt right) {
      // TODO(floitsch): find a better way to guard against excessive shifts to
      // the left.
  
negative.code:     }
      return super.fold(left, right);
    }
  
    @override
    BigInt foldInts(BigInt left, BigInt right) {
      if (right < BigInt.zero) return null;
      return left >> right.toInt();
    }
  
    @override
    apply(left, right) => left >> right;
  }
  
  abstract class BinaryBoolOperation implements BinaryOperation {
    const BinaryBoolOperation();
  
    @override
    ConstantValue fold(ConstantValue left, ConstantValue right) {
      if (left.isBool && right.isBool) {
        BoolConstantValue leftBool = left;
  