anchor.diff:  
     AbstractConstantValue closedOnInt(AbstractConstantValue left,
                                       AbstractConstantValue right) {
  -    if (isDefinitelyInt(left) && isDefinitelyInt(right)) {
  +    if (isDefinitelyInt(left) && isDefinitelyInt(right, allowNull: true)) {
         return nonConstant(typeSystem.intType);
       }
       return null;
  
positive.code:         foldBinary(constantSystem.bitAnd, left, right);
      if (folded != null) return folded;
      if (isDefinitelyNum(left)) {
        if (isDefinitelyUint31(left) || isDefinitelyUint31(right)) {
          // Either 31-bit argument will truncate the other.
          return nonConstant(typeSystem.uint31Type);
        }
  
negative.code:       if (isDefinitelyUint32(left) && isDefinitelyIntInRange(right, min: 2)) {
          return nonConstant(typeSystem.uint31Type);
        }
        if (isDefinitelyUint(right, allowNull: true)) {
          // `0` will be an exception, other values will shrink the result.
          if (isDefinitelyUint31(left)) return nonConstant(typeSystem.uint31Type);
          if (isDefinitelyUint32(left)) return nonConstant(typeSystem.uint32Type);
  