Basic variable reassignments

This commit is contained in:
Krzosa Karol
2022-06-01 12:13:02 +02:00
parent 86aec0b1eb
commit 9b18c106b6
6 changed files with 116 additions and 55 deletions

View File

@@ -108,7 +108,7 @@ gen_expr(Ast_Expr *ast){
else gen(".");
gen_expr(node->right);
}
else if(node->op == TK_Colon){ // @todo: I think this needs to be a stmt
else if(node->op == TK_ColonAssign){ // @todo: I think this needs to be a stmt
Sym *sym = resolved_get(node);
Ast_Atom *atom = (Ast_Atom *)node->left;
assert(is_atom(atom));
@@ -274,6 +274,12 @@ gen_ast(Ast *ast){
BREAK();
}
CASE(BINARY,Binary){
gen_expr(node);
gen(";");
BREAK();
}
CASE(FOR, For){
gen("for(");
if(node->init) gen_expr(node->init);
@@ -391,10 +397,16 @@ compile_string(String filecontent, String filename = "default_name"_s){
ctx.init(scratch, &heap);
pctx = &ctx;
F64 tokenize_begin = os_time();
lex_restream(&ctx, filecontent, filename);
F64 tokenize_end = os_time();
F64 parse_begin = os_time();
Ast_Package *result = parse_file();
sym_insert_builtins();
pctx->resolving_package = result;
F64 parse_end = os_time();
gen(R"==(
//-------------------------------
@@ -403,12 +415,28 @@ compile_string(String filecontent, String filename = "default_name"_s){
//-------------------------------
)==");
F64 resolve_begin = os_time();
resolve_package(result);
// eval_decl(result);
F64 resolve_end = os_time();
F64 codegen_begin = os_time();
gen_ast(result);
F64 codegen_end = os_time();
exp_destroy(&heap);
F64 flattening_begin = os_time();
String string_result = string_flatten(scratch, &pctx->gen);
F64 flattening_end = os_time();
printf("\n//-------------------------------");
printf("\n// Tokenization: %f", tokenize_end - tokenize_begin);
printf("\n// Parsing : %f", parse_end - parse_begin);
printf("\n// Resolving : %f", resolve_end - resolve_begin);
printf("\n// Codegen : %f", codegen_end - codegen_begin);
printf("\n// Flattening : %f", flattening_end - flattening_begin);
printf("\n//-------------------------------");
return string_result;
}