Work on order independent structs + cleanup

This commit is contained in:
Krzosa Karol
2022-05-29 20:32:04 +02:00
parent ea1b74cda0
commit b6ea62fd67
6 changed files with 96 additions and 82 deletions

View File

@@ -28,6 +28,10 @@ gen_simple_decl_prefix(Ast_Resolved_Type *ast){
case TYPE_Pointer:{gen_simple_decl_prefix(ast->base); gen("*");} break;
case TYPE_Array: gen_simple_decl_prefix(ast->base); break;
case TYPE_Lambda:break;
case TYPE_Struct: {
auto name = ast->sym->name;
gen("%s ", name.str);
}break;
invalid_default_case;
}
}
@@ -43,6 +47,7 @@ gen_simple_decl_postfix(Ast_Resolved_Type *ast){
case TYPE_Pointer: gen_simple_decl_postfix(ast->base); break;
case TYPE_Array: gen("[%d]", (int)ast->arr.size); gen_simple_decl_postfix(ast->arr.base); break;
case TYPE_Lambda:break;
case TYPE_Struct:break;
invalid_default_case;
}
}
@@ -279,15 +284,20 @@ gen_ast(Ast *ast){
}
else if(sym->type == type_type){
if(sym->type_val->kind == TYPE_Struct){
Ast_Struct *agg = (Ast_Struct *)node->value;
gen("struct %s{", node->name.str);
global_indent++;
For(agg->members){
genln("");
gen_ast(it[0]);
Ast_Struct *agg = const_get_struct(sym->type_val->sym->ast);
if(node->value->kind == AST_STRUCT){
gen("struct %s{", node->name.str);
global_indent++;
For(agg->members){
genln("");
gen_ast(it[0]);
}
global_indent--;
genln("};");
}
else{
// type alias
}
global_indent--;
genln("};");
}
else{
gen("// typedef ");