KT-5076 Error on inlining into object

#KT-5076 Fixed
This commit is contained in:
Mikhael Bogdanov
2014-05-23 11:17:42 +04:00
parent 0bd482d271
commit 950840b8c7
4 changed files with 59 additions and 21 deletions
@@ -2,9 +2,13 @@ import test.*
fun box() : String {
val o = "O"
return doWork {
val p = "GOOD"
val result = doWork {
val k = "K"
val s = object : A<String>() {
val param = p;
override fun getO(): String {
return o;
}
@@ -14,7 +18,11 @@ fun box() : String {
}
}
s.getO() + s.getK()
s.getO() + s.getK() + s.param
}
if (result != "OKGOOD") return "fail $result"
return "OK"
}
@@ -3,9 +3,9 @@ import test.*
fun test1(): String {
val o = "O"
val result = doWork ({o}, {"K"})
val result = doWork ({o}, {"K"}, "GOOD")
return result.getO() + result.getK()
return result.getO() + result.getK() + result.getParam()
}
fun test2() : String {
@@ -13,17 +13,17 @@ fun test2() : String {
val o1 = "O"
val k1 = "K"
val result = doWorkInConstructor ({o1}, {k1})
val result = doWorkInConstructor ({o1}, {k1}, "GOOD")
return result.getO() + result.getK()
return result.getO() + result.getK() + result.getParam()
}
fun box() : String {
val result1 = test1();
if (result1 != "OK") return "fail1 $result1"
if (result1 != "OKGOOD") return "fail1 $result1"
val result2 = test2();
if (result2 != "OK") return "fail2 $result2"
if (result2 != "OKGOOD") return "fail2 $result2"
return "OK"
}
@@ -4,9 +4,11 @@ abstract class A<R> {
abstract fun getO() : R
abstract fun getK() : R
abstract fun getParam() : R
}
inline fun <R> doWork(jobO: ()-> R, jobK: ()-> R) : A<R> {
inline fun <R> doWork(jobO: ()-> R, jobK: ()-> R, param: R) : A<R> {
val s = object : A<R>() {
override fun getO(): R {
@@ -15,12 +17,19 @@ inline fun <R> doWork(jobO: ()-> R, jobK: ()-> R) : A<R> {
override fun getK(): R {
return jobK()
}
override fun getParam(): R {
return param
}
}
return s;
}
inline fun <R> doWorkInConstructor(jobO: ()-> R, jobK: ()-> R) : A<R> {
inline fun <R> doWorkInConstructor(jobO: ()-> R, jobK: ()-> R, param: R) : A<R> {
val s = object : A<R>() {
val p = param;
val o1 = jobO()
val k1 = jobK()
@@ -31,6 +40,10 @@ inline fun <R> doWorkInConstructor(jobO: ()-> R, jobK: ()-> R) : A<R> {
override fun getK(): R {
return k1
}
override fun getParam(): R {
return p
}
}
return s;
}