KT-3189 Function invoke is called with no reason
prioritize tasks specially for invoke #KT-3189 Fixed #KT-3190 Fixed #KT-3297 Fixed
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
//KT-3190 Compiler crash if function called 'invoke' calls a closure
|
||||
|
||||
fun box(): String {
|
||||
val test = Cached<Int,Int>({ it + 2 })
|
||||
return if (test(1) == 3) "OK" else "fail"
|
||||
}
|
||||
|
||||
class Cached<K, V>(private val generate: (K)->V): jet.Function1<K, V> {
|
||||
val store = java.util.HashMap<K, V>()
|
||||
|
||||
// Everything works just fine if 'invoke' method is renamed to, for example, 'get'
|
||||
override fun invoke(p1: K) = store.getOrPut(p1) { generate(p1) }
|
||||
}
|
||||
|
||||
//from library
|
||||
fun <K,V> MutableMap<K,V>.getOrPut(key: K, defaultValue: ()-> V) : V {
|
||||
if (this.containsKey(key)) {
|
||||
return this.get(key) as V
|
||||
} else {
|
||||
val answer = defaultValue()
|
||||
this.put(key, answer)
|
||||
return answer
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user