Getting rid of globals

This commit is contained in:
Krzosa Karol
2023-01-01 14:17:37 +01:00
parent c238e5ba46
commit 647958b72d
9 changed files with 62 additions and 52 deletions

View File

@@ -16,7 +16,7 @@ global Intern_String last_filename;
global int last_line;
CORE_Static void
gen_line(Ast *node){
if(emit_line_directives){
if(pctx->emit_line_directives){
last_line = node->pos->line+1;
genln("#line %d", last_line);
if(node->pos->file != last_filename){
@@ -28,7 +28,7 @@ gen_line(Ast *node){
CORE_Static void
gen_last_line(){
if(emit_line_directives){
if(pctx->emit_line_directives){
genln("#line %d", last_line);
}
}
@@ -223,7 +223,7 @@ gen_value(Token *pos, Value a){
}break;
case TYPE_STRING:{
int length = 0;
gen("(%QString){(uint8_t *)\"", symbol_prefix);
gen("(%QString){(uint8_t *)\"", pctx->symbol_prefix);
for(int i = 0; i < a.intern_val.len; i++){
if(a.intern_val.str[i] == '\n'){length += 2; gen("\\n");}
else if(a.intern_val.str[i] == '\r'){length += 2; gen("\\r");}
@@ -518,8 +518,8 @@ gen_ast(Ast *ast){
switch(ast->kind){
CASE(RUNTIME_ASSERT, Builtin){
if(node->assert_message.len == 0) gen("%QAssert", symbol_prefix);
else gen("%QAssertMessage", symbol_prefix);
if(node->assert_message.len == 0) gen("%QAssert", pctx->symbol_prefix);
else gen("%QAssertMessage", pctx->symbol_prefix);
gen("(");
gen_expr(node->expr);
if(node->assert_message.len){
@@ -540,7 +540,7 @@ gen_ast(Ast *ast){
int i = 0;
For(node->expr){
genln("%QMemoryCopy(&%Q.m%d, ", symbol_prefix, var_name, i);
genln("%QMemoryCopy(&%Q.m%d, ", pctx->symbol_prefix, var_name, i);
if(!is_array(it->resolved_type)) gen("&");
gen("(");
gen_expr(it);
@@ -619,7 +619,7 @@ gen_ast(Ast *ast){
if(node->is_array_traversal){
gen("for(int64_t _i%d = 0; _i%d < ", node->pos->line, node->pos->line);
if(is_array(node->cond->resolved_type)){
gen("%QBufferSize(", symbol_prefix);
gen("%QBufferSize(", pctx->symbol_prefix);
gen_expr(node->cond);
gen(")");
} else{
@@ -753,7 +753,7 @@ gen_ast(Ast *ast){
int i = 0;
For(node->vars){
gen("%QMemoryCopy((void *)&%Q, (void *)&%Q.m%d, sizeof(%Q));", symbol_prefix, it->name, var_name, i++, it->name);
gen("%QMemoryCopy((void *)&%Q, (void *)&%Q.m%d, sizeof(%Q));", pctx->symbol_prefix, it->name, var_name, i++, it->name);
}
BREAK();
}
@@ -773,8 +773,8 @@ CORE_Static String
compile_to_c_code(){
pctx->generating_time_begin = os_time();
prefixed_string_type = string_fmt(pctx->perm, "%QString", symbol_prefix);
if(single_header_library_mode){
prefixed_string_type = string_fmt(pctx->perm, "%QString", pctx->symbol_prefix);
if(pctx->single_header_library_mode){
gen(R"(
/*
Do this:
@@ -792,10 +792,10 @@ compile_to_c_code(){
You can #define %QAssertMessage(x) to get more comprehensive error info
You can #define %QMemoryCopy(x) to avoid using default memory copy
*/
)", single_header_library_name, single_header_library_name, single_header_library_name,
symbol_prefix, symbol_prefix, symbol_prefix);
genln("#ifndef %Q_LIBRARY_HEADER ", single_header_library_name);
genln("#define %Q_LIBRARY_HEADER ", single_header_library_name);
)", pctx->single_header_library_name, pctx->single_header_library_name, pctx->single_header_library_name,
pctx->symbol_prefix, pctx->symbol_prefix, pctx->symbol_prefix);
genln("#ifndef %Q_LIBRARY_HEADER ", pctx->single_header_library_name);
genln("#define %Q_LIBRARY_HEADER ", pctx->single_header_library_name);
}
gen(R"(
@@ -906,7 +906,7 @@ typedef struct String{
}
if(emit_type_info){
if(pctx->emit_type_info){
// Generate language.core
for(S32 i = 0; i < pctx->base_language_ordered_decl_len; i++){
Ast_Decl *it = get(&pctx->ordered_decls, i);
@@ -959,9 +959,9 @@ typedef struct String{
}
if(single_header_library_mode){
if(pctx->single_header_library_mode){
genln("#endif");
genln("#ifdef %Q_IMPLEMENTATION ", single_header_library_name);
genln("#ifdef %Q_IMPLEMENTATION ", pctx->single_header_library_name);
}
// Generate actual code
@@ -973,7 +973,7 @@ typedef struct String{
}
if(single_header_library_mode){
if(pctx->single_header_library_mode){
genln("#endif");
}