Drop Cloneable in JS, synthesize it at compile-time on JVM

Use the same approach that is used for creating function type classes
(Function{0,1,...}) + add Cloneable to supertypes of Array and primitive arrays

 #KT-5537 Fixed
This commit is contained in:
Alexander Udalov
2016-10-13 11:53:18 +03:00
parent 0f4b10d37d
commit 035d6156a7
24 changed files with 376 additions and 173 deletions
@@ -0,0 +1,25 @@
fun foo(x: Cloneable) = x
fun box(): String {
foo(arrayOf(""))
foo(intArrayOf())
foo(longArrayOf())
foo(shortArrayOf())
foo(byteArrayOf())
foo(charArrayOf())
foo(doubleArrayOf())
foo(floatArrayOf())
foo(booleanArrayOf())
arrayOf("").clone()
intArrayOf().clone()
longArrayOf().clone()
shortArrayOf().clone()
byteArrayOf().clone()
charArrayOf().clone()
doubleArrayOf().clone()
floatArrayOf().clone()
booleanArrayOf().clone()
return "OK"
}
@@ -35,8 +35,8 @@ fun box(): String {
check<Int>(::number, ::comparableOfInt, ::serializable)
checkAll<Int>(::number, ::comparableOfInt, ::serializable, ::any)
check<Array<Any>>(::cloneable, ::serializable)
checkAll<Array<Any>>(::cloneable, ::serializable, ::any)
check<Array<Any>>(::any, ::cloneable, ::serializable)
checkAll<Array<Any>>(::any, ::cloneable, ::serializable)
return "OK"
}