From f7a04097bb6fc507ceb639e0ee8130f96a0aabe9 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 30 Jun 2011 15:49:29 +0200 Subject: [PATCH] couple of fixes to allow generation of generic extension functions --- idea/src/org/jetbrains/jet/codegen/JetTypeMapper.java | 4 ++++ idea/src/org/jetbrains/jet/codegen/StackValue.java | 7 ++++++- idea/testData/codegen/extensionFunctions/generic.jet | 2 +- .../org/jetbrains/jet/codegen/ExtensionFunctionsTest.java | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/idea/src/org/jetbrains/jet/codegen/JetTypeMapper.java b/idea/src/org/jetbrains/jet/codegen/JetTypeMapper.java index 4105a7f266f..5d27e583be9 100644 --- a/idea/src/org/jetbrains/jet/codegen/JetTypeMapper.java +++ b/idea/src/org/jetbrains/jet/codegen/JetTypeMapper.java @@ -232,6 +232,10 @@ public class JetTypeMapper { return Type.getObjectType(jvmName((ClassDescriptor) descriptor, kind)); } + if (descriptor instanceof TypeParameterDescriptor) { + return mapType(((TypeParameterDescriptor) descriptor).getBoundsAsType(), kind); + } + throw new UnsupportedOperationException("Unknown type " + jetType); } diff --git a/idea/src/org/jetbrains/jet/codegen/StackValue.java b/idea/src/org/jetbrains/jet/codegen/StackValue.java index 7ed07ef2342..36098d1c3a6 100644 --- a/idea/src/org/jetbrains/jet/codegen/StackValue.java +++ b/idea/src/org/jetbrains/jet/codegen/StackValue.java @@ -152,7 +152,12 @@ public abstract class StackValue { } else if (this.type.getSort() == Type.OBJECT && type.getSort() <= Type.DOUBLE) { if (this.type.equals(JetTypeMapper.TYPE_OBJECT)) { - v.checkcast(Type.getObjectType("java/lang/Number")); + if (type.getSort() == Type.BOOLEAN) { + v.checkcast(Type.getObjectType("java/lang/Boolean")); + } + else { + v.checkcast(Type.getObjectType("java/lang/Number")); + } } unbox(type, v); } diff --git a/idea/testData/codegen/extensionFunctions/generic.jet b/idea/testData/codegen/extensionFunctions/generic.jet index bc3efc03f14..88cf5f734e6 100644 --- a/idea/testData/codegen/extensionFunctions/generic.jet +++ b/idea/testData/codegen/extensionFunctions/generic.jet @@ -16,6 +16,6 @@ fun box(): String { list.add("Moscow") list.add("Munich") - val m: ArrayList = list.findAll({(name: String) => name.startsWith("M")}) + val m: ArrayList = list.findAll({(name: String) => name.startsWith("M")}) return if (m.size() == 2) "OK" else "fail" } diff --git a/idea/tests/org/jetbrains/jet/codegen/ExtensionFunctionsTest.java b/idea/tests/org/jetbrains/jet/codegen/ExtensionFunctionsTest.java index 46a00736ddc..7151adcbc12 100644 --- a/idea/tests/org/jetbrains/jet/codegen/ExtensionFunctionsTest.java +++ b/idea/tests/org/jetbrains/jet/codegen/ExtensionFunctionsTest.java @@ -24,7 +24,7 @@ public class ExtensionFunctionsTest extends CodegenTestCase { assertThrows(foo, Exception.class, null, new StringBuilder()); } - public void _testGeneric() throws Exception { + public void testGeneric() throws Exception { blackBoxFile("extensionFunctions/generic.jet"); } }