forked from cosmonaut/wraith-lang
				
			some cleanup
							parent
							
								
									26ffaf45d4
								
							
						
					
					
						commit
						c2b4cd4b4a
					
				|  | @ -31,7 +31,7 @@ ADD_FLEX_BISON_DEPENDENCY(Scanner Parser) | ||||||
| include_directories(${CMAKE_CURRENT_BINARY_DIR}) | include_directories(${CMAKE_CURRENT_BINARY_DIR}) | ||||||
| 
 | 
 | ||||||
| add_executable( | add_executable( | ||||||
|     wraith_compile |     wraith | ||||||
|     ast.c |     ast.c | ||||||
|     stack.c |     stack.c | ||||||
|     ${BISON_Parser_OUTPUTS} |     ${BISON_Parser_OUTPUTS} | ||||||
|  | @ -39,4 +39,8 @@ add_executable( | ||||||
|     compiler.c |     compiler.c | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| target_link_libraries(wraith_compile PUBLIC LLVM) | if(NOT MSVC) | ||||||
|  | 	set_property(TARGET wraith PROPERTY COMPILE_FLAGS "-std=gnu99 -Wall -Wno-strict-aliasing -pedantic") | ||||||
|  | endif() | ||||||
|  | 
 | ||||||
|  | target_link_libraries(wraith PUBLIC LLVM) | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								ast.c
								
								
								
								
							
							
						
						
									
										2
									
								
								ast.c
								
								
								
								
							|  | @ -210,7 +210,6 @@ Node* MakeFunctionSignatureNode( | ||||||
|     Node* typeNode, |     Node* typeNode, | ||||||
|     Node* arguments |     Node* arguments | ||||||
| ) { | ) { | ||||||
|     uint32_t i; |  | ||||||
|     Node* node = (Node*) malloc(sizeof(Node)); |     Node* node = (Node*) malloc(sizeof(Node)); | ||||||
|     node->syntaxKind = FunctionSignature; |     node->syntaxKind = FunctionSignature; | ||||||
|     node->childCount = 3; |     node->childCount = 3; | ||||||
|  | @ -283,7 +282,6 @@ Node* MakeFunctionCallExpressionNode( | ||||||
|     Node *identifierNode, |     Node *identifierNode, | ||||||
|     Node *argumentSequenceNode |     Node *argumentSequenceNode | ||||||
| ) { | ) { | ||||||
|     int32_t i; |  | ||||||
|     Node* node = (Node*) malloc(sizeof(Node)); |     Node* node = (Node*) malloc(sizeof(Node)); | ||||||
|     node->syntaxKind = FunctionCallExpression; |     node->syntaxKind = FunctionCallExpression; | ||||||
|     node->children = (Node**) malloc(sizeof(Node*) * 2); |     node->children = (Node**) malloc(sizeof(Node*) * 2); | ||||||
|  |  | ||||||
							
								
								
									
										45
									
								
								compiler.c
								
								
								
								
							
							
						
						
									
										45
									
								
								compiler.c
								
								
								
								
							|  | @ -30,9 +30,6 @@ typedef struct ScopeFrame | ||||||
| { | { | ||||||
|     LocalVariable *localVariables; |     LocalVariable *localVariables; | ||||||
|     uint32_t localVariableCount; |     uint32_t localVariableCount; | ||||||
| 
 |  | ||||||
|     FunctionArgument *arguments; |  | ||||||
|     uint32_t argumentCount; |  | ||||||
| } ScopeFrame; | } ScopeFrame; | ||||||
| 
 | 
 | ||||||
| typedef struct Scope | typedef struct Scope | ||||||
|  | @ -65,8 +62,6 @@ static Scope* CreateScope() | ||||||
|     Scope *scope = malloc(sizeof(Scope)); |     Scope *scope = malloc(sizeof(Scope)); | ||||||
| 
 | 
 | ||||||
|     scope->scopeStack = malloc(sizeof(ScopeFrame)); |     scope->scopeStack = malloc(sizeof(ScopeFrame)); | ||||||
|     scope->scopeStack[0].argumentCount = 0; |  | ||||||
|     scope->scopeStack[0].arguments = NULL; |  | ||||||
|     scope->scopeStack[0].localVariableCount = 0; |     scope->scopeStack[0].localVariableCount = 0; | ||||||
|     scope->scopeStack[0].localVariables = NULL; |     scope->scopeStack[0].localVariables = NULL; | ||||||
|     scope->scopeStackCount = 1; |     scope->scopeStackCount = 1; | ||||||
|  | @ -78,8 +73,6 @@ static void PushScopeFrame(Scope *scope) | ||||||
| { | { | ||||||
|     uint32_t index = scope->scopeStackCount; |     uint32_t index = scope->scopeStackCount; | ||||||
|     scope->scopeStack = realloc(scope->scopeStack, sizeof(ScopeFrame) * (scope->scopeStackCount + 1)); |     scope->scopeStack = realloc(scope->scopeStack, sizeof(ScopeFrame) * (scope->scopeStackCount + 1)); | ||||||
|     scope->scopeStack[index].argumentCount = 0; |  | ||||||
|     scope->scopeStack[index].arguments = NULL; |  | ||||||
|     scope->scopeStack[index].localVariableCount = 0; |     scope->scopeStack[index].localVariableCount = 0; | ||||||
|     scope->scopeStack[index].localVariables = NULL; |     scope->scopeStack[index].localVariables = NULL; | ||||||
| 
 | 
 | ||||||
|  | @ -91,15 +84,6 @@ static void PopScopeFrame(Scope *scope) | ||||||
|     uint32_t i; |     uint32_t i; | ||||||
|     uint32_t index = scope->scopeStackCount - 1; |     uint32_t index = scope->scopeStackCount - 1; | ||||||
| 
 | 
 | ||||||
|     if (scope->scopeStack[index].arguments != NULL) |  | ||||||
|     { |  | ||||||
|         for (i = 0; i < scope->scopeStack[index].argumentCount; i += 1) |  | ||||||
|         { |  | ||||||
|             free(scope->scopeStack[index].arguments[i].name); |  | ||||||
|         } |  | ||||||
|         free(scope->scopeStack[index].arguments); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if (scope->scopeStack[index].localVariables != NULL) |     if (scope->scopeStack[index].localVariables != NULL) | ||||||
|     { |     { | ||||||
|         for (i = 0; i < scope->scopeStack[index].localVariableCount; i += 1) |         for (i = 0; i < scope->scopeStack[index].localVariableCount; i += 1) | ||||||
|  | @ -126,18 +110,6 @@ static void AddLocalVariable(Scope *scope, LLVMValueRef pointer, char *name) | ||||||
|     scopeFrame->localVariableCount += 1; |     scopeFrame->localVariableCount += 1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void AddFunctionArgument(Scope *scope, LLVMValueRef value, char *name) |  | ||||||
| { |  | ||||||
|     ScopeFrame *scopeFrame = &scope->scopeStack[scope->scopeStackCount - 1]; |  | ||||||
|     uint32_t index = scopeFrame->argumentCount; |  | ||||||
| 
 |  | ||||||
|     scopeFrame->arguments = realloc(scopeFrame->arguments, sizeof(FunctionArgument) * (scopeFrame->argumentCount + 1)); |  | ||||||
|     scopeFrame->arguments[index].name = strdup(name); |  | ||||||
|     scopeFrame->arguments[index].value = value; |  | ||||||
| 
 |  | ||||||
|     scopeFrame->argumentCount += 1; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static LLVMValueRef FindStructFieldPointer(LLVMBuilderRef builder, LLVMValueRef structPointer, char *name) | static LLVMValueRef FindStructFieldPointer(LLVMBuilderRef builder, LLVMValueRef structPointer, char *name) | ||||||
| { | { | ||||||
|     int32_t i, j; |     int32_t i, j; | ||||||
|  | @ -195,14 +167,6 @@ static LLVMValueRef FindVariableValue(LLVMBuilderRef builder, char *name) | ||||||
| 
 | 
 | ||||||
|     for (i = scope->scopeStackCount - 1; i >= 0; i -= 1) |     for (i = scope->scopeStackCount - 1; i >= 0; i -= 1) | ||||||
|     { |     { | ||||||
|         for (j = 0; j < scope->scopeStack[i].argumentCount; j += 1) |  | ||||||
|         { |  | ||||||
|             if (strcmp(scope->scopeStack[i].arguments[j].name, name) == 0) |  | ||||||
|             { |  | ||||||
|                 return scope->scopeStack[i].arguments[j].value; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         for (j = 0; j < scope->scopeStack[i].localVariableCount; j += 1) |         for (j = 0; j < scope->scopeStack[i].localVariableCount; j += 1) | ||||||
|         { |         { | ||||||
|             if (strcmp(scope->scopeStack[i].localVariables[j].name, name) == 0) |             if (strcmp(scope->scopeStack[i].localVariables[j].name, name) == 0) | ||||||
|  | @ -413,8 +377,6 @@ static LLVMValueRef CompileExpression( | ||||||
|     LLVMValueRef function, |     LLVMValueRef function, | ||||||
|     Node *expression |     Node *expression | ||||||
| ) { | ) { | ||||||
|     LLVMValueRef var; |  | ||||||
| 
 |  | ||||||
|     switch (expression->syntaxKind) |     switch (expression->syntaxKind) | ||||||
|     { |     { | ||||||
|         case AccessExpression: |         case AccessExpression: | ||||||
|  | @ -440,7 +402,6 @@ static LLVMValueRef CompileExpression( | ||||||
| /* FIXME: we need a scope structure */ | /* FIXME: we need a scope structure */ | ||||||
| static void CompileReturn(LLVMValueRef wStructValue, LLVMBuilderRef builder, LLVMValueRef function, Node *returnStatemement) | static void CompileReturn(LLVMValueRef wStructValue, LLVMBuilderRef builder, LLVMValueRef function, Node *returnStatemement) | ||||||
| { | { | ||||||
|     uint32_t i, j; |  | ||||||
|     LLVMValueRef expression = CompileExpression(wStructValue, builder, function, returnStatemement->children[0]); |     LLVMValueRef expression = CompileExpression(wStructValue, builder, function, returnStatemement->children[0]); | ||||||
|     LLVMBuildRet(builder, expression); |     LLVMBuildRet(builder, expression); | ||||||
| } | } | ||||||
|  | @ -452,7 +413,6 @@ static void CompileReturnVoid(LLVMBuilderRef builder) | ||||||
| 
 | 
 | ||||||
| static void CompileAssignment(LLVMValueRef wStructValue, LLVMBuilderRef builder, LLVMValueRef function, Node *assignmentStatement) | static void CompileAssignment(LLVMValueRef wStructValue, LLVMBuilderRef builder, LLVMValueRef function, Node *assignmentStatement) | ||||||
| { | { | ||||||
|     LLVMValueRef fieldPointer; |  | ||||||
|     LLVMValueRef result = CompileExpression(wStructValue, builder, function, assignmentStatement->children[1]); |     LLVMValueRef result = CompileExpression(wStructValue, builder, function, assignmentStatement->children[1]); | ||||||
|     LLVMValueRef identifier; |     LLVMValueRef identifier; | ||||||
|     if (assignmentStatement->children[0]->syntaxKind == AccessExpression) |     if (assignmentStatement->children[0]->syntaxKind == AccessExpression) | ||||||
|  | @ -463,6 +423,11 @@ static void CompileAssignment(LLVMValueRef wStructValue, LLVMBuilderRef builder, | ||||||
|     { |     { | ||||||
|         identifier = FindVariablePointer(assignmentStatement->children[0]->value.string); |         identifier = FindVariablePointer(assignmentStatement->children[0]->value.string); | ||||||
|     } |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         printf("Identifier not found!"); | ||||||
|  |         return; | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     LLVMBuildStore(builder, result, identifier); |     LLVMBuildStore(builder, result, identifier); | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue