diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/FunctionCodegen.kt b/translator/src/main/kotlin/org/kotlinnative/translator/FunctionCodegen.kt index 10e55030d0c..fface322c0a 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/FunctionCodegen.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/FunctionCodegen.kt @@ -248,7 +248,7 @@ class FunctionCodegen(val state: TranslationState, val function: KtNamedFunction variableManager.addVariable(identifier.text, assignExpression, scopeDepth) } is LLVMConstant -> { - val newVar = LLVMVariable("%${identifier!!.text}.addr", type = LLVMIntType(), kotlinName = identifier.text, pointer = true) + val newVar = variableManager.getVariable(identifier!!.text, type = LLVMIntType(), pointer = true) codeBuilder.addConstant(newVar, assignExpression) variableManager.addVariable(identifier.text, newVar, scopeDepth) } diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/VariableManager.kt b/translator/src/main/kotlin/org/kotlinnative/translator/VariableManager.kt index c37d8e81fd2..2df1ca51551 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/VariableManager.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/VariableManager.kt @@ -1,12 +1,14 @@ package org.kotlinnative.translator import org.kotlinnative.translator.llvm.LLVMVariable +import org.kotlinnative.translator.llvm.types.LLVMType import java.util.* class VariableManager { private var fileVariableCollectionTree = HashMap>>() private var globalVariableCollection = HashMap() + private var variableVersion = HashMap() fun getLLVMvalue(variableName: String): LLVMVariable? { return fileVariableCollectionTree[variableName]?.peek()?.first ?: globalVariableCollection[variableName] @@ -17,9 +19,16 @@ class VariableManager { } fun addVariable(name: String, variable: LLVMVariable, level: Int) { - val stack = fileVariableCollectionTree.getOrDefault(String, Stack>()) + val stack = fileVariableCollectionTree.getOrDefault(name, Stack>()) stack.push(Pair(variable, level)) fileVariableCollectionTree.put(name, stack) } + fun getVariable(name: String, type: LLVMType, pointer: Boolean): LLVMVariable { + val ourVersion = variableVersion.getOrDefault(name, 0) + 1 + variableVersion.put(name, ourVersion) + + return LLVMVariable("%managed.${name}.${ourVersion}", kotlinName = name, type = type, pointer = pointer) + } + } \ No newline at end of file