forked from cosmonaut/wraith-lang
add else blocks
parent
7ca87d6b13
commit
708d4de0ae
|
@ -642,9 +642,41 @@ static void CompileIfStatement(LLVMBuilderRef builder, LLVMValueRef function, No
|
||||||
for (i = 0; i < ifStatement->children[1]->childCount; i += 1)
|
for (i = 0; i < ifStatement->children[1]->childCount; i += 1)
|
||||||
{
|
{
|
||||||
CompileStatement(builder, function, ifStatement->children[1]->children[i]);
|
CompileStatement(builder, function, ifStatement->children[1]->children[i]);
|
||||||
LLVMBuildBr(builder, afterCond);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LLVMBuildBr(builder, afterCond);
|
||||||
|
LLVMPositionBuilderAtEnd(builder, afterCond);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CompileIfElseStatement(LLVMBuilderRef builder, LLVMValueRef function, Node *ifElseStatement)
|
||||||
|
{
|
||||||
|
uint32_t i;
|
||||||
|
LLVMValueRef conditional = CompileExpression(builder, ifElseStatement->children[0]->children[0]);
|
||||||
|
|
||||||
|
LLVMBasicBlockRef ifBlock = LLVMAppendBasicBlock(function, "ifBlock");
|
||||||
|
LLVMBasicBlockRef elseBlock = LLVMAppendBasicBlock(function, "elseBlock");
|
||||||
|
LLVMBasicBlockRef afterCond = LLVMAppendBasicBlock(function, "afterCond");
|
||||||
|
|
||||||
|
LLVMBuildCondBr(builder, conditional, ifBlock, elseBlock);
|
||||||
|
|
||||||
|
LLVMPositionBuilderAtEnd(builder, ifBlock);
|
||||||
|
|
||||||
|
for (i = 0; i < ifElseStatement->children[0]->children[1]->childCount; i += 1)
|
||||||
|
{
|
||||||
|
CompileStatement(builder, function, ifElseStatement->children[0]->children[1]->children[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
LLVMBuildBr(builder, afterCond);
|
||||||
|
|
||||||
|
LLVMPositionBuilderAtEnd(builder, elseBlock);
|
||||||
|
|
||||||
|
for (i = 0; i < ifElseStatement->children[1]->childCount; i += 1)
|
||||||
|
{
|
||||||
|
CompileStatement(builder, function, ifElseStatement->children[1]->children[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
LLVMBuildBr(builder, afterCond);
|
||||||
|
|
||||||
LLVMPositionBuilderAtEnd(builder, afterCond);
|
LLVMPositionBuilderAtEnd(builder, afterCond);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -668,6 +700,10 @@ static uint8_t CompileStatement(LLVMBuilderRef builder, LLVMValueRef function, N
|
||||||
CompileIfStatement(builder, function, statement);
|
CompileIfStatement(builder, function, statement);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
case IfElseStatement:
|
||||||
|
CompileIfElseStatement(builder, function, statement);
|
||||||
|
return 0;
|
||||||
|
|
||||||
case Return:
|
case Return:
|
||||||
CompileReturn(builder, statement);
|
CompileReturn(builder, statement);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Reference in New Issue