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