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) | ||||
|     { | ||||
|         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); | ||||
| } | ||||
| 
 | ||||
|  | @ -668,6 +700,10 @@ static uint8_t CompileStatement(LLVMBuilderRef builder, LLVMValueRef function, N | |||
|             CompileIfStatement(builder, function, statement); | ||||
|             return 0; | ||||
| 
 | ||||
|         case IfElseStatement: | ||||
|             CompileIfElseStatement(builder, function, statement); | ||||
|             return 0; | ||||
| 
 | ||||
|         case Return: | ||||
|             CompileReturn(builder, statement); | ||||
|             return 1; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue