From 47e231efc1f40a7539b99ebb432e5fce12e9f2e6 Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Mon, 9 Sep 2019 16:45:07 +0300 Subject: [PATCH] Add Throwable.getStackTraceAddresses() extension To allow integration with third-party crash analytic tools. --- runtime/src/main/kotlin/kotlin/Throwable.kt | 3 +++ .../src/main/kotlin/kotlin/native/ThrowableExtensions.kt | 8 ++++++++ .../src/main/kotlin/kotlin/native/internal/NativePtr.kt | 3 +++ 3 files changed, 14 insertions(+) create mode 100644 runtime/src/main/kotlin/kotlin/native/ThrowableExtensions.kt diff --git a/runtime/src/main/kotlin/kotlin/Throwable.kt b/runtime/src/main/kotlin/kotlin/Throwable.kt index ef74dc7aed3..da433fb5ef2 100644 --- a/runtime/src/main/kotlin/kotlin/Throwable.kt +++ b/runtime/src/main/kotlin/kotlin/Throwable.kt @@ -34,6 +34,9 @@ public open class Throwable(open val message: String?, open val cause: Throwable public fun getStackTrace(): Array = stackTraceStrings + internal fun Throwable.getStackTraceAddressesInternal(): List = + (0 until stackTrace.size).map { index -> stackTrace[index].toLong() } + public fun printStackTrace(): Unit = dumpStackTrace { println(it) } internal fun dumpStackTrace(): String = buildString { diff --git a/runtime/src/main/kotlin/kotlin/native/ThrowableExtensions.kt b/runtime/src/main/kotlin/kotlin/native/ThrowableExtensions.kt new file mode 100644 index 00000000000..7093cf861d5 --- /dev/null +++ b/runtime/src/main/kotlin/kotlin/native/ThrowableExtensions.kt @@ -0,0 +1,8 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the LICENSE file. + */ +package kotlin.native + +public fun Throwable.getStackTraceAddresses(): List = + this.getStackTraceAddressesInternal() diff --git a/runtime/src/main/kotlin/kotlin/native/internal/NativePtr.kt b/runtime/src/main/kotlin/kotlin/native/internal/NativePtr.kt index b073866184b..c4f06ef7880 100644 --- a/runtime/src/main/kotlin/kotlin/native/internal/NativePtr.kt +++ b/runtime/src/main/kotlin/kotlin/native/internal/NativePtr.kt @@ -52,6 +52,9 @@ internal class NativePtrArray { @SymbolName("Kotlin_NativePtrArray_set") external public operator fun set(index: Int, value: NativePtr): Unit + val size: Int + get() = getArrayLength() + @SymbolName("Kotlin_NativePtrArray_getArrayLength") external private fun getArrayLength(): Int }