| /* |
| * Copyright 2016-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. |
| */ |
| |
| package kotlinx.coroutines |
| |
| import kotlin.coroutines.* |
| |
| public actual object Dispatchers { |
| public actual val Default: CoroutineDispatcher = createDefaultDispatcher() |
| public actual val Main: MainCoroutineDispatcher = JsMainDispatcher(Default, false) |
| public actual val Unconfined: CoroutineDispatcher = kotlinx.coroutines.Unconfined |
| } |
| |
| private class JsMainDispatcher( |
| val delegate: CoroutineDispatcher, |
| private val invokeImmediately: Boolean |
| ) : MainCoroutineDispatcher() { |
| override val immediate: MainCoroutineDispatcher = |
| if (invokeImmediately) this else JsMainDispatcher(delegate, true) |
| override fun isDispatchNeeded(context: CoroutineContext): Boolean = !invokeImmediately |
| override fun dispatch(context: CoroutineContext, block: Runnable) = delegate.dispatch(context, block) |
| override fun dispatchYield(context: CoroutineContext, block: Runnable) = delegate.dispatchYield(context, block) |
| override fun toString(): String = toStringInternalImpl() ?: delegate.toString() |
| } |