@Override public Boolean visitPrimitiveType(final PrimitiveType t, final TypeReference s) { final JvmType jt = t.getSimpleType(); final JvmType js = s.getSimpleType(); switch (js) { case Boolean: return jt == JvmType.Boolean; case Byte: return jt != JvmType.Character && jt.isIntegral() && jt.bitWidth() <= js.bitWidth(); case Character: return jt == JvmType.Character; case Short: if (jt == JvmType.Character) { return false; } // fall through case Integer: case Long: return jt.isIntegral() && jt.bitWidth() <= js.bitWidth(); case Float: case Double: return jt.isIntegral() || jt.bitWidth() <= js.bitWidth(); case Void: return jt == JvmType.Void; default: return Boolean.FALSE; } }
@Override public String getInternalName() { return _jvmType.getDescriptorPrefix(); }
@Override public String getFullName() { return _jvmType.getPrimitiveName(); }
case Float: case Double: { if (sourceJvmType.isIntegral()) { return sourceJvmType.bitWidth() >= targetJvmType.bitWidth() ? ConversionType.IMPLICIT_LOSSY : ConversionType.IMPLICIT; return sourceJvmType.bitWidth() <= targetJvmType.bitWidth() ? ConversionType.IMPLICIT : ConversionType.EXPLICIT; if (sourceJvmType.isIntegral() && sourceJvmType.bitWidth() <= targetJvmType.bitWidth()) { return sourceJvmType.isNumeric() ? ConversionType.EXPLICIT : ConversionType.NONE;
public ParameterDefinition(final int slot, final String name, final TypeReference parameterType) { super(name, parameterType); _slot = slot; _size = parameterType.getSimpleType().isDoubleWord() ? 2 : 1; }
private static TypeReference doNumericPromotion(final TypeReference leftType, final TypeReference rightType) { final JvmType left = leftType.getSimpleType(); final JvmType right = rightType.getSimpleType(); if (left == right) { return leftType; } if (left == JvmType.Double || right == JvmType.Double) { return BuiltinTypes.Double; } if (left == JvmType.Float || right == JvmType.Float) { return BuiltinTypes.Float; } if (left == JvmType.Long || right == JvmType.Long) { return BuiltinTypes.Long; } if (left.isNumeric() && left != JvmType.Boolean || right.isNumeric() && right != JvmType.Boolean) { return BuiltinTypes.Integer; } return leftType; }
private static Object divide(final JvmType type, final Object left, final Object right) { if (left instanceof Number && right instanceof Number) { if (type.isIntegral() && ((Number) right).longValue() == 0L) { return null; } switch (type) { case Byte: return (byte) (((Number) left).intValue() / ((Number) right).intValue()); case Character: return (char) ((Number) left).intValue() / ((Number) right).intValue(); case Short: return (short) ((Number) left).intValue() / ((Number) right).intValue(); case Integer: return ((Number) left).intValue() / ((Number) right).intValue(); case Long: return ((Number) left).longValue() / ((Number) right).longValue(); case Float: return ((Number) left).floatValue() / ((Number) right).floatValue(); case Double: return ((Number) left).doubleValue() / ((Number) right).doubleValue(); } } return null; }
if (valueResult.getType().getSimpleType() == JvmType.Boolean && targetResult.getType().getSimpleType() != JvmType.Boolean && targetResult.getType().getSimpleType().isNumeric()) { if (targetResult.getType().getSimpleType().bitWidth() < 32) { final AstBuilder astBuilder = context.getUserData(Keys.AST_BUILDER); valueResult.getType().getSimpleType().isNumeric()) {
final TypeReference declaringType = parser.parseTypeDescriptor("java/lang/" + jvmType.name()); final FieldReference field = parser.parseField(declaringType, fieldName, jvmType.getDescriptorPrefix());
return valueJvmType.isSubWordOrInt32() && valueJvmType != JvmType.Boolean && n.intValue() >= Byte.MIN_VALUE && return valueJvmType.isSubWordOrInt32() && valueJvmType != JvmType.Boolean && n.intValue() >= Character.MIN_VALUE && return valueJvmType.isSubWordOrInt32() && valueJvmType != JvmType.Boolean && n.intValue() >= Short.MIN_VALUE && return valueJvmType.isSubWordOrInt32() && valueJvmType != JvmType.Boolean && n.longValue() >= Integer.MIN_VALUE && return valueJvmType.isIntegral() && valueJvmType != JvmType.Boolean;
private static boolean checkOperand(final OperandType operandType, final TypeReference type) { VerifyArgument.notNull(type, "type"); switch (operandType) { case PrimitiveTypeCode: return type.getSimpleType().isPrimitive(); case TypeReference: case TypeReferenceU1: return true; default: return false; } }
public final int getSize() { return getVariableType().getSimpleType().stackSlots(); }
case Float: case Double: if (sourceJvmType.isIntegral() || sourceJvmType.bitWidth() <= targetJvmType.bitWidth()) { return ConversionType.IMPLICIT; if (sourceJvmType.isIntegral() && sourceJvmType.bitWidth() <= targetJvmType.bitWidth()) { return sourceJvmType.isNumeric() ? ConversionType.EXPLICIT : ConversionType.NONE;
public ParameterDefinition(final int slot, final String name, final TypeReference parameterType) { super(name, parameterType); _slot = slot; _size = parameterType.getSimpleType().isDoubleWord() ? 2 : 1; }
private static TypeReference doNumericPromotion(final TypeReference leftType, final TypeReference rightType) { final JvmType left = leftType.getSimpleType(); final JvmType right = rightType.getSimpleType(); if (left == right) { return leftType; } if (left == JvmType.Double || right == JvmType.Double) { return BuiltinTypes.Double; } if (left == JvmType.Float || right == JvmType.Float) { return BuiltinTypes.Float; } if (left == JvmType.Long || right == JvmType.Long) { return BuiltinTypes.Long; } if (left.isNumeric() && left != JvmType.Boolean || right.isNumeric() && right != JvmType.Boolean) { return BuiltinTypes.Integer; } return leftType; }
private static Object divide(final JvmType type, final Object left, final Object right) { if (left instanceof Number && right instanceof Number) { if (type.isIntegral() && ((Number) right).longValue() == 0L) { return null; } switch (type) { case Byte: return (byte) (((Number) left).intValue() / ((Number) right).intValue()); case Character: return (char) ((Number) left).intValue() / ((Number) right).intValue(); case Short: return (short) ((Number) left).intValue() / ((Number) right).intValue(); case Integer: return ((Number) left).intValue() / ((Number) right).intValue(); case Long: return ((Number) left).longValue() / ((Number) right).longValue(); case Float: return ((Number) left).floatValue() / ((Number) right).floatValue(); case Double: return ((Number) left).doubleValue() / ((Number) right).doubleValue(); } } return null; }
if (valueResult.getType().getSimpleType() == JvmType.Boolean && targetResult.getType().getSimpleType() != JvmType.Boolean && targetResult.getType().getSimpleType().isNumeric()) { if (targetResult.getType().getSimpleType().bitWidth() < 32) { final AstBuilder astBuilder = context.getUserData(Keys.AST_BUILDER); valueResult.getType().getSimpleType().isNumeric()) {
final TypeReference declaringType = parser.parseTypeDescriptor("java/lang/" + jvmType.name()); final FieldReference field = parser.parseField(declaringType, fieldName, jvmType.getDescriptorPrefix());