Double
This commit is contained in:
@@ -506,12 +506,13 @@ public class ExpressionCodegen extends JetVisitor {
|
|||||||
|
|
||||||
private static boolean isNumberPrimitive(String className) {
|
private static boolean isNumberPrimitive(String className) {
|
||||||
return className.equals("Int") || className.equals("Long") || className.equals("Short") ||
|
return className.equals("Int") || className.equals("Long") || className.equals("Short") ||
|
||||||
className.equals("Byte") || className.equals("Char") || className.equals("Float");
|
className.equals("Byte") || className.equals("Char") || className.equals("Float") ||
|
||||||
|
className.equals("Double");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isNumberPrimitive(Type type) {
|
private static boolean isNumberPrimitive(Type type) {
|
||||||
return type == Type.INT_TYPE || type == Type.SHORT_TYPE || type == Type.BYTE_TYPE || type == Type.CHAR_TYPE ||
|
return type == Type.INT_TYPE || type == Type.SHORT_TYPE || type == Type.BYTE_TYPE || type == Type.CHAR_TYPE ||
|
||||||
type == Type.FLOAT_TYPE;
|
type == Type.FLOAT_TYPE || type == Type.DOUBLE_TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int opcodeForMethod(final String name) {
|
private static int opcodeForMethod(final String name) {
|
||||||
@@ -526,7 +527,8 @@ public class ExpressionCodegen extends JetVisitor {
|
|||||||
private void generateBinaryOp(JetBinaryExpression expression, FunctionDescriptor op, int opcode) {
|
private void generateBinaryOp(JetBinaryExpression expression, FunctionDescriptor op, int opcode) {
|
||||||
JetType returnType = op.getUnsubstitutedReturnType();
|
JetType returnType = op.getUnsubstitutedReturnType();
|
||||||
final Type asmType = typeMapper.mapType(returnType);
|
final Type asmType = typeMapper.mapType(returnType);
|
||||||
if (asmType == Type.INT_TYPE || asmType == Type.LONG_TYPE || asmType == Type.FLOAT_TYPE) {
|
if (asmType == Type.INT_TYPE || asmType == Type.LONG_TYPE ||
|
||||||
|
asmType == Type.FLOAT_TYPE || asmType == Type.DOUBLE_TYPE) {
|
||||||
gen(expression.getLeft(), asmType);
|
gen(expression.getLeft(), asmType);
|
||||||
gen(expression.getRight(), asmType);
|
gen(expression.getRight(), asmType);
|
||||||
v.visitInsn(asmType.getOpcode(opcode));
|
v.visitInsn(asmType.getOpcode(opcode));
|
||||||
|
|||||||
@@ -35,6 +35,9 @@ public class JetTypeMapper {
|
|||||||
if (jetType.equals(standardLibrary.getFloatType())) {
|
if (jetType.equals(standardLibrary.getFloatType())) {
|
||||||
return Type.FLOAT_TYPE;
|
return Type.FLOAT_TYPE;
|
||||||
}
|
}
|
||||||
|
if (jetType.equals(standardLibrary.getDoubleType())) {
|
||||||
|
return Type.DOUBLE_TYPE;
|
||||||
|
}
|
||||||
if (jetType.equals(standardLibrary.getBooleanType())) {
|
if (jetType.equals(standardLibrary.getBooleanType())) {
|
||||||
return Type.BOOLEAN_TYPE;
|
return Type.BOOLEAN_TYPE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ public abstract class StackValue {
|
|||||||
else {
|
else {
|
||||||
throw new UnsupportedOperationException("don't know how to generate this condjump");
|
throw new UnsupportedOperationException("don't know how to generate this condjump");
|
||||||
}
|
}
|
||||||
if (type == Type.FLOAT_TYPE) {
|
if (type == Type.FLOAT_TYPE || type == Type.DOUBLE_TYPE) {
|
||||||
if (opToken == JetTokens.GT || opToken == JetTokens.GTEQ) {
|
if (opToken == JetTokens.GT || opToken == JetTokens.GTEQ) {
|
||||||
v.cmpg(type);
|
v.cmpg(type);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -287,6 +287,14 @@ public class NamespaceGenTest extends LightCodeInsightFixtureTestCase {
|
|||||||
binOpTest("fun foo(a: Float, b: Float): Boolean = a == b", 1.0f, 1.0f, true);
|
binOpTest("fun foo(a: Float, b: Float): Boolean = a == b", 1.0f, 1.0f, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testDouble() throws Exception {
|
||||||
|
binOpTest("fun foo(a: Double, b: Double): Double = a + b", 1.0, 2.0, 3.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testDoubleCmp() throws Exception {
|
||||||
|
binOpTest("fun foo(a: Double, b: Double): Boolean = a == b", 1.0, 2.0, false);
|
||||||
|
}
|
||||||
|
|
||||||
private void binOpTest(final String text, final Object arg1, final Object arg2, final Object expected) throws Exception {
|
private void binOpTest(final String text, final Object arg1, final Object arg2, final Object expected) throws Exception {
|
||||||
loadText(text);
|
loadText(text);
|
||||||
System.out.println(generateToText());
|
System.out.println(generateToText());
|
||||||
|
|||||||
Reference in New Issue
Block a user