Basic variable reassignments
This commit is contained in:
32
ccodegen.cpp
32
ccodegen.cpp
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user