translator: fix reassigment, add tests

This commit is contained in:
Alexey Stepanov
2016-07-15 17:48:27 +03:00
parent 99354acbf3
commit 260bb64d8f
5 changed files with 19 additions and 3 deletions
@@ -134,9 +134,12 @@ class LLVMBuilder(val arm: Boolean) {
}
fun copyVariableValue(target: LLVMVariable, source: LLVMVariable) {
val tmp = getNewVariable(source.type, source.pointer)
llvmLocalCode.appendln("$tmp = load ${source.getType()} $source, align ${tmp.type.align}")
llvmLocalCode.appendln("store ${target.type} $tmp, ${target.getType()} $target, align ${tmp.type.align}")
var from = source
if (source.pointer > 0) {
from = getNewVariable(source.type, source.pointer)
llvmLocalCode.appendln("$from = load ${source.getType()} $source, align ${from.type.align}")
}
llvmLocalCode.appendln("store ${target.type} $from, ${target.getType()} $target, align ${from.type.align}")
}
fun loadArgument(llvmVariable: LLVMVariable, store: Boolean = true): LLVMVariable {
@@ -0,0 +1 @@
reassigment_0(5) == 6
@@ -0,0 +1 @@
reassigment_1(5) == 7
@@ -0,0 +1,4 @@
fun reassigment_0(x: Int): Int {
var b = x + 1
return b
}
@@ -0,0 +1,7 @@
fun reassigment_1(x: Int): Int {
var a = x
a = a + 1
var b = a + 1
b = b + 1
return b
}