Compound arrays
This commit is contained in:
23
ccodegen.cpp
23
ccodegen.cpp
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user