Work on order independent structs + cleanup
This commit is contained in:
26
ccodegen.cpp
26
ccodegen.cpp
@@ -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 ");
|
||||
|
||||
Reference in New Issue
Block a user