f624800b84
I was forced to manually do update the following files, because otherwise they would be ignored according .gitignore settings. Probably they should be deleted from repo. Interop/.idea/compiler.xml Interop/.idea/gradle.xml Interop/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_runtime_1_0_3.xml Interop/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_0_3.xml Interop/.idea/modules.xml Interop/.idea/modules/Indexer/Indexer.iml Interop/.idea/modules/Runtime/Runtime.iml Interop/.idea/modules/StubGenerator/StubGenerator.iml backend.native/backend.native.iml backend.native/bc.frontend/bc.frontend.iml backend.native/cli.bc/cli.bc.iml backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.kt backend.native/tests/link/lib/foo.kt backend.native/tests/link/lib/foo2.kt backend.native/tests/teamcity-test.property
54 lines
1.2 KiB
Kotlin
54 lines
1.2 KiB
Kotlin
import kotlin.native.concurrent.*
|
|
import kotlin.native.ref.*
|
|
import kotlin.test.*
|
|
|
|
fun main() {
|
|
test1()
|
|
test2()
|
|
}
|
|
|
|
fun test1() {
|
|
ensureGetsCollectedFrozenAndNotFrozen { LazyCapturesThis() }
|
|
ensureGetsCollectedFrozenAndNotFrozen {
|
|
val l = LazyCapturesThis()
|
|
l.bar
|
|
l
|
|
}
|
|
ensureGetsCollected {
|
|
val l = LazyCapturesThis().freeze()
|
|
l.bar
|
|
l
|
|
}
|
|
}
|
|
|
|
class LazyCapturesThis {
|
|
fun foo() = 42
|
|
val bar by lazy { foo() }
|
|
}
|
|
|
|
fun test2() {
|
|
ensureGetsCollectedFrozenAndNotFrozen { Throwable() }
|
|
ensureGetsCollectedFrozenAndNotFrozen {
|
|
val throwable = Throwable()
|
|
throwable.getStackTrace()
|
|
throwable
|
|
}
|
|
ensureGetsCollected {
|
|
val throwable = Throwable().freeze()
|
|
throwable.getStackTrace()
|
|
throwable
|
|
}
|
|
}
|
|
|
|
fun ensureGetsCollectedFrozenAndNotFrozen(create: () -> Any) {
|
|
ensureGetsCollected { create().freeze() }
|
|
ensureGetsCollected(create)
|
|
}
|
|
|
|
fun ensureGetsCollected(create: () -> Any) {
|
|
val ref = makeWeakRef(create)
|
|
kotlin.native.internal.GC.collect()
|
|
assertNull(ref.get())
|
|
}
|
|
|
|
fun makeWeakRef(create: () -> Any) = WeakReference(create()) |