translator: Add support variables reassignment
This commit is contained in:
@@ -25,7 +25,7 @@ class LLVMBuilder {
|
|||||||
llvmCode.appendln("}")
|
llvmCode.appendln("}")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun receiveNativeValue(firstOp: LLVMSingleValue) = when (firstOp) {
|
fun receiveNativeValue(firstOp: LLVMSingleValue) : LLVMSingleValue = when (firstOp) {
|
||||||
is LLVMConstant -> firstOp
|
is LLVMConstant -> firstOp
|
||||||
is LLVMVariable -> when (firstOp.pointer) {
|
is LLVMVariable -> when (firstOp.pointer) {
|
||||||
false -> firstOp
|
false -> firstOp
|
||||||
@@ -41,7 +41,11 @@ class LLVMBuilder {
|
|||||||
KtTokens.PLUS -> firstOp.type!!.operatorPlus(resultOp, firstNativeOp, secondNativeOp)
|
KtTokens.PLUS -> firstOp.type!!.operatorPlus(resultOp, firstNativeOp, secondNativeOp)
|
||||||
KtTokens.MINUS -> firstOp.type!!.operatorMinus(resultOp, firstNativeOp, secondNativeOp)
|
KtTokens.MINUS -> firstOp.type!!.operatorMinus(resultOp, firstNativeOp, secondNativeOp)
|
||||||
KtTokens.MUL -> firstOp.type!!.operatorTimes(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")
|
else -> throw UnsupportedOperationException("Unknown binary operator")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,7 +75,7 @@ class LLVMBuilder {
|
|||||||
llvmCode.appendln(code)
|
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!!}"
|
val code = "store ${source.type} $source, ${target.getType()} $target, align ${source.type?.align!!}"
|
||||||
llvmCode.appendln(code)
|
llvmCode.appendln(code)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user