[JS IR] Implement shared box intrinsics translator

This commit is contained in:
Roman Artemev
2020-06-18 13:56:40 +03:00
committed by romanart
parent 4c878c27a9
commit 596c3d1af8
2 changed files with 19 additions and 1 deletions
@@ -218,6 +218,23 @@ class JsIntrinsicTransformers(backendContext: JsIrBackendContext) {
add(intrinsics.unreachable) { _, _ -> add(intrinsics.unreachable) { _, _ ->
JsInvocation(JsNameRef(Namer.UNREACHABLE_NAME)) 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)
}
} }
} }
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.ir.backend.js.utils package org.jetbrains.kotlin.ir.backend.js.utils
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.js.backend.ast.JsNameRef import org.jetbrains.kotlin.js.backend.ast.JsNameRef
object Namer { object Namer {
@@ -43,4 +42,6 @@ object Namer {
val KPROPERTY_SET = "set" val KPROPERTY_SET = "set"
val KCALLABLE_CACHE_SUFFIX = "\$cache" val KCALLABLE_CACHE_SUFFIX = "\$cache"
const val KCALLABLE_ARITY = "\$arity" const val KCALLABLE_ARITY = "\$arity"
const val SHARED_BOX_V = "_v"
} }