code: Type binaryPromotion(Type t1, Type t2) {
          Type unboxedT1 = types.unboxedTypeOrType(t1);
          Type unboxedT2 = types.unboxedTypeOrType(t2);
  
          if (unboxedT1.isNumeric() && unboxedT2.isNumeric()) {
              if (unboxedT1.hasTag(TypeTag.DOUBLE) || unboxedT2.hasTag(TypeTag.DOUBLE)) {
                  return syms.doubleType;
              } else if (unboxedT1.hasTag(TypeTag.FLOAT) || unboxedT2.hasTag(TypeTag.FLOAT)) {
                  return syms.floatType;
              } else if (unboxedT1.hasTag(TypeTag.LONG) || unboxedT2.hasTag(TypeTag.LONG)) {
                  return syms.longType;
              } else {
                  return syms.intType;
              }
          } else if (types.isSameType(unboxedT1, unboxedT2)) {
              return unboxedT1;
          } else {
              return syms.objectType;
          }
      }
docs: Perform binary promotion of a pair of types; this routine implements JLS 5.6.2.
  If the input types are not supported by unary promotion, if such types are identical to
  a type C, then C is returned, otherwise Object is returned.