translator: add while block, tests

This commit is contained in:
e5l
2016-08-16 12:34:16 +03:00
parent c39bc80393
commit 3c22d0946b
3 changed files with 17 additions and 2 deletions
@@ -856,7 +856,10 @@ abstract class BlockCodegen(val state: TranslationState, val variableManager: Va
successExpression = codeBuilder.loadAndGetVariable(successExpression)
}
codeBuilder.storeVariable(resultVariable, successExpression ?: return)
if (successExpression != null) {
codeBuilder.storeVariable(resultVariable, successExpression)
}
codeBuilder.addUnconditionalJump(endLabel)
codeBuilder.addComment("end last condition item")
}
@@ -870,7 +873,7 @@ abstract class BlockCodegen(val state: TranslationState, val variableManager: Va
val targetExpression = evaluateExpression(whenExpression, scopeDepth + 1)!!
val resultVariable = codeBuilder.getNewVariable(expressionType, pointer = 1)
if (expressionType !is LLVMVoidType) {
if (expressionType !is LLVMVoidType && expressionType !is LLVMNullType) {
codeBuilder.allocStackPointedVarAsValue(resultVariable)
}
@@ -0,0 +1,3 @@
when_block_test1_Int(0) == 1
when_block_test1_Int(1) == 0
when_block_test1_Int(2) == 0
@@ -0,0 +1,9 @@
fun when_block_test1(i: Int): Boolean {
when (i) {
0 -> return true
1 -> return false
}
return false
}