[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) { _, _ ->
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
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"
}