JS backend: fix kt-5345 (Type mismatch on Int / Float division)
This commit is contained in:
@@ -50,6 +50,11 @@ public final class NumberTest extends SingleFileTranslationTest {
|
||||
checkFooBoxIsOk();
|
||||
}
|
||||
|
||||
// KT-5345 Type mismatch on Int / Float division
|
||||
public void testIntDivFloat() throws Exception {
|
||||
checkFooBoxIsOk();
|
||||
}
|
||||
|
||||
public void testHexademicalConstant() throws Exception {
|
||||
try {
|
||||
fooBoxTest();
|
||||
|
||||
+6
-1
@@ -24,7 +24,9 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
import org.jetbrains.jet.lang.types.expressions.OperatorConventions;
|
||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||
import org.jetbrains.jet.lexer.JetToken;
|
||||
import org.jetbrains.k2js.translate.context.TranslationContext;
|
||||
import org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionIntrinsic;
|
||||
@@ -101,7 +103,10 @@ public enum PrimitiveBinaryOperationFIF implements FunctionIntrinsicFactory {
|
||||
}
|
||||
|
||||
if (pattern(INTEGER_NUMBER_TYPES + ".div").apply(descriptor)) {
|
||||
return INTEGER_DIVISION_INTRINSIC;
|
||||
JetType resultType = descriptor.getReturnType();
|
||||
if (!KotlinBuiltIns.getInstance().getFloatType().equals(resultType) &&
|
||||
!KotlinBuiltIns.getInstance().getDoubleType().equals(resultType))
|
||||
return INTEGER_DIVISION_INTRINSIC;
|
||||
}
|
||||
if (descriptor.getName().equals(Name.identifier("rangeTo"))) {
|
||||
return RANGE_TO_INTRINSIC;
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
// http://youtrack.jetbrains.com/issue/KT-5345
|
||||
// KT-5345 (Javascript) Type mismatch on Int / Float division
|
||||
// If any of Number operands is floating-point, the result should be float too.
|
||||
|
||||
package foo
|
||||
|
||||
fun box(): String {
|
||||
assertEquals(0.5f, 1 / 2.0f, "Int / Float")
|
||||
assertEquals(0.5, 1 / 2.0, "Int / Double")
|
||||
|
||||
assertEquals(0.5f, (1: Short) / 2.0f, "Short / Float")
|
||||
assertEquals(0.5, (1: Short) / 2.0, "Short / Double")
|
||||
|
||||
assertEquals(0.5f, (1: Byte) / 2.0f, "Byte / Float")
|
||||
assertEquals(0.5, (1: Byte) / 2.0, "Byte / Double")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user