code: private static Object add(ExecutionContext context, Object lhs, Object rhs) {
          if (lhs instanceof String || rhs instanceof String) {
              return(Types.toString(context, lhs) + Types.toString(context, rhs));
          }
  
          Number lhsNum = Types.toNumber(context, lhs);
          Number rhsNum = Types.toNumber(context, rhs);
  
          if (Double.isNaN(lhsNum.doubleValue()) || Double.isNaN(rhsNum.doubleValue())) {
              return(Double.NaN);
          }
  
          if (lhsNum instanceof Double || rhsNum instanceof Double) {
              if (lhsNum.doubleValue() == 0.0 && rhsNum.doubleValue() == 0.0) {
                  if (Double.compare(lhsNum.doubleValue(), 0.0) < 0 && Double.compare(rhsNum.doubleValue(), 0.0) < 0) {
                      return(-0.0);
                  } else {
                      return(0.0);
                  }
              }
  
              return(lhsNum.doubleValue() - rhsNum.doubleValue());
          }
  
          return(lhsNum.longValue() + rhsNum.longValue());
      }
docs: FIXME: This breaks for non-numeric uses if isSubtraction