Compiling again, with double import, main and everything

This commit is contained in:
Krzosa Karol
2022-06-13 21:28:31 +02:00
parent 8260f2cc9a
commit e73820c6f5
4 changed files with 80 additions and 109 deletions

View File

@@ -50,5 +50,3 @@ commit :: (m: *OS_Memory, size: SizeU): Bool
return true
return false
entry :: ()
memory := reserve(size = 10000)

View File

@@ -156,6 +156,9 @@ gen_var(Ast_Decl *decl, B32 emit_value, B32 scope_names){
function void
gen_lambda(Intern_String name, Ast_Lambda *lambda){
bool is_foreign = is_flag_set(lambda->flags, AST_FOREIGN);
if(name == pctx->intern("main"_s)){
is_foreign = true;
}
gen_simple_decl(lambda->type->func.ret, name, lambda->parent_scope, !is_foreign);
gen("(");
For(lambda->args){
@@ -568,7 +571,7 @@ function String
end_compilation(){
generating_time_begin = os_time();
#if 0
#if 1
gen(R"==(
#include <stdint.h>
#include <stdio.h>
@@ -604,10 +607,6 @@ typedef struct String{
}String;
#define LIT(x) (String){.str=(U8 *)x, .len=sizeof(x)-1}
void entry();
int main(){
entry();
}
)==");
#endif

View File

@@ -154,7 +154,6 @@ int main(int argument_count, char **arguments){
#if 0
emit_line_directives = true;
if(argument_count > 1){
Scratch scratch;
String name = string_fmt(scratch, "%s.kl", arguments[1]);
@@ -165,10 +164,10 @@ int main(int argument_count, char **arguments){
Array<String> files = {scratch};
files.add(name);
String result = compile_files(files);
FILE *f = fopen((const char *)c_filename.str, "w");
assert(f);
fprintf(f, "%.*s", (int)result.len, result.str);
fclose(f);
F64 begin = os_time();
system((const char *)compiler_call.str);
printf("\nCompile time: %f", os_time() - begin);
@@ -176,14 +175,15 @@ int main(int argument_count, char **arguments){
system((const char *)run_program.str);
}
#else
emit_line_directives = false;
F64 total_time = os_time();
begin_compilation();
Ast_Module *module = add_module(pctx->intern("base.kl"_s));
Ast_Module *module = add_module(pctx->intern("main.kl"_s));
parse_all_modules();
assert(module);
resolve_everything_in_module(module);
String result = end_compilation();
printf("%s", result.str);
assert(os_write_file("program.c"_s, result));
printf("\nTotal time = %f", os_time() - total_time);
printf("\nTotal parsing = %f", parsing_time_end - parsing_time_begin);
printf("\nTotal resolving = %f", resolving_time_end - resolving_time_begin);

View File

@@ -33,24 +33,14 @@ typedef struct String{
}String;
#define LIT(x) (String){.str=(U8 *)x, .len=sizeof(x)-1}
void entry();
int main(){
entry();
}
// Type SizeU = base_
// constant int OS_PAGE_SIZE = 4096
typedef struct base_OS_Memory{
U64 base_commit;
U64 base_reserve;
U8 *base_data;
typedef struct base_Arena{
base_OS_Memory base_memory;
U64 base_alignment;
U64 base_len;
}base_Arena;
}base_OS_Memory;
U64 base_get_align_offset(U64 base_size, U64 base_align){
U64 base_mask = (base_align-1);
@@ -63,9 +53,11 @@ U64 base_align_up(U64 base_size, U64 base_align){
U64 base_align_up(U64 base_size, U64 base_align){
U64 base_result = (base_size+base_get_align_offset(base_size, base_align));
return base_result;
// Type LPVOID = (*Windows_▬)
}
// constant int OS_PAGE_SIZE = 4096
// Type LPVOID = (*Windows_)
// Type DWORD = Windows_
// Type SIZE_T = Windows_
// Type DWORD = Windows_
/*foreign*/void *VirtualAlloc(void *Windows_lpAddress, U64 Windows_dwSize, U32 Windows_flAllocationType, U32 Windows_flProtect);
@@ -74,24 +66,6 @@ base_OS_Memory base_reserve(U64 base_size){
base_OS_Memory base_reserve(U64 base_size){
base_OS_Memory base_result = (base_OS_Memory ){base_align_up(base_size, 4096)};
base_result.base_data=((U8 *)VirtualAlloc(0, base_result.base_reserve, 2, 4));
U64 base_clamp_top_sizeu(U64 base_val, U64 base_max){
if((base_val>base_max)){
return base_max;
}
return base_val;
}
// Type BOOL = Windows_♂
/*foreign*/int VirtualFree(void *Windows_lpAddress, U64 Windows_dwSize, U32 Windows_dwFreeType);
// constant int MEM_RELEASE = 6
Bool base_commit(base_OS_Memory *base_m, U64 base_size){
U64 base_commit_size = base_align_up(base_size, 4096);
U64 base_total_commit = (base_m->base_commit+base_commit_size);
U64 base_clamped_commit = base_clamp_top_sizeu(base_total_commit, base_m->base_reserve);
U64 base_adjusted_commit = (base_clamped_commit-base_m->base_commit);
if((base_adjusted_commit!=0)){
int base_result = VirtualFree(((void *)base_m->base_data), 0, 6);
base_m->base_commit+=base_adjusted_commit;
return true;
}
return false;
return base_result;
}
int main(int main_argc, char **main_argv){