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