Compound arrays

This commit is contained in:
Krzosa Karol
2022-06-11 09:54:35 +02:00
parent bcddf7f721
commit b76b9c605a
8 changed files with 236 additions and 156 deletions

View File

@@ -28,7 +28,7 @@ gen_line(Ast *node){
// 4 Add type name on the left side
function void
gen_simple_decl_prefix(Ast_Resolved_Type *ast){
gen_simple_decl_prefix(Ast_Type *ast){
switch(ast->kind){
case TYPE_POINTER: gen_simple_decl_prefix(ast->base); gen("*"); break;
case TYPE_ARRAY: gen_simple_decl_prefix(ast->base); break;
@@ -46,7 +46,7 @@ gen_simple_decl_prefix(Ast_Resolved_Type *ast){
}
function void
gen_simple_decl_postfix(Ast_Resolved_Type *ast){
gen_simple_decl_postfix(Ast_Type *ast){
switch(ast->kind){
case TYPE_POINTER: gen_simple_decl_postfix(ast->base); break;
case TYPE_ARRAY:
@@ -62,7 +62,7 @@ gen_simple_decl_postfix(Ast_Resolved_Type *ast){
}
function void
gen_simple_decl(Ast_Resolved_Type *ast, Intern_String name){
gen_simple_decl(Ast_Type *ast, Intern_String name = {}){
if(ast->kind == TYPE_LAMBDA) {
gen_simple_decl_prefix(ast->func.ret);
gen("(*%s)(", name.str);
@@ -117,7 +117,7 @@ enum {
};
function void
gen_var(Intern_String name, Ast_Resolved_Type *type, Ast_Expr *expr, B32 emit_value){
gen_var(Intern_String name, Ast_Type *type, Ast_Expr *expr, B32 emit_value){
gen_simple_decl(type, name);
if(emit_value == DONT_EMIT_VALUE){
@@ -211,7 +211,7 @@ gen_expr(Ast_Expr *ast){
CASE(CAST, Cast){
gen("(");
gen("(");
gen_simple_decl(node->after_type, {});
gen_simple_decl(node->after_type);
gen(")");
gen_expr(node->expr);
gen(")");
@@ -234,6 +234,19 @@ gen_expr(Ast_Expr *ast){
BREAK();
}
CASE(COMPOUND, Call){
gen("(");
gen_simple_decl(node->type);
gen(")");
gen("{");
For(node->exprs){
gen_expr(it->item);
if(!node->exprs.is_last(&it)) gen(", ");
}
gen("}");
BREAK();
}
invalid_default_case;
}
}