Add if statements

This commit is contained in:
Krzosa Karol
2022-05-26 18:13:37 +02:00
parent 3cd79040bc
commit 3d9a38494c
7 changed files with 134 additions and 15 deletions

View File

@@ -161,6 +161,20 @@ gen_expr(Ast_Expr *ast){
}
}
function void
gen_ast(Ast *ast);
function void
gen_block(Ast_Block *block){
gen("{");
global_indent++;
For(block->stmts) {
genln("");
gen_ast(it[0]);
}
global_indent--;
genln("}");
}
function void
gen_ast(Ast *ast){
switch(ast->kind){
@@ -194,6 +208,27 @@ gen_ast(Ast *ast){
Ast_End();
}
Ast_Begin(AST_IF, Ast_If){
For(node->ifs){
if(node->ifs.is_first(it)){
genln("if(");
gen_expr(it[0]->expr);
gen(")");
gen_block(it[0]->block);
}
else{
genln("else");
if(it[0]->expr){
gen(" if(");
gen_expr(it[0]->expr);
gen(")");
}
gen_block(it[0]->block);
}
}
Ast_End();
}
Ast_Begin(AST_CONST, Ast_Decl){
Sym *sym = resolved_get(node);
@@ -211,14 +246,7 @@ gen_ast(Ast *ast){
gen(")");
if(lambda->block) {
gen("{");
global_indent++;
For(lambda->block->stmts) {
genln("");
gen_ast(it[0]);
}
global_indent--;
genln("}");
gen_block(lambda->block);
}
else gen(";");
}