CODEGEN: Possibility to create string literal from String implemented (refactoring)
This commit is contained in:
committed by
vvlevchenko
parent
4706ec9ddd
commit
bca03288f6
+4
-1
@@ -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) }
|
||||
}
|
||||
|
||||
+6
-4
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user