From d5193f66be490e7fb7e4b056fa8c1858d64a1d24 Mon Sep 17 00:00:00 2001 From: servostar Date: Sat, 8 Jun 2024 23:26:40 +0200 Subject: [PATCH] fixed: wrong struct cast --- src/compiler.c | 5 +---- src/llvm/llvm-ir/types.c | 16 +++++++++++++--- src/set/set.c | 24 ++++++++++++------------ 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/compiler.c b/src/compiler.c index 945711b..7f51cae 100644 --- a/src/compiler.c +++ b/src/compiler.c @@ -179,10 +179,7 @@ static void build_target(ModuleFileStack *unit, const TargetConfig *target) { if (setup_target_environment(target) == 0) { print_ast_to_file(ast, target); - Module* test = create_set(ast); - - // TODO: parse AST to semantic values - Module* module = NULL; + Module* module = create_set(ast); run_backend_codegen(module, target); } diff --git a/src/llvm/llvm-ir/types.c b/src/llvm/llvm-ir/types.c index 9b241c4..2b8a994 100644 --- a/src/llvm/llvm-ir/types.c +++ b/src/llvm/llvm-ir/types.c @@ -198,7 +198,7 @@ BackendError get_type_impl(LLVMBackendCompileUnit* unit, LLVMGlobalScope* scope, break; case TypeKindBox: err = - impl_box_type(unit, scope, &gemstone_type->impl.box, llvm_type); + impl_box_type(unit, scope, gemstone_type->impl.box, llvm_type); break; default: PANIC("invalid type kind: %ld", gemstone_type->kind); @@ -279,6 +279,16 @@ BackendError impl_type(LLVMBackendCompileUnit* unit, Type* gemstone_type, return err; } +BackendError impl_type_define(LLVMBackendCompileUnit* unit, Typedefine* gemstone_type, + const char* alias, LLVMGlobalScope* scope) { + BackendError err = SUCCESS; + DEBUG("implementing type of kind: %ld as %s", gemstone_type->type->kind, alias); + + err = impl_type(unit, gemstone_type->type, alias, scope); + + return err; +} + BackendError impl_types(LLVMBackendCompileUnit* unit, LLVMGlobalScope* scope, GHashTable* types) { DEBUG("implementing given types of %p", types); @@ -291,7 +301,7 @@ BackendError impl_types(LLVMBackendCompileUnit* unit, LLVMGlobalScope* scope, BackendError err; while (g_hash_table_iter_next(&iterator, &key, &val) != FALSE) { - err = impl_type(unit, (Type*)val, (const char*)key, scope); + err = impl_type_define(unit, (Typedefine*) val, (const char*)key, scope); if (err.kind != Success) { break; @@ -417,7 +427,7 @@ BackendError get_type_default_value(LLVMBackendCompileUnit* unit, err = get_reference_default_value(llvm_type, llvm_value); break; case TypeKindBox: - err = get_box_default_value(unit, scope, &gemstone_type->impl.box, + err = get_box_default_value(unit, scope, gemstone_type->impl.box, llvm_type, llvm_value); break; default: diff --git a/src/set/set.c b/src/set/set.c index 81f82da..6a543c1 100644 --- a/src/set/set.c +++ b/src/set/set.c @@ -150,7 +150,7 @@ int get_type_decl(const char *name, Type **type) { return SEMANTIC_ERROR; } -int impl_composite_type(AST_NODE_PTR ast_type, CompositeType *composite) { +int set_impl_composite_type(AST_NODE_PTR ast_type, CompositeType *composite) { assert(ast_type != NULL); assert(composite != NULL); @@ -229,7 +229,7 @@ int impl_composite_type(AST_NODE_PTR ast_type, CompositeType *composite) { * @param type pointer output for the type * @return the gemstone type implementation */ -int get_type_impl(AST_NODE_PTR currentNode, Type **type) { +int set_get_type_impl(AST_NODE_PTR currentNode, Type **type) { assert(currentNode != NULL); assert(currentNode->kind == AST_Type); assert(currentNode->child_count > 0); @@ -278,7 +278,7 @@ int get_type_impl(AST_NODE_PTR currentNode, Type **type) { new_type->kind = TypeKindComposite; new_type->impl.composite.nodePtr = currentNode; - status = impl_composite_type(currentNode, &new_type->impl.composite); + status = set_impl_composite_type(currentNode, &new_type->impl.composite); *type = new_type; return status; @@ -312,7 +312,7 @@ int createRef(AST_NODE_PTR currentNode, Type** reftype) { referenceType->nodePtr = currentNode; - int signal = get_type_impl(currentNode->children[0],&type); + int signal = set_get_type_impl(currentNode->children[0], &type); if(signal) { //TODO free type return SEMANTIC_ERROR; @@ -346,7 +346,7 @@ int createDecl(AST_NODE_PTR currentNode, GArray **variables) { break; case AST_Type: DEBUG("fill Type"); - status = get_type_impl(AST_get_node(currentNode,i), &decl.type); + status = set_get_type_impl(AST_get_node(currentNode, i), &decl.type); break; case AST_IdentList: break; @@ -409,7 +409,7 @@ int createDef(AST_NODE_PTR currentNode, GArray **variables) { break; case AST_Type: DEBUG("fill Type"); - status = get_type_impl(declaration->children[i], &decl.type); + status = set_get_type_impl(declaration->children[i], &decl.type); break; case AST_IdentList: break; @@ -1114,7 +1114,7 @@ int createTypeCast(Expression* ParentExpression, AST_NODE_PTR currentNode){ } Type *target = mem_alloc(MemoryNamespaceSet, sizeof(Type)); - int status = get_type_impl(currentNode->children[1], &target); + int status = set_get_type_impl(currentNode->children[1], &target); if (status) { print_diagnostic(current_file, ¤tNode->children[1]->location, Error, "Unknown type"); return SEMANTIC_ERROR; @@ -1133,7 +1133,7 @@ int createTransmute(Expression* ParentExpression, AST_NODE_PTR currentNode){ } Type* target = mem_alloc(MemoryNamespaceSet,sizeof(Type)); - int status = get_type_impl(currentNode->children[1], &target); + int status = set_get_type_impl(currentNode->children[1], &target); if (status){ print_diagnostic(current_file, ¤tNode->children[1]->location, Error, "Unknown type"); return SEMANTIC_ERROR; @@ -1652,7 +1652,7 @@ int createParam(GArray * Paramlist ,AST_NODE_PTR currentNode){ PANIC("IO_Qualifier has not the right amount of children"); } - int signal = get_type_impl(paramdecl->children[0], &(decl.type)); + int signal = set_get_type_impl(paramdecl->children[0], &(decl.type)); if(signal){ return SEMANTIC_ERROR; } @@ -1803,7 +1803,7 @@ int createFunction(GHashTable* functions, AST_NODE_PTR currentNode){ int createDeclMember(BoxType * ParentBox, AST_NODE_PTR currentNode){ Type * declType = mem_alloc(MemoryNamespaceSet,sizeof(Type)); - int status = get_type_impl(currentNode->children[0],&declType); + int status = set_get_type_impl(currentNode->children[0], &declType); if(status){ return SEMANTIC_ERROR; } @@ -1830,7 +1830,7 @@ int createDefMember(BoxType *ParentBox, AST_NODE_PTR currentNode){ AST_NODE_PTR nameList = declNode->children[1]; Type * declType = mem_alloc(MemoryNamespaceSet,sizeof(Type)); - int status = get_type_impl(currentNode->children[0],&declType); + int status = set_get_type_impl(currentNode->children[0], &declType); if(status){ return SEMANTIC_ERROR; } @@ -1916,7 +1916,7 @@ int createTypeDef(GHashTable *types, AST_NODE_PTR currentNode){ Type * type = mem_alloc(MemoryNamespaceSet,sizeof(Type)); - int status = get_type_impl( typeNode, &type); + int status = set_get_type_impl(typeNode, &type); if(status){ return SEMANTIC_ERROR; }