diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsIntrinsicTransformers.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsIntrinsicTransformers.kt index 87accd6cb8e..cea27d32e76 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsIntrinsicTransformers.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsIntrinsicTransformers.kt @@ -218,6 +218,23 @@ class JsIntrinsicTransformers(backendContext: JsIrBackendContext) { add(intrinsics.unreachable) { _, _ -> JsInvocation(JsNameRef(Namer.UNREACHABLE_NAME)) } + + add(intrinsics.createSharedBox) { call, context: JsGenerationContext -> + val arg = translateCallArguments(call, context).single() + JsObjectLiteral(listOf(JsPropertyInitializer(JsNameRef(Namer.SHARED_BOX_V), arg))) + } + + add(intrinsics.readSharedBox) { call, context: JsGenerationContext -> + val box = translateCallArguments(call, context).single() + JsNameRef(Namer.SHARED_BOX_V, box) + } + + add(intrinsics.writeSharedBox) { call, context: JsGenerationContext -> + val args = translateCallArguments(call, context) + val box = args[0] + val value = args[1] + jsAssignment(JsNameRef(Namer.SHARED_BOX_V, box), value) + } } } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/Namer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/Namer.kt index bf714b731f3..576287bfd48 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/Namer.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/Namer.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.ir.backend.js.utils -import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.js.backend.ast.JsNameRef object Namer { @@ -43,4 +42,6 @@ object Namer { val KPROPERTY_SET = "set" val KCALLABLE_CACHE_SUFFIX = "\$cache" const val KCALLABLE_ARITY = "\$arity" + + const val SHARED_BOX_V = "_v" } \ No newline at end of file