anchor.diff:      AbstractConstantValue folded = foldBinary(constantSystem.add, left, right);
       if (folded != null) return folded;
       if (isDefinitelyNum(left)) {
  -      if (isDefinitelyUint31(left) && isDefinitelyUint31(right)) {
  +      if (isDefinitelyUint31(left) &&
  +          isDefinitelyUint31(right, allowNull: true)) {
           return nonConstant(typeSystem.uint32Type);
         }
         return closedOnUint(left, right) ?? closedOnInt(left, right);
  
positive.code: 
    AbstractConstantValue closedOnUint31(AbstractConstantValue left,
                                         AbstractConstantValue right) {
      if (isDefinitelyUint31(left) && isDefinitelyUint31(right)) {
        return nonConstant(typeSystem.uint31Type);
      }
      return null;
  
negative.code: 
    AbstractConstantValue closedOnInt(AbstractConstantValue left,
                                      AbstractConstantValue right) {
      if (isDefinitelyInt(left) && isDefinitelyInt(right, allowNull: true)) {
        return nonConstant(typeSystem.intType);
      }
      return null;
  