Simplistic type inference:

KT-258 Support equality constraints in type inference
KT-399 Type argument inference not implemented for CALL_EXPRESSION
This commit is contained in:
Andrey Breslav
2011-11-09 19:52:05 +03:00
parent 787d3aa450
commit a24e448973
4 changed files with 80 additions and 3 deletions
@@ -0,0 +1,10 @@
// KT-258 Support equality constraints in type inference
import java.util.*
fun test() {
val attributes : HashMap<String, String> = HashMap()
attributes["href"] = "1" // inference fails, but it shouldn't
}
fun <K, V> java.util.Map<K, V>.set(key : K, value : V) {}//= this.put(key, value)
@@ -0,0 +1,18 @@
class C<T>() {
fun foo() : T <!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>{}<!>
}
fun foo(c: C<Int>) {}
fun bar<T>() : C<T> <!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>{}<!>
fun main(args : Array<String>) {
val a : C<Int> = C();
val x : C<in String> = C()
val y : C<out String> = C()
val z : C<*> = C()
val ba : C<Int> = bar();
val bx : C<in String> = bar()
val by : C<out String> = bar()
val bz : C<*> = bar()
}
@@ -0,0 +1,11 @@
// KT-399 Type argument inference not implemented for CALL_EXPRESSION
fun <T> getSameTypeChecker(obj: T) : Function1<Any,Boolean> {
return { (a : Any) => a is T }
}
fun box() : String {
if(getSameTypeChecker<String>("lala")(10)) return "fail"
if(!getSameTypeChecker<String>("mama")("lala")) return "fail"
return "OK"
}