docs: public static Object mod(final Object o1, final Object o2, final ASTNode node1, final ASTNode node2)
  	{
  		if (o1 != null && o2 != null)
  		{
  			switch (getBaseType(o1, o2))
  			{
  			// case STRING:
  			// return String.valueOf(o1) + String.valueOf(o2);
  				case INTEGER:
  					return Integer.valueOf(((Number) o1).intValue() % ((Number) o2).intValue());
  				case LONG:
  					return Long.valueOf(((Number) o1).longValue() % ((Number) o2).longValue());
  				case DOUBLE:
  					return Double.valueOf(((Number) o1).doubleValue() % ((Number) o2).doubleValue());
  				case FLOAT:
  					return Float.valueOf(((Number) o1).floatValue() % ((Number) o2).floatValue());
  				case SHORT:
  					return Short.valueOf((short) (((Number) o1).intValue() % ((Number) o2).intValue()));
  				case HS:
  					BigDecimal b1 = getBigDecimal(o1),
  					b2 = getBigDecimal(o2);
  					return b1.divide(b2);
  				default:
  					throw UnsupportedTypeException(o1, o2, node1, node2, "%");
  			}
  		}
  		else
  		{
  			throw valueIsNullException(o1, o2, node1, node2);
  		}
  	}