Squashing file write bugs

This commit is contained in:
Krzosa Karol
2022-06-15 12:11:34 +02:00
parent 69362ba37a
commit 8b470fbf34
7 changed files with 41 additions and 32 deletions

View File

@@ -20,7 +20,7 @@ gen_line(Ast *node){
genln("#line %d", node->pos->line+1);
if(node->pos->file != last_filename){
last_filename = node->pos->file;
gen(" \"%s\"", last_filename.str);
gen(" \"%Q\"", last_filename);
}
}
}
@@ -30,7 +30,7 @@ string_scope_name(Allocator *a, Ast_Scope *scope){
String string = {};
if(!should_gen_scope_name) return string;
if(scope->parent_scope) string = string_scope_name(a, scope->parent_scope);
if(scope->name.str) string_fmt(a, "%Q%s_", string, scope->name.str);
if(scope->name.str) string_fmt(a, "%Q%Q_", string, scope->name);
return string;
}
@@ -157,9 +157,9 @@ gen_value(Value a){
CASE_STRING:
if(is_pointer(a.type)){
assert(a.type == type_pointer_to_char);
gen("\"%s\"", a.intern_val.str);
gen("\"%Q\"", a.intern_val);
} else{
gen("LIT(\"%s\")", a.intern_val.str);
gen("LIT(\"%Q\")", a.intern_val);
}
break;
CASE_BOOL: a.bool_val ? gen("true"):gen("false"); break;
@@ -210,7 +210,7 @@ gen_var(Ast_Decl *decl, B32 emit_value, B32 scope_names){
function void
gen_lambda(Intern_String name, Ast_Lambda *lambda, B32 generate_block = true){
bool is_foreign = is_flag_set(lambda->flags, AST_FOREIGN);
if(name == pctx->intern("main"_s)){
if(name == pctx->intern("main"_s) || name == pctx->intern("WinMain"_s)){
is_foreign = true;
}
gen_simple_decl(lambda->resolved_type->func.ret, name, lambda->parent_scope, !is_foreign);
@@ -242,10 +242,10 @@ gen_expr(Ast_Expr *ast, Ast_Type *type_of_var){
if(type_of_var && is_slice(type_of_var) && is_array(node->resolved_decl->type)){
gen("{%d, ", (int)node->resolved_decl->type->arr.size);
if(print_scope) gen_scope_name(node->resolved_decl->parent_scope);
gen("%s}", node->intern_val.str);
gen("%Q}", node->intern_val);
} else {
if(print_scope) gen_scope_name(node->resolved_decl->parent_scope);
gen("%s", node->intern_val.str);
gen("%Q", node->intern_val);
}
BREAK();
}
@@ -254,7 +254,7 @@ gen_expr(Ast_Expr *ast, Ast_Type *type_of_var){
B32 written = gen_value(node->value);
if(!written) {
gen_scope_name(node->parent_scope);
gen("%s", node->value.intern_val.str);
gen("%Q", node->value.intern_val);
}
BREAK();
}
@@ -346,7 +346,7 @@ gen_expr(Ast_Expr *ast, Ast_Type *type_of_var){
For(node->exprs){
if(is_struct(node->resolved_type))
gen(".%s = ", it->resolved_name.str);
gen(".%Q = ", it->resolved_name);
else if(is_array(node->resolved_type))
gen("[%d] = ", (int)it->resolved_index);
gen_expr(it->item);
@@ -371,7 +371,7 @@ gen_ast(Ast *ast){
gen("(");
gen_expr(node->expr);
if(node->assert_message.len){
gen(", \"%s\"", node->assert_message.str);
gen(", \"%Q\"", node->assert_message);
}
gen(");");
BREAK();
@@ -460,7 +460,7 @@ gen_ast(Ast *ast){
CASE(STRUCT, Decl){
gen("struct ");
gen_scope_name(node->parent_scope);
gen("%s{", node->name.str);
gen("%Q{", node->name);
global_indent++;
is_inside_struct++;
For(node->scope->decls){
@@ -475,17 +475,17 @@ gen_ast(Ast *ast){
}
CASE(TYPE, Decl){
gen("// Type %s = ", node->name.str);
gen("// Type %Q = ", node->name);
gen_simple_decl(node->type_val);
BREAK();
}
CASE(ENUM, Decl){
gen("/*enum %s{", node->name.str);
gen("/*enum %Q{", node->name);
// @todo add typespec
global_indent++;
For(node->scope->decls){
genln("%s", it->name.str);
genln("%Q", it->name);
gen(" = ");
gen_value(it->value);
gen(",");
@@ -498,20 +498,20 @@ gen_ast(Ast *ast){
CASE(CONST, Decl){
switch(node->type->kind){
CASE_FLOAT:{
gen("// F64 %s = ", node->name.str);
gen("// F64 %Q = ", node->name);
gen_value(node->value);
} break;
CASE_INT:{
gen("// constant int %s = ", node->name.str);
gen("// constant int %Q = ", node->name);
gen_value(node->value);
}break;
CASE_STRING:{
assert(is_pointer(node->type) ? node->type == type_pointer_to_char : 1);
gen("// const String %s = ", node->name.str);
gen("// const String %Q = ", node->name);
gen_value(node->value);
}break;
CASE_BOOL:{
gen("// const Bool %s = ", node->name.str);
gen("// const Bool %Q = ", node->name);
gen_value(node->value);
}break;
case TYPE_LAMBDA:{
@@ -710,7 +710,7 @@ typedef struct String{
#endif
For(pctx->ordered_decls){
if(it->kind == AST_STRUCT){
genln("typedef struct %s %s;", it->name.str, it->name.str);
genln("typedef struct %Q %Q;", it->name, it->name);
}
}
@@ -719,8 +719,8 @@ typedef struct String{
gen_ast(it);
}
exp_destroy(pctx->heap);
String string_result = string_flatten(pctx->perm, &pctx->gen);
exp_destroy(pctx->heap);
generating_time_end = os_time();
return string_result;
}