Fixing generated names when namespaced Windows :: #import calls and field accesses

This commit is contained in:
Krzosa Karol
2022-06-13 21:11:39 +02:00
2 changed files with 16 additions and 13 deletions

10
base.kl
View File

@@ -1,4 +1,4 @@
#import "Windows.kl" Windows :: #import "Windows.kl"
SizeU :: #strict U64 SizeU :: #strict U64
OS_PAGE_SIZE :: 4096 OS_PAGE_SIZE :: 4096
@@ -26,10 +26,10 @@ align_up :: (size: SizeU, align: SizeU): SizeU
reserve :: (size: SizeU): OS_Memory reserve :: (size: SizeU): OS_Memory
result := OS_Memory{reserve=align_up(size, OS_PAGE_SIZE)} result := OS_Memory{reserve=align_up(size, OS_PAGE_SIZE)}
result.data = VirtualAlloc( result.data = Windows.VirtualAlloc(
flProtect = PAGE_READWRITE, flProtect = Windows.PAGE_READWRITE,
dwSize = result.reserve, dwSize = result.reserve,
flAllocationType = MEM_RESERVE, flAllocationType = Windows.MEM_RESERVE,
lpAddress = 0, lpAddress = 0,
)->*U8 )->*U8
return result return result
@@ -45,7 +45,7 @@ commit :: (m: *OS_Memory, size: SizeU): Bool
clamped_commit := clamp_top_sizeu(total_commit, m.reserve) clamped_commit := clamp_top_sizeu(total_commit, m.reserve)
adjusted_commit := clamped_commit - m.commit adjusted_commit := clamped_commit - m.commit
if adjusted_commit != 0 if adjusted_commit != 0
result := VirtualFree(m.data->*void, 0, MEM_RELEASE) result := Windows.VirtualFree(m.data->*void, 0, Windows.MEM_RELEASE)
m.commit += adjusted_commit m.commit += adjusted_commit
return true return true
return false return false

View File

@@ -5,7 +5,7 @@ global S32 global_indent;
global S32 is_inside_struct; global S32 is_inside_struct;
function void gen_ast(Ast *ast); function void gen_ast(Ast *ast);
function void gen_expr(Ast_Expr *ast); function bool gen_expr(Ast_Expr *ast);
function void function void
gen_indent(){ gen_indent(){
@@ -170,10 +170,12 @@ gen_lambda(Intern_String name, Ast_Lambda *lambda){
else gen(";"); else gen(";");
} }
function void function bool
gen_expr(Ast_Expr *ast){ gen_expr(Ast_Expr *ast){
switch(ast->kind){ switch(ast->kind){
CASE(IDENT, Atom){ CASE(IDENT, Atom){
if(node->resolved_decl->kind == AST_MODULE_NAMESPACE || node->resolved_decl->kind == AST_FILE_NAMESPACE)
return false;
B32 print_scope = true; B32 print_scope = true;
if(node->resolved_decl->lambda){ if(node->resolved_decl->lambda){
if(is_flag_set(node->resolved_decl->lambda->flags, AST_FOREIGN)) if(is_flag_set(node->resolved_decl->lambda->flags, AST_FOREIGN))
@@ -210,12 +212,12 @@ gen_expr(Ast_Expr *ast){
CASE(BINARY, Binary){ CASE(BINARY, Binary){
if(node->op == TK_Dot){ if(node->op == TK_Dot){
gen_expr(node->left); if(gen_expr(node->left)){
if(!node->type) gen("__"); if(node->type && node->type->kind == TYPE_POINTER) gen("->");
else if(node->type->kind == TYPE_POINTER) gen("->"); else gen(".");
else gen("."); }
gen_expr(node->right); gen_expr(node->right);
return; return true;
} }
else if(node->op == TK_Arrow){ else if(node->op == TK_Arrow){
gen("("); gen("(");
@@ -224,7 +226,7 @@ gen_expr(Ast_Expr *ast){
gen(")"); gen(")");
gen_expr(node->left); gen_expr(node->left);
gen(")"); gen(")");
return; return true;
} }
if(!token_is_assign(node->op)) gen("("); if(!token_is_assign(node->op)) gen("(");
@@ -276,6 +278,7 @@ gen_expr(Ast_Expr *ast){
invalid_default_case; invalid_default_case;
} }
return true;
} }
function void function void