fixed: wrong struct cast
This commit is contained in:
parent
98ecd8a6ae
commit
d5193f66be
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue