From ec94f878487d12004f6aa51961ef53b160622932 Mon Sep 17 00:00:00 2001 From: Alexey Stepanov Date: Tue, 12 Jul 2016 19:09:43 +0300 Subject: [PATCH] translator: Add support variables reassignment --- .../org/kotlinnative/translator/llvm/LLVMBuilder.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt index 22fb5403ce2..c0b7b621252 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt @@ -25,7 +25,7 @@ class LLVMBuilder { llvmCode.appendln("}") } - fun receiveNativeValue(firstOp: LLVMSingleValue) = when (firstOp) { + fun receiveNativeValue(firstOp: LLVMSingleValue) : LLVMSingleValue = when (firstOp) { is LLVMConstant -> firstOp is LLVMVariable -> when (firstOp.pointer) { false -> firstOp @@ -41,7 +41,11 @@ class LLVMBuilder { KtTokens.PLUS -> firstOp.type!!.operatorPlus(resultOp, firstNativeOp, secondNativeOp) KtTokens.MINUS -> firstOp.type!!.operatorMinus(resultOp, firstNativeOp, secondNativeOp) KtTokens.MUL -> firstOp.type!!.operatorTimes(resultOp, firstNativeOp, secondNativeOp) - KtTokens.EQ -> return resultOp + KtTokens.EQ -> { + val result = firstOp as LLVMVariable + storeVariable(result, secondNativeOp) + return result + } else -> throw UnsupportedOperationException("Unknown binary operator") } @@ -71,7 +75,7 @@ class LLVMBuilder { llvmCode.appendln(code) } - fun storeVariable(target: LLVMVariable, source: LLVMVariable) { + fun storeVariable(target: LLVMVariable, source: LLVMSingleValue) { val code = "store ${source.type} $source, ${target.getType()} $target, align ${source.type?.align!!}" llvmCode.appendln(code) }