diff --git a/kotlin-result-coroutines/src/commonMain/kotlin/com/github/michaelbull/result/coroutines/binding/SuspendableBinding.kt b/kotlin-result-coroutines/src/commonMain/kotlin/com/github/michaelbull/result/coroutines/binding/SuspendableBinding.kt index 88c0a9e..eab3158 100644 --- a/kotlin-result-coroutines/src/commonMain/kotlin/com/github/michaelbull/result/coroutines/binding/SuspendableBinding.kt +++ b/kotlin-result-coroutines/src/commonMain/kotlin/com/github/michaelbull/result/coroutines/binding/SuspendableBinding.kt @@ -36,7 +36,7 @@ public suspend inline fun binding(crossinline block: suspend SuspendableR } } } catch (ex: BindCancellationException) { - receiver.result + receiver.result!! } } @@ -52,13 +52,13 @@ internal class SuspendableResultBindingImpl( ) : SuspendableResultBinding, CoroutineScope by delegate { private val mutex = Mutex() - lateinit var result: Err + var result: Result? = null override suspend fun Result.bind(): V { return when (this) { is Ok -> value is Err -> mutex.withLock { - if (::result.isInitialized.not()) { + if (result == null) { result = this coroutineContext.cancel(BindCancellationException) } diff --git a/kotlin-result/src/commonMain/kotlin/com/github/michaelbull/result/Binding.kt b/kotlin-result/src/commonMain/kotlin/com/github/michaelbull/result/Binding.kt index 6a5024c..eac1db7 100644 --- a/kotlin-result/src/commonMain/kotlin/com/github/michaelbull/result/Binding.kt +++ b/kotlin-result/src/commonMain/kotlin/com/github/michaelbull/result/Binding.kt @@ -27,12 +27,12 @@ public inline fun binding(crossinline block: ResultBinding.() -> V): R callsInPlace(block, InvocationKind.EXACTLY_ONCE) } - val receiver = ResultBindingImpl() - - return try { - with(receiver) { Ok(block()) } - } catch (ex: BindException) { - receiver.result + return with(ResultBindingImpl()) { + try { + Ok(block()) + } catch (ex: BindException) { + result!! + } } } @@ -45,7 +45,7 @@ public interface ResultBinding { @PublishedApi internal class ResultBindingImpl : ResultBinding { - lateinit var result: Err + var result: Result? = null override fun Result.bind(): V { return when (this) {