Propagating constants in operator overloads

This commit is contained in:
Krzosa Karol
2023-02-09 16:11:16 +01:00
parent 0029e0688b
commit 5e8b3739af
2 changed files with 23 additions and 11 deletions

View File

@@ -539,21 +539,22 @@ gen_ast(Ast *ast){
Arena *scratch = pctx->scratch;
Scratch_Scope _scope(scratch);
Intern_String var_name = pctx->intern(unique_name_scratch(scratch, node));
gen_simple_decl(node->resolved_type, var_name);
gen(";");
gen("return (");
gen_simple_decl(node->resolved_type);
gen("){");
int i = 0;
global_indent++;
For(node->expr){
genln("%QMemoryCopy(&%Q.m%d, ", pctx->symbol_prefix, var_name, i);
if(!is_array(it->resolved_type)) gen("&");
gen("(");
gen_line(it);
genln("");
gen_expr(it);
gen(")");
gen(", sizeof(%Q.m%d));", var_name, i++);
if (!node->expr.is_last(&it)) {
gen(",");
}
}
genln("return %Q;", var_name);
global_indent--;
genln("");
gen("};");
return;
}