CODEGEN: Possibility to create string literal from String implemented (refactoring)

This commit is contained in:
Konstantin Anisimov
2016-12-14 15:08:21 +03:00
committed by vvlevchenko
parent 4706ec9ddd
commit bca03288f6
2 changed files with 10 additions and 5 deletions
@@ -122,6 +122,9 @@ internal class StaticData(override val context: Context): ContextUtils {
private val stringLiterals = mutableMapOf<String, ConstPointer>()
fun kotlinStringLiteral(value: String) =
stringLiterals.getOrPut(value) { createKotlinStringLiteral(value) }
fun kotlinStringLiteral(value: IrConst<String>) =
stringLiterals.getOrPut(value.value) { createKotlinStringLiteral(value) }
stringLiterals.getOrPut(value.value) { createKotlinStringLiteral(value) }
}
@@ -41,11 +41,13 @@ private fun StaticData.staticContainerHeader(): Struct {
return Struct(header, padding)
}
internal fun StaticData.createKotlinStringLiteral(value: IrConst<String>): ConstPointer {
val name = "kstr:" + value.value.globalHashBase64
val elements = value.value.toByteArray(Charsets.UTF_8).map { Int8(it) }
internal fun StaticData.createKotlinStringLiteral(value: IrConst<String>) = createKotlinStringLiteral(value.value)
val objRef = createKotlinArray(value.type, elements)
internal fun StaticData.createKotlinStringLiteral(value: String): ConstPointer {
val name = "kstr:" + value.globalHashBase64
val elements = value.toByteArray(Charsets.UTF_8).map(::Int8)
val objRef = createKotlinArray(KonanPlatform.builtIns.stringType, elements)
val res = createAlias(name, objRef)
LLVMSetLinkage(res.llvm, LLVMLinkage.LLVMWeakAnyLinkage)